From 91952b1745b48a144d0d368f83fa02772f37604d Mon Sep 17 00:00:00 2001 From: goober Date: Fri, 21 Aug 2026 11:38:17 +0300 Subject: [PATCH] feat: NTE gear optimizer web app Client-side optimizer for Neverness to Everness console builds. Imports a gear export from nte-history-exporter, keeps it in IndexedDB, and solves for the best module placement per character or across a team. - domain/: pure ports of the Python research scripts (shapes, cartridges, board tiling, stats, scoring, set bonuses, Arc effects, sheet prediction). No DOM, no storage imports, so they stay worker-safe and Node-testable. - solver/: single-character solve with branch and bound, plus a three-phase team solve (portfolio, leximin, column generation) over disjoint item sets. Runs in a Worker when one can be constructed, inline otherwise. - db/: three storage tiers selected by use rather than feature detection, fail-closed import validation, and undo that restores both sides of a steal. - ui/: React 19 views for items, characters and teams; the board is drawn as the deliverable rather than a score. - Two build targets: a hosted bundle and a single self-contained nte.html with no external requests. Values the model cannot measure are reported as unavailable rather than guessed: cartridge set bonuses, the level 80 base-stat multiplier, and the distinction between "optimal for this packing" and globally optimal. 145 tests, tsc clean, both build targets clean. Co-Authored-By: Claude Opus 5 --- .gitignore | 7 + .nvmrc | 1 + README.md | 58 + data-src/arc_effects.json | 51 + data-src/arcs.json | 14708 ++++ data-src/espers.json | 66951 ++++++++++++++++ data-src/guides.json | 13 + data-src/set-bonuses.json | 127 + index.html | 12 + package-lock.json | 1322 + package.json | 37 + public/img/fork_Arachne_256-159158f2.webp | 1 + public/img/fork_BitGame_256-0cb5217a.webp | 1 + public/img/fork_BitterCake_256-2498fb35.webp | 1 + public/img/fork_BlackBook_256-56849e90.webp | 1 + public/img/fork_BlastCandy_256-4bd61b87.webp | 1 + public/img/fork_BoxingCandy_256-2d9a5897.webp | 1 + public/img/fork_Butterfly_256-1395ba48.webp | 1 + public/img/fork_Castle_256-3ce261aa.webp | 1 + public/img/fork_DemonBlade_256-89200ec7.webp | 1 + public/img/fork_Door_256-7a125283.webp | 1 + public/img/fork_GoldRecord_256-9e37a9a5.webp | 1 + public/img/fork_GoldWool_256-929d1333.webp | 1 + public/img/fork_HugVine_256-aaa93ce6.webp | 1 + public/img/fork_Kite_256-a8b52a91.webp | 1 + public/img/fork_KnightCandy_256-fea87c21.webp | 1 + public/img/fork_LunarPhase_256-58ab7825.webp | 1 + public/img/fork_MotorCandy_256-fd81bc62.webp | 1 + public/img/fork_Nakupeda_256-96338388.webp | 1 + public/img/fork_NestBird_256-f6e28be2.webp | 1 + public/img/fork_PaperPlane_256-2d4e5717.webp | 1 + public/img/fork_PoliceRat_256-d05f72e2.webp | 1 + public/img/fork_Qiaoqiao_256-5fad717f.webp | 1 + public/img/fork_Rose_256-d33fcc29.webp | 1 + public/img/fork_ThiefCandy_256-9b9444e3.webp | 1 + public/img/fork_TigerTally_256-47cfb268.webp | 1 + public/img/fork_Time_256-9cb02755.webp | 1 + public/img/fork_Whale_256-76862d07.webp | 1 + public/img/fork_bopu_256-e045cc0d.webp | 1 + public/img/fork_dustbin_256-6595915b.webp | 1 + public/img/fork_fudianling_256-fe144d13.webp | 1 + public/img/fork_jiaojuan_256-769fdf83.webp | 1 + .../img/fork_jingmotingyuan_256-eccbc72b.webp | 1 + public/img/fork_koinobori_256-c8624200.webp | 1 + .../fork_lingganzhongjiezhe_256-dd4950fd.webp | 1 + public/img/fork_mamen_256-2d0a8b9a.webp | 1 + public/img/fork_mofeikesi_256-db984ecf.webp | 1 + public/img/fork_moon_256-19817a0c.webp | 1 + public/img/fork_nonos_256-4cb5e0fa.webp | 1 + public/img/fork_oulaquantao_256-bcc71d33.webp | 1 + public/img/fork_rishi_256-e4137b85.webp | 1 + public/img/fork_snowman_256-013ccbd0.webp | 1 + public/img/fork_spider_256-656150ea.webp | 1 + public/img/fork_tuansanlang_256-937209b3.webp | 1 + public/img/fork_worldrain_256-cf0b4b4a.webp | 1 + public/img/fork_wuhuakuang_256-ea10c6c4.webp | 1 + public/img/fork_wushoutieyu_256-d83ef63e.webp | 1 + public/img/fork_yaodao_256-e8f57727.webp | 1 + public/img/fork_yuanheti_256-087d4df9.webp | 1 + public/img/fork_yuren_256-727dde45.webp | 1 + public/img/player_003-ace97f94.webp | 1 + public/img/player_004-874ed495.webp | 1 + public/img/player_005-712a486b.webp | 1 + public/img/player_008-4976544f.webp | 1 + public/img/player_009-b9f7ef78.webp | 1 + public/img/player_010-924dc73d.webp | 1 + public/img/player_012-36c8b09f.webp | 1 + public/img/player_013-bf2054be.webp | 1 + public/img/player_015-ddebe8cc.webp | 1 + public/img/player_019-a75c3fbd.webp | 1 + public/img/player_020-3e088a55.webp | 1 + public/img/player_021-6cfb115e.webp | 1 + public/img/player_027-b3e5e8dc.webp | 1 + public/img/player_028-79597e4e.webp | 1 + public/img/player_046-b5837c27.webp | 1 + public/img/player_073-6a824f1f.webp | 1 + public/img/player_104-e857d709.webp | 1 + public/img/player_canhong-8fd9dc5e.webp | 1 + public/img/player_haiyue-28720124.webp | 1 + public/img/player_kaesi1-043cca1a.webp | 1 + public/img/player_lingke-a6dfa678.webp | 1 + public/img/player_yiluoyi-2eeff6ec.webp | 1 + public/img/player_zhenhong-1c5f3031.webp | 1 + src/db/adapters/idb.ts | 161 + src/db/adapters/local-storage.ts | 74 + src/db/adapters/memory.ts | 21 + src/db/adapters/types.ts | 40 + src/db/dbfile.ts | 106 + src/db/import.ts | 306 + src/db/schema.ts | 137 + src/db/store.ts | 277 + src/domain/arcs.ts | 153 + src/domain/board.ts | 132 + src/domain/cartridges.ts | 65 + src/domain/guides.ts | 85 + src/domain/items.ts | 136 + src/domain/render.ts | 76 + src/domain/scoring.ts | 220 + src/domain/setbonus.ts | 66 + src/domain/shapes.ts | 96 + src/domain/sheet.ts | 162 + src/domain/stats.ts | 153 + src/domain/statvec.ts | 146 + src/domain/tilings.ts | 82 + src/generated/gamedata.json | 1 + src/generated/icons.empty.json | 6 + src/generated/icons.json | 78 + src/generated/tilings.json | 1 + src/main.tsx | 13 + src/solver/bitset.ts | 67 + src/solver/host.ts | 140 + src/solver/job.ts | 203 + src/solver/portfolio.ts | 88 + src/solver/protocol.ts | 48 + src/solver/single.ts | 398 + src/solver/team.ts | 374 + src/solver/worker-host.single.ts | 10 + src/solver/worker-host.ts | 12 + src/solver/worker.ts | 47 + src/state/gamedata.ts | 87 + src/state/store.ts | 163 + src/ui/App.tsx | 114 + src/ui/Board.tsx | 60 + src/ui/CharacterView.tsx | 701 + src/ui/CharactersTab.tsx | 111 + src/ui/DataPanel.tsx | 196 + src/ui/Icon.tsx | 51 + src/ui/ItemCard.tsx | 44 + src/ui/ItemTable.tsx | 231 + src/ui/TeamTab.tsx | 328 + src/ui/router.ts | 43 + src/ui/styles.css | 166 + src/ui/useStore.ts | 22 + tests/arcs.test.ts | 128 + tests/db.test.ts | 298 + tests/domain.test.ts | 252 + tests/guides.test.ts | 100 + tests/host.test.ts | 197 + tests/import.test.ts | 171 + tests/router.test.ts | 29 + tests/scoring.test.ts | 147 + tests/sheet.test.ts | 91 + tests/solver.test.ts | 249 + tests/stats.test.ts | 94 + tests/team.test.ts | 188 + tools/bench-solve.ts | 91 + tools/bench-team.ts | 116 + tools/check-guides.ts | 91 + tools/fetch-icons.ts | 80 + tools/precompute-tilings.ts | 115 + tools/prune-gamedata.ts | 136 + tsconfig.app.json | 23 + tsconfig.json | 7 + tsconfig.node.json | 19 + vite.config.ts | 16 + vite.single.config.ts | 98 + vitest.config.ts | 8 + 157 files changed, 92600 insertions(+) create mode 100644 .gitignore create mode 100644 .nvmrc create mode 100644 README.md create mode 100644 data-src/arc_effects.json create mode 100644 data-src/arcs.json create mode 100644 data-src/espers.json create mode 100644 data-src/guides.json create mode 100644 data-src/set-bonuses.json create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/img/fork_Arachne_256-159158f2.webp create mode 100644 public/img/fork_BitGame_256-0cb5217a.webp create mode 100644 public/img/fork_BitterCake_256-2498fb35.webp create mode 100644 public/img/fork_BlackBook_256-56849e90.webp create mode 100644 public/img/fork_BlastCandy_256-4bd61b87.webp create mode 100644 public/img/fork_BoxingCandy_256-2d9a5897.webp create mode 100644 public/img/fork_Butterfly_256-1395ba48.webp create mode 100644 public/img/fork_Castle_256-3ce261aa.webp create mode 100644 public/img/fork_DemonBlade_256-89200ec7.webp create mode 100644 public/img/fork_Door_256-7a125283.webp create mode 100644 public/img/fork_GoldRecord_256-9e37a9a5.webp create mode 100644 public/img/fork_GoldWool_256-929d1333.webp create mode 100644 public/img/fork_HugVine_256-aaa93ce6.webp create mode 100644 public/img/fork_Kite_256-a8b52a91.webp create mode 100644 public/img/fork_KnightCandy_256-fea87c21.webp create mode 100644 public/img/fork_LunarPhase_256-58ab7825.webp create mode 100644 public/img/fork_MotorCandy_256-fd81bc62.webp create mode 100644 public/img/fork_Nakupeda_256-96338388.webp create mode 100644 public/img/fork_NestBird_256-f6e28be2.webp create mode 100644 public/img/fork_PaperPlane_256-2d4e5717.webp create mode 100644 public/img/fork_PoliceRat_256-d05f72e2.webp create mode 100644 public/img/fork_Qiaoqiao_256-5fad717f.webp create mode 100644 public/img/fork_Rose_256-d33fcc29.webp create mode 100644 public/img/fork_ThiefCandy_256-9b9444e3.webp create mode 100644 public/img/fork_TigerTally_256-47cfb268.webp create mode 100644 public/img/fork_Time_256-9cb02755.webp create mode 100644 public/img/fork_Whale_256-76862d07.webp create mode 100644 public/img/fork_bopu_256-e045cc0d.webp create mode 100644 public/img/fork_dustbin_256-6595915b.webp create mode 100644 public/img/fork_fudianling_256-fe144d13.webp create mode 100644 public/img/fork_jiaojuan_256-769fdf83.webp create mode 100644 public/img/fork_jingmotingyuan_256-eccbc72b.webp create mode 100644 public/img/fork_koinobori_256-c8624200.webp create mode 100644 public/img/fork_lingganzhongjiezhe_256-dd4950fd.webp create mode 100644 public/img/fork_mamen_256-2d0a8b9a.webp create mode 100644 public/img/fork_mofeikesi_256-db984ecf.webp create mode 100644 public/img/fork_moon_256-19817a0c.webp create mode 100644 public/img/fork_nonos_256-4cb5e0fa.webp create mode 100644 public/img/fork_oulaquantao_256-bcc71d33.webp create mode 100644 public/img/fork_rishi_256-e4137b85.webp create mode 100644 public/img/fork_snowman_256-013ccbd0.webp create mode 100644 public/img/fork_spider_256-656150ea.webp create mode 100644 public/img/fork_tuansanlang_256-937209b3.webp create mode 100644 public/img/fork_worldrain_256-cf0b4b4a.webp create mode 100644 public/img/fork_wuhuakuang_256-ea10c6c4.webp create mode 100644 public/img/fork_wushoutieyu_256-d83ef63e.webp create mode 100644 public/img/fork_yaodao_256-e8f57727.webp create mode 100644 public/img/fork_yuanheti_256-087d4df9.webp create mode 100644 public/img/fork_yuren_256-727dde45.webp create mode 100644 public/img/player_003-ace97f94.webp create mode 100644 public/img/player_004-874ed495.webp create mode 100644 public/img/player_005-712a486b.webp create mode 100644 public/img/player_008-4976544f.webp create mode 100644 public/img/player_009-b9f7ef78.webp create mode 100644 public/img/player_010-924dc73d.webp create mode 100644 public/img/player_012-36c8b09f.webp create mode 100644 public/img/player_013-bf2054be.webp create mode 100644 public/img/player_015-ddebe8cc.webp create mode 100644 public/img/player_019-a75c3fbd.webp create mode 100644 public/img/player_020-3e088a55.webp create mode 100644 public/img/player_021-6cfb115e.webp create mode 100644 public/img/player_027-b3e5e8dc.webp create mode 100644 public/img/player_028-79597e4e.webp create mode 100644 public/img/player_046-b5837c27.webp create mode 100644 public/img/player_073-6a824f1f.webp create mode 100644 public/img/player_104-e857d709.webp create mode 100644 public/img/player_canhong-8fd9dc5e.webp create mode 100644 public/img/player_haiyue-28720124.webp create mode 100644 public/img/player_kaesi1-043cca1a.webp create mode 100644 public/img/player_lingke-a6dfa678.webp create mode 100644 public/img/player_yiluoyi-2eeff6ec.webp create mode 100644 public/img/player_zhenhong-1c5f3031.webp create mode 100644 src/db/adapters/idb.ts create mode 100644 src/db/adapters/local-storage.ts create mode 100644 src/db/adapters/memory.ts create mode 100644 src/db/adapters/types.ts create mode 100644 src/db/dbfile.ts create mode 100644 src/db/import.ts create mode 100644 src/db/schema.ts create mode 100644 src/db/store.ts create mode 100644 src/domain/arcs.ts create mode 100644 src/domain/board.ts create mode 100644 src/domain/cartridges.ts create mode 100644 src/domain/guides.ts create mode 100644 src/domain/items.ts create mode 100644 src/domain/render.ts create mode 100644 src/domain/scoring.ts create mode 100644 src/domain/setbonus.ts create mode 100644 src/domain/shapes.ts create mode 100644 src/domain/sheet.ts create mode 100644 src/domain/stats.ts create mode 100644 src/domain/statvec.ts create mode 100644 src/domain/tilings.ts create mode 100644 src/generated/gamedata.json create mode 100644 src/generated/icons.empty.json create mode 100644 src/generated/icons.json create mode 100644 src/generated/tilings.json create mode 100644 src/main.tsx create mode 100644 src/solver/bitset.ts create mode 100644 src/solver/host.ts create mode 100644 src/solver/job.ts create mode 100644 src/solver/portfolio.ts create mode 100644 src/solver/protocol.ts create mode 100644 src/solver/single.ts create mode 100644 src/solver/team.ts create mode 100644 src/solver/worker-host.single.ts create mode 100644 src/solver/worker-host.ts create mode 100644 src/solver/worker.ts create mode 100644 src/state/gamedata.ts create mode 100644 src/state/store.ts create mode 100644 src/ui/App.tsx create mode 100644 src/ui/Board.tsx create mode 100644 src/ui/CharacterView.tsx create mode 100644 src/ui/CharactersTab.tsx create mode 100644 src/ui/DataPanel.tsx create mode 100644 src/ui/Icon.tsx create mode 100644 src/ui/ItemCard.tsx create mode 100644 src/ui/ItemTable.tsx create mode 100644 src/ui/TeamTab.tsx create mode 100644 src/ui/router.ts create mode 100644 src/ui/styles.css create mode 100644 src/ui/useStore.ts create mode 100644 tests/arcs.test.ts create mode 100644 tests/db.test.ts create mode 100644 tests/domain.test.ts create mode 100644 tests/guides.test.ts create mode 100644 tests/host.test.ts create mode 100644 tests/import.test.ts create mode 100644 tests/router.test.ts create mode 100644 tests/scoring.test.ts create mode 100644 tests/sheet.test.ts create mode 100644 tests/solver.test.ts create mode 100644 tests/stats.test.ts create mode 100644 tests/team.test.ts create mode 100644 tools/bench-solve.ts create mode 100644 tools/bench-team.ts create mode 100644 tools/check-guides.ts create mode 100644 tools/fetch-icons.ts create mode 100644 tools/precompute-tilings.ts create mode 100644 tools/prune-gamedata.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts create mode 100644 vite.single.config.ts create mode 100644 vitest.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..753e2e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +*.local +.DS_Store +.tsbuild/ + +# Build output; the deploy copies it, git does not carry it. +dist/ diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..c947119 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22.23.2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..30bf282 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# nte-optimizer + +Gear optimizer for *Neverness to Everness*. Static site, no server, no account. + +It imports the JSON that [`nte-exporter`](../nte-exporter) writes during a normal +capture run, and recommends what to equip on whom — drawn onto each character's +console grid. + +## Running it + +```sh +npm ci +npm run dev # development +npm run build # dist/index.html — the normal build +npm run build:single # dist/nte.html — one file, works over file:// +npm test +``` + +`dist/` is **committed on purpose**. In three years, when `npm ci` fails on some +transitive native module, `python3 -m http.server -d dist` will still work. The +source build is the convenience; the committed output is the artifact. + +## Layout + +| path | what lives there | +|---|---| +| `data-src/` | raw everness mirrors, Arc classifications, guide data. Committed, not shipped. | +| `tools/` | build-time scripts. Output goes to `src/generated/`, also committed. | +| `src/domain/` | **pure.** No DOM, no IndexedDB, no imports from `ui/`, `db/` or `state/`. | +| `src/solver/` | same rule. Chunked generators, so they run in a worker or inline unchanged. | +| `src/db/` | schema, migrations, import, persistence adapters. | +| `src/ui/` | React. Four tabs and a hash router. | + +The `domain/` and `solver/` rule is what makes them worker-safe, Node-testable +and diffable against the Python they were ported from. Keep it. + +## Two things that are easy to get wrong + +**Ported rules were expensive to derive and break in ways that still look +plausible.** Before touching anything in `domain/`, read +`~/Apps/nte-research/WIREFORMAT.md` and the "facts worth not re-deriving" +section of `RESUME.md`. Builds are 6, 7 or 8 modules and never always 7; the +console trait is not always CRIT DMG or Type III; a transposed board renders +correctly on a symmetric grid. + +**The model has measured gaps, and the app is built to show them rather than +hide them.** Set bonus values are unknown and contribute nothing. The base-stat +multiplier has never been read at level 80. A `proven` build is optimal for its +packing and cartridge, not globally. Every one of those is surfaced in the UI on +purpose — if you find yourself replacing one with a plausible number, don't. + +## Degraded modes + +Opening `dist/nte.html` from the filesystem gives the page an opaque origin, so +IndexedDB, workers, `fetch` and module scripts are all unavailable. The app +handles this behind two interfaces it never sees through — `PersistenceAdapter` +(IndexedDB → localStorage → memory) and `SolverHost` (worker → inline) — and +shows a banner when storage is not durable. Artwork is not carried in that build. diff --git a/data-src/arc_effects.json b/data-src/arc_effects.json new file mode 100644 index 0000000..d4293f2 --- /dev/null +++ b/data-src/arc_effects.json @@ -0,0 +1,51 @@ +{ + "fork_appliance": {"name": "Real Music", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Redirect Skill DMG is named ability damage, not a sheet stat."}]}, + "fork_vine": {"name": "Be Happy", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "toggle", "default": false, "why": "Heal-on-kill is conditional HP recovery for wearer."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_dustbin": {"name": "Dangerous Game", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "toggle", "default": false, "why": "Conditional Break Intensity while reducing Break."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Buff duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_nonos": {"name": "First Step to Success", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Buff duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_Prokaryon": {"name": "Us.", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Basic Attack damage is named ability damage, not a sheet stat."}]}, + "fork_BitGame": {"name": "Blow up the Crowd", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Off-field ATK buff is conditional."}, {"placeholder": 1, "stat": "ATK", "percent": true, "mode": "stacks", "max_stacks": 4, "default_stacks": 0, "why": "ATK gained per damage trigger stacks to 4."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Trigger interval in seconds, not a stat."}, {"placeholder": 3, "stat": null, "mode": "toggle", "default": false, "why": "Psyche DMG is ability/element damage, not a sheet stat."}, {"placeholder": 4, "stat": null, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Named ability damage stacker; not modelled as sheet stat."}]}, + "fork_LunarPhase": {"name": "Blushing Mirage", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK always active."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Cosmos DMG is element damage, not unconditional sheet stat."}, {"placeholder": 2, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "DEF ignore is a conditional defensive modifier."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_jingmotingyuan": {"name": "Camellia Society", "effects": [{"placeholder": 0, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 4, "default_stacks": 0, "why": "Crit DMG stacks when HP is reduced without damage."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Stack duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Self-HP cost, not a stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}, {"placeholder": 4, "stat": null, "mode": "unmodellable", "why": "Incantation DMG is named attack damage, not a sheet stat."}, {"placeholder": 5, "stat": null, "mode": "unmodellable", "why": "Incantation DMG is named attack damage, not a sheet stat."}]}, + "fork_mamen": {"name": "Contemplative Cat", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Fons threshold only gates the effect; not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Cosmos DMG is element damage, stacked per Fons threshold."}]}, + "fork_rishi": {"name": "Day Off", "effects": [{"placeholder": 0, "stat": "Charge Efficiency", "percent": true, "mode": "always", "why": "Flat Charge Efficiency bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Ultimate Energy restore amount is not a sheet stat."}, {"placeholder": 3, "stat": null, "mode": "stacks", "max_stacks": 5, "default_stacks": 0, "why": "Count of restores, not a sheet stat."}, {"placeholder": 4, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_Arachne": {"name": "Eternal Waltz", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "always", "why": "Flat Max HP bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Mental DMG is element/ability damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_BlastCandy": {"name": "Fluff of Fearlessness", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "ATK buff after Ultimate, conditional."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_KnightCandy": {"name": "Fluff of Ferocity", "effects": [{"placeholder": 0, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Crit DMG stacks on crit hits."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_ThiefCandy": {"name": "Fluff of Finesse", "effects": [{"placeholder": 0, "stat": "Universal DMG%", "percent": true, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Damage bonus is universal and stacks on Critical Dodge."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_MotorCandy": {"name": "Fluff of Fleetness", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "1s tick interval, not a stat."}, {"placeholder": 1, "stat": "ATK", "percent": true, "mode": "stacks", "max_stacks": 5, "default_stacks": 0, "why": "ATK stacks while active up to 5."}]}, + "fork_BoxingCandy": {"name": "Fluff of Fortitude", "effects": [{"placeholder": 0, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "DMG bonus is universal and conditionally higher below 50% HP."}, {"placeholder": 1, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "Higher conditional tier of same DMG bonus."}]}, + "fork_mofeikesi": {"name": "Good Boy's Grand Adventure", "effects": [{"placeholder": 0, "stat": "Charge Efficiency", "percent": true, "mode": "always", "why": "Flat Charge Efficiency bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Team ATK buff after Ultimate."}, {"placeholder": 3, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Extra team ATK bonus if Ultimate controls enemies."}]}, + "fork_PoliceRat": {"name": "Hethereau's Keeper", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "unmodellable", "why": "Boss damage is target-specific damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "unmodellable", "why": "Summon damage based on ATK is not a sheet stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_Time": {"name": "Marching Beyond Time", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": "Ultimate Crit DMG", "percent": true, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Ultimate Crit DMG consumes Wastetime stacks."}, {"placeholder": 2, "stat": null, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Wastetime count is a trigger resource, not a sheet stat."}, {"placeholder": 3, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "DEF ignore is conditional on consuming 3 stacks."}, {"placeholder": 4, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_wushoutieyu": {"name": "Raging Flames", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Redirect Skill/Ultimate DMG is named ability damage, not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "stacks", "max_stacks": 2, "default_stacks": 0, "why": "Stack count for named ability damage, not a sheet stat."}, {"placeholder": 3, "stat": null, "mode": "toggle", "default": false, "why": "Lakshana DMG is element damage, not always-on sheet stat."}]}, + "fork_DemonBlade": {"name": "Ravenous Blade", "effects": [{"placeholder": 0, "stat": "CRIT Rate", "percent": true, "mode": "always", "why": "Flat Crit Rate while equipped."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 7, "default_stacks": 0, "why": "Crit DMG stacks when dealing Incantation DMG."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_TigerTally": {"name": "Ready-Ready", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "unmodellable", "why": "Basic Attack/Critical Riposte damage is named ability damage."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 4, "stat": null, "mode": "unmodellable", "why": "Boss damage is target-specific damage, not a sheet stat."}, {"placeholder": 5, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_Butterfly": {"name": "Reality Refuge", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Anima DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Attachment DMG is named ability damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "toggle", "default": false, "why": "Higher conditional tier of same named ability damage."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_Whale": {"name": "Song of the Whale", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Damage to Broken enemies is conditional target damage."}, {"placeholder": 2, "stat": "HP", "percent": true, "mode": "toggle", "default": false, "why": "HP recovery on Broken enemy defeat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_moon": {"name": "Stellar Veil", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Psyche DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Crit DMG stacks on Psyche DMG hits."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_NestBird": {"name": "Tears Beneath the Mask", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Damage reduction on marked enemies is not a wearer sheet stat."}]}, + "fork_Rose": {"name": "The Last Rose", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Crit DMG stacks from Chaos Thorn."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Stack duration in seconds, not a stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration of immediate stack grant, not a stat."}]}, + "fork_worldrain": {"name": "The Rain That Shook the World", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Cosmos DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": "Cycle Intensity", "mode": "toggle", "default": false, "why": "Flat Cycle Intensity bonus after Redirect Skill."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_Door": {"name": "The Wrong Gate", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Anima DMG is element damage, not a sheet stat."}, {"placeholder": 2, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "All allies' DMG is a universal damage buff."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_GoldRecord": {"name": "Voice of the Voyager", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "always", "why": "Flat ATK bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "unmodellable", "why": "Support Skill Crit DMG is named ability damage."}, {"placeholder": 2, "stat": null, "mode": "stacks", "max_stacks": 3, "default_stacks": 0, "why": "Ultimate Crit DMG stacks from Support Skill damage."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_GoldWool": {"name": "What's Desired", "effects": [{"placeholder": 0, "stat": null, "mode": "toggle", "default": false, "why": "Lakshana DMG is element damage, not a sheet stat."}, {"placeholder": 1, "stat": "CRIT DMG", "percent": true, "mode": "toggle", "default": false, "why": "Conditional Crit DMG buff after Redirect Skill or Ultimate."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_Nakupeda": {"name": "Your Happiness is Priceless", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "always", "why": "Flat HP bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Team healing/Shield/HP effects are not wearer sheet stats."}, {"placeholder": 2, "stat": null, "mode": "toggle", "default": false, "why": "Shield amount is not a wearer sheet stat."}, {"placeholder": 3, "stat": null, "mode": "duration", "why": "Shield duration in seconds, not a stat."}, {"placeholder": 4, "stat": null, "mode": "toggle", "default": false, "why": "Team HP recovery is not a wearer sheet stat."}, {"placeholder": 5, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_BlackBook": {"name": "Youthful Fantasy", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "always", "why": "Flat Break Intensity bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Chain count is a trigger resource, not a stat."}, {"placeholder": 3, "stat": null, "mode": "toggle", "default": false, "why": "Chaos DMG is element damage, not a sheet stat."}, {"placeholder": 4, "stat": null, "mode": "unmodellable", "why": "Break Damage scaling is not a wearer sheet stat."}]}, + "fork_koinobori": {"name": "A Time Will Come", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional team ATK bonus when team comp requirement is met."}, {"placeholder": 1, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "Conditional team DEF bonus when team comp requirement is met."}, {"placeholder": 2, "stat": "HP", "percent": true, "mode": "toggle", "default": false, "why": "Conditional team HP bonus when team comp requirement is met."}]}, + "fork_Castle": {"name": "Call of the Twisted City", "effects": [{"placeholder": 0, "stat": "Healing Bonus", "percent": true, "mode": "toggle", "default": false, "why": "Conditional Healing Bonus after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_PaperPlane": {"name": "Clear Skies", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Redirect Skill/Ultimate DMG is named ability damage, not a sheet stat."}]}, + "fork_bopu": {"name": "Cosmos Daze, Wild Reverie", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 1, "stat": "Universal DMG%", "percent": true, "mode": "toggle", "default": false, "why": "Damage dealt bonus is universal and conditional after Support Skill."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_yaodao": {"name": "Drawn Blade", "effects": [{"placeholder": 0, "stat": null, "mode": "unmodellable", "why": "Incantation DMG based on ATK is named ability damage."}]}, + "fork_spider": {"name": "Failing You, Heavy in My Heart", "effects": [{"placeholder": 0, "stat": null, "mode": "stacks", "max_stacks": 8, "default_stacks": 0, "why": "Stack count for Spider Knowledge resource, not a sheet stat."}, {"placeholder": 1, "stat": "ATK", "percent": true, "mode": "stacks", "max_stacks": 8, "default_stacks": 0, "why": "Team ATK buff per stack consumed on Ultimate."}, {"placeholder": 2, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional extra ATK when 8 stacks are consumed."}]}, + "fork_lingganzhongjiezhe": {"name": "Mind Royale", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "Ultimate Energy amount is not a sheet stat."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_oulaquantao": {"name": "Oraora!", "effects": [{"placeholder": 0, "stat": null, "mode": "duration", "why": "Stack duration in seconds, not a stat."}, {"placeholder": 1, "stat": null, "mode": "stacks", "max_stacks": 10, "default_stacks": 0, "why": "Basic Attack DMG is named ability damage, not a sheet stat."}]}, + "fork_jiaojuan": {"name": "Shiny Days", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "always", "why": "Flat Break Intensity bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Damage against Broken units is target-specific damage, not a sheet stat."}]}, + "fork_snowman": {"name": "The Fools' Spring", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff while shielded."}]}, + "fork_wuhuakuang": {"name": "The Forgotten", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff above 50% HP."}, {"placeholder": 1, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "Conditional DEF buff below 50% HP."}]}, + "fork_BitterCake": {"name": "The Good, The Bad, The Bitter", "effects": [{"placeholder": 0, "stat": "DEF", "percent": true, "mode": "toggle", "default": false, "why": "Conditional DEF buff when taking damage."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Cooldown in seconds, not a stat."}]}, + "fork_tuansanlang": {"name": "The Great Thief", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "toggle", "default": false, "why": "Conditional team Break Intensity buff for same Esper Type."}]}, + "fork_Crowbar": {"name": "Time Bandit", "effects": [{"placeholder": 0, "stat": "Break Intensity", "mode": "toggle", "default": false, "why": "Conditional Break Intensity buff after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]}, + "fork_yuren": {"name": "Umbrella", "effects": [{"placeholder": 0, "stat": "HP", "percent": true, "mode": "always", "why": "Flat HP bonus while equipped."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Shield strength is not a wearer sheet stat."}]}, + "fork_Kite": {"name": "Watch Your Heads!", "effects": [{"placeholder": 0, "stat": "ATK", "percent": true, "mode": "toggle", "default": false, "why": "Conditional ATK buff after Redirect Skill."}, {"placeholder": 1, "stat": null, "mode": "toggle", "default": false, "why": "Lakshana DMG is element damage, not a sheet stat."}, {"placeholder": 2, "stat": null, "mode": "duration", "why": "Duration in seconds, not a stat."}]} +} diff --git a/data-src/arcs.json b/data-src/arcs.json new file mode 100644 index 0000000..2d8dd2e --- /dev/null +++ b/data-src/arcs.json @@ -0,0 +1,14708 @@ +[ + { + "id": "fork_yuren", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "purple", + "name": "Umbrella", + "desc": "Remember to get enough sleep and check the weather forecast; remember to eat your meals and take an umbrella when going out.", + "context": "Remember to get enough sleep and check the weather forecast; remember to eat your meals and take an umbrella when going out.", + "icon": "/Game/UI/UI_Icon/Fork/fork_yuren_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_yuren_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_yuren", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_yuren", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 25, + 29, + 32, + 35, + 39, + 42, + 45, + 48, + 52, + 55, + 58, + 62, + 65, + 68, + 72, + 75, + 78, + 81, + 85, + 106, + 109, + 113, + 116, + 119, + 123, + 126, + 129, + 132, + 136, + 157, + 160, + 164, + 167, + 170, + 174, + 177, + 180, + 183, + 187, + 208, + 211, + 215, + 218, + 221, + 225, + 228, + 231, + 234, + 238, + 259, + 262, + 266, + 269, + 272, + 276, + 279, + 282, + 285, + 289, + 310, + 313, + 317, + 320, + 323, + 327, + 330, + 333, + 336, + 340, + 362, + 365, + 369, + 372, + 375, + 379, + 382, + 385, + 388, + 392, + 395 + ] + }, + { + "id_stats": "DefUp", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bIsPercent": true, + "values": [ + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5 + ] + } + ], + "effect": { + "name": "\"Rainman\"", + "description": "Increases HP by {0}.\r\nStrengthens shields by {1} while the wearer's HP is above 50%.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + }, + { + "id_value": 1, + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_bopu", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "purple", + "name": "Cosmos Daze, Wild Reverie", + "desc": "Masterpiece from Pop Re-Creator!", + "context": "Masterpiece from Pop Re-Creator!", + "icon": "/Game/UI/UI_Icon/Fork/fork_bopu_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_bopu_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_bopu", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_bopu", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + } + ], + "effect": { + "name": "\"Bopp\"", + "description": "Increases wearer's damage dealt by {1} for {0}s after casting Support Skill. Triggers at most once every {2}s.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "18%", + "21%", + "24%", + "27%", + "30%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_mofeikesi", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "orange", + "name": "Good Boy's Grand Adventure", + "desc": "What do you see? A winged white wolf? An adorable white dog? Or perhaps…?", + "context": "What do you see? A winged white wolf? An adorable white dog? Or perhaps…?", + "icon": "/Game/UI/UI_Icon/Fork/fork_mofeikesi_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_mofeikesi_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_mofeikesi", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_mofeikesi", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 434, + 438, + 442, + 446, + 450, + 454, + 458, + 462, + 466, + 470, + 474 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 40.5, + 40.5, + 40.5, + 40.5, + 40.5, + 40.5, + 40.5, + 40.5, + 40.5, + 40.5, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45 + ] + } + ], + "effect": { + "name": "Morphix", + "description": "Increases Charge Efficiency by {0}.\r\nIncreases Team ATK by {2} for {1}s after the wearer casts an Ultimate. Increases Team ATK by an additional {3} if enemies are controlled by the Ultimate. Effects with the same name do not stack.", + "values": [ + { + "id_value": 0, + "id_stats": "ChargeGetEfficiencyBase", + "name": "Charge Efficiency", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_CostGainEfficiency", + "bIsPercent": true, + "values": [ + "18%", + "21%", + "24%", + "27%", + "30%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + }, + { + "id_value": 2, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "10%", + "11.5%", + "13%", + "14.5%", + "16%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "6%", + "7%", + "8%", + "9%", + "10%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_jiaojuan", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "purple", + "name": "Shiny Days", + "desc": "Capturing these radiant moments, even in dreams they must go on. Regret was never beautiful, and you were never alone.", + "context": "Capturing these radiant moments, even in dreams they must go on.", + "icon": "/Game/UI/UI_Icon/Fork/fork_jiaojuan_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_jiaojuan_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_jiaojuan", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_jiaojuan", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + } + ], + "effect": { + "name": "Film - MANISH", + "description": "Increases Break Intensity by {0}.\nIncreases DMG by {1} against Broken units.", + "values": [ + { + "id_value": 0, + "id_stats": "UnbalIntensity", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 48, + 57, + 66, + 75, + 84 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_wuhuakuang", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "purple", + "name": "The Forgotten", + "desc": "Even if I'm just a complement to those masterpieces… I'm still beautiful too, right?", + "context": "Even if I'm just a complement to those masterpieces… I'm still beautiful too, right?", + "icon": "/Game/UI/UI_Icon/Fork/fork_wuhuakuang_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_wuhuakuang_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_wuhuakuang", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_wuhuakuang", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + } + ], + "effect": { + "name": "Picture Frame", + "description": "Increases ATK by {0} when the wearer’s HP is above 50%; increases DEF by {1} when HP is below 50%.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "20%", + "24%", + "28%", + "32%", + "36%" + ] + }, + { + "id_value": 1, + "id_stats": "DefUp", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bIsPercent": true, + "values": [ + "20%", + "24%", + "28%", + "32%", + "36%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_jingmotingyuan", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "orange", + "name": "Camellia Society", + "desc": "Though I'm not supposed to let my composure slip onto the petals… that flower really cut deep.", + "context": "Though I'm not supposed to let my composure slip onto the petals… that flower really cut deep.", + "icon": "/Game/UI/UI_Icon/Fork/fork_jingmotingyuan_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_jingmotingyuan_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_jingmotingyuan", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_jingmotingyuan", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 43, + 48, + 54, + 59, + 65, + 70, + 76, + 81, + 87, + 93, + 98, + 104, + 109, + 115, + 120, + 126, + 131, + 137, + 142, + 178, + 184, + 189, + 195, + 200, + 206, + 211, + 217, + 222, + 228, + 265, + 270, + 276, + 281, + 287, + 292, + 298, + 303, + 309, + 314, + 351, + 357, + 362, + 368, + 373, + 379, + 384, + 390, + 395, + 401, + 438, + 443, + 449, + 454, + 460, + 465, + 471, + 476, + 482, + 487, + 524, + 530, + 535, + 541, + 546, + 552, + 557, + 563, + 568, + 574, + 611, + 616, + 622, + 627, + 633, + 638, + 644, + 649, + 655, + 660, + 666 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 4.8, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7.2, + 7.2, + 7.2, + 7.2, + 7.2, + 7.2, + 7.2, + 7.2, + 7.2, + 7.2, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 8.4, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 10.8, + 10.8, + 10.8, + 10.8, + 10.8, + 10.8, + 10.8, + 10.8, + 10.8, + 10.8, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + } + ], + "effect": { + "name": "Silent Garden", + "description": "Increases CRIT DMG by {1} for {0}s when the wearer's HP is reduced without taking damage, up to 4 stacks. Unlocks Arc: Silent Garden.\r\nConsumes {2} of current HP and randomly performs one of the following attacks (CD {3}s) in Arc: Silent Garden:\r\nHarsh Rebuke: Rains merciless rebukes like leaves in a storm, dealing 5 instances of Incantation DMG of {4} ATK.\r\nIncessant Nagging: Pierces targets with sharp, cutting words like thorns, dealing 6 instances of Incantation DMG of {5} ATK; the final instance deals double damage.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "12%", + "14%", + "16%", + "18%", + "20%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "5%", + "5%", + "5%", + "5%", + "5%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 25, + 25, + 25, + 25, + 25 + ] + }, + { + "id_value": 4, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "24%", + "28%", + "32%", + "36%", + "40%" + ] + }, + { + "id_value": 5, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "18%", + "21%", + "24%", + "27%", + "30%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_oulaquantao", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "purple", + "name": "Oraora!", + "desc": "It's said that in a faraway place, Ora Puncher has a cousin, Muda Puncher.", + "context": "It's said that in a faraway place, Ora Puncher has a cousin, Muda Puncher.", + "icon": "/Game/UI/UI_Icon/Fork/fork_oulaquantao_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_oulaquantao_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_oulaquantao", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_oulaquantao", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 25, + 29, + 32, + 35, + 39, + 42, + 45, + 48, + 52, + 55, + 58, + 62, + 65, + 68, + 72, + 75, + 78, + 81, + 85, + 106, + 109, + 113, + 116, + 119, + 123, + 126, + 129, + 132, + 136, + 157, + 160, + 164, + 167, + 170, + 174, + 177, + 180, + 183, + 187, + 208, + 211, + 215, + 218, + 221, + 225, + 228, + 231, + 234, + 238, + 259, + 262, + 266, + 269, + 272, + 276, + 279, + 282, + 285, + 289, + 310, + 313, + 317, + 320, + 323, + 327, + 330, + 333, + 336, + 340, + 362, + 365, + 369, + 372, + 375, + 379, + 382, + 385, + 388, + 392, + 395 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5 + ] + } + ], + "effect": { + "name": "Ora Puncher", + "description": "Increases the wearer's Basic Attack DMG by {1} for {0}s after each Basic Attack, up to 10 stacks. Each stack's duration is calculated independently, and is not reset when new stacks are gained.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2%", + "2.4%", + "2.8%", + "3.2%", + "3.6%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_lingganzhongjiezhe", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "purple", + "name": "Mind Royale", + "desc": "Inspiration is like potato chips—crunching and crackling, leaving scattered crumbs everywhere, without rhyme or reason.", + "context": "Inspiration is like potato chips—crunching and crackling, leaving scattered crumbs everywhere, without rhyme or reason.", + "icon": "/Game/UI/UI_Icon/Fork/fork_lingganzhongjiezhe_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_lingganzhongjiezhe_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_lingganzhongjiezhe", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_lingganzhongjiezhe", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 36, + 40, + 45, + 50, + 54, + 59, + 64, + 68, + 73, + 78, + 82, + 87, + 91, + 96, + 101, + 105, + 110, + 115, + 119, + 149, + 154, + 158, + 163, + 168, + 172, + 177, + 182, + 186, + 191, + 222, + 226, + 231, + 235, + 240, + 245, + 249, + 254, + 259, + 263, + 293, + 298, + 302, + 307, + 312, + 316, + 321, + 326, + 330, + 335, + 366, + 370, + 375, + 379, + 384, + 389, + 393, + 398, + 403, + 407, + 437, + 442, + 446, + 451, + 456, + 460, + 465, + 470, + 474, + 479, + 509, + 513, + 518, + 522, + 527, + 532, + 536, + 541, + 546, + 550, + 555 + ] + }, + { + "id_stats": "UnbalIntensityBase", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 54, + 54, + 54, + 54, + 54, + 54, + 54, + 54, + 54, + 54, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60 + ] + } + ], + "effect": { + "name": "Inspiration Terminator", + "description": "Grants the wearer {0} Ultimate Energy when casting a Redirect Skill. Triggers up to once every {1}s.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 12, + 14, + 16, + 18 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_rishi", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "Day Off", + "desc": "Eclipse said, \"Let there be double days off.\"\nAnd thus, the double days off came into being (Eclipse Exclusive Edition).", + "context": "Eclipse said: let there be weekends.", + "icon": "/Game/UI/UI_Icon/Fork/fork_rishi_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_rishi_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_rishi", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_rishi", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "ChargeGetEfficiencyBase", + "name": "Charge Efficiency", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_CostGainEfficiency", + "bIsPercent": true, + "values": [ + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 29.7, + 29.7, + 29.7, + 29.7, + 29.7, + 29.7, + 29.7, + 29.7, + 29.7, + 29.7, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33 + ] + } + ], + "effect": { + "name": "Eclipse", + "description": "Increases wearer's ATK by {0}. Unlocks Arc: Eclipse.\r\nArc: Eclipse — The wearer creates a {1}s Eclipse. During the Eclipse, each enemy defeated restores {2} Ultimate Energy, up to {3} times. (cooldown: {4}s).", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "30%", + "35%", + "40%", + "45%", + "50%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 40, + 40, + 40, + 40, + 40 + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 6, + 7, + 8, + 9, + 10 + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_value": 4, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 300, + 300, + 300, + 300, + 300 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_dustbin", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "blue", + "name": "Dangerous Game", + "desc": "Let's make a bet. Loser goes broke.", + "context": "Let's make a bet. Loser goes broke.", + "icon": "/Game/UI/UI_Icon/Fork/fork_dustbin_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_dustbin_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_dustbin", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_dustbin", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 24, + 27, + 30, + 34, + 37, + 40, + 43, + 46, + 49, + 53, + 56, + 59, + 62, + 65, + 68, + 71, + 75, + 78, + 81, + 101, + 104, + 107, + 110, + 114, + 117, + 120, + 123, + 126, + 129, + 151, + 154, + 157, + 160, + 163, + 166, + 169, + 173, + 176, + 179, + 200, + 203, + 206, + 209, + 213, + 216, + 219, + 222, + 225, + 228, + 250, + 253, + 256, + 259, + 262, + 265, + 268, + 272, + 275, + 278, + 299, + 302, + 305, + 308, + 312, + 315, + 318, + 321, + 324, + 327, + 349, + 352, + 355, + 358, + 361, + 364, + 367, + 371, + 374, + 377, + 380 + ] + }, + { + "id_stats": "UnbalIntensityBase", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 58, + 58, + 58, + 58, + 58, + 58, + 58, + 58, + 58, + 58, + 67, + 67, + 67, + 67, + 67, + 67, + 67, + 67, + 67, + 67, + 77, + 77, + 77, + 77, + 77, + 77, + 77, + 77, + 77, + 77, + 86, + 86, + 86, + 86, + 86, + 86, + 86, + 86, + 86, + 86, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96 + ] + } + ], + "effect": { + "name": "\"Decomposer\"", + "description": "Increases wearer's Break Intensity by {0} for {1}s when reducing Break. Triggers at most once every {2}s.", + "values": [ + { + "id_value": 0, + "id_stats": "UnbalIntensity", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 60, + 66, + 72, + 78, + 84 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2, + 2 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 8, + 8 + ] + } + ] + }, + { + "id": "fork_nonos", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "blue", + "name": "First Step to Success", + "desc": "Good self-control is the first step on the road to success.", + "context": "Good self-control is the first step on the road to success.", + "icon": "/Game/UI/UI_Icon/Fork/fork_nonos_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_nonos_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_nonos", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_nonos", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 24, + 27, + 30, + 34, + 37, + 40, + 43, + 46, + 49, + 53, + 56, + 59, + 62, + 65, + 68, + 71, + 75, + 78, + 81, + 101, + 104, + 107, + 110, + 114, + 117, + 120, + 123, + 126, + 129, + 151, + 154, + 157, + 160, + 163, + 166, + 169, + 173, + 176, + 179, + 200, + 203, + 206, + 209, + 213, + 216, + 219, + 222, + 225, + 228, + 250, + 253, + 256, + 259, + 262, + 265, + 268, + 272, + 275, + 278, + 299, + 302, + 305, + 308, + 312, + 315, + 318, + 321, + 324, + 327, + 349, + 352, + 355, + 358, + 361, + 364, + 367, + 371, + 374, + 377, + 380 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + } + ], + "effect": { + "name": "Noros", + "description": "Increases wearer's ATK by {0} for {1}s when casting a Redirect Skill. Triggers up to once every {2}s.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "12%", + "13%", + "14%", + "15%", + "16%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2, + 2 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 8, + 8 + ] + } + ] + }, + { + "id": "fork_vine", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "blue", + "name": "Be Happy", + "desc": "Hm? Why aren't you laughing?", + "context": "Hm? Why aren't you laughing?", + "icon": "/Game/UI/UI_Icon/Fork/fork_HugVine_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_HugVine_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_HugVine", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_HugVine", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 21, + 23, + 26, + 29, + 32, + 34, + 37, + 40, + 42, + 45, + 48, + 50, + 53, + 56, + 59, + 61, + 64, + 67, + 69, + 86, + 89, + 91, + 94, + 97, + 100, + 102, + 105, + 108, + 110, + 126, + 129, + 131, + 134, + 137, + 140, + 142, + 145, + 148, + 150, + 167, + 170, + 172, + 175, + 178, + 181, + 183, + 186, + 189, + 191, + 208, + 211, + 213, + 216, + 219, + 222, + 224, + 227, + 230, + 232, + 248, + 251, + 253, + 256, + 259, + 262, + 264, + 267, + 270, + 272, + 289, + 292, + 294, + 297, + 300, + 303, + 305, + 308, + 311, + 313, + 316 + ] + }, + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + } + ], + "effect": { + "name": "Huggy Vines", + "description": "Restores wearer's HP by {0} upon defeating an enemy. Triggers at most once every {1}s.", + "values": [ + { + "id_value": 0, + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + "12%", + "14%", + "16%", + "18%", + "20%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2, + 2 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 8, + 8 + ] + } + ] + }, + { + "id": "fork_Prokaryon", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "blue", + "name": "Us.", + "desc": "I am… you… are… you, are… it, is… me… no, I… am… us.", + "context": "I am… you… are… you, are… it, is… me… no, I… am… us.", + "icon": "/Game/UI/UI_Icon/Fork/fork_yuanheti_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_yuanheti_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_yuanheti", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_yuanheti", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 24, + 27, + 30, + 34, + 37, + 40, + 43, + 46, + 49, + 53, + 56, + 59, + 62, + 65, + 68, + 71, + 75, + 78, + 81, + 101, + 104, + 107, + 110, + 114, + 117, + 120, + 123, + 126, + 129, + 151, + 154, + 157, + 160, + 163, + 166, + 169, + 173, + 176, + 179, + 200, + 203, + 206, + 209, + 213, + 216, + 219, + 222, + 225, + 228, + 250, + 253, + 256, + 259, + 262, + 265, + 268, + 272, + 275, + 278, + 299, + 302, + 305, + 308, + 312, + 315, + 318, + 321, + 324, + 327, + 349, + 352, + 355, + 358, + 361, + 364, + 367, + 371, + 374, + 377, + 380 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + } + ], + "effect": { + "name": "Protocore", + "description": "Increases the wearer's Basic Attack damage by {0}.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "12%", + "13%", + "14%", + "15%", + "16%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2, + 2 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 8, + 8 + ] + } + ] + }, + { + "id": "fork_BitterCake", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "purple", + "name": "The Good, The Bad, The Bitter", + "desc": "A touch of bitterness, but it'll still put you in a good mood, won't it?", + "context": "A touch of bitterness, but it'll still put you in a good mood, won't it?", + "icon": "/Game/UI/UI_Icon/Fork/fork_BitterCake_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_BitterCake_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_BitterCake", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_BitterCake", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + } + ], + "effect": { + "name": "\"Bittercake\"", + "description": "Increases wearer's DEF by {0} for {1}s when taking damage. Triggers at most once every {2}s.", + "values": [ + { + "id_value": 0, + "id_stats": "DefUp", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bIsPercent": true, + "values": [ + "26%", + "31%", + "36%", + "41%", + "46%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_appliance", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "blue", + "name": "\"Real Music\"", + "desc": "Waddaya mean ya prefer \"real music\"? Is this not \"real\" enough for yer taste?", + "context": "Waddaya mean ya prefer \"real music\"? Is this not \"real\" enough for yer taste?", + "icon": "/Game/UI/UI_Icon/Fork/fork_fudianling_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_fudianling_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_fudianling", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_fudianling", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 24, + 27, + 30, + 34, + 37, + 40, + 43, + 46, + 49, + 53, + 56, + 59, + 62, + 65, + 68, + 71, + 75, + 78, + 81, + 101, + 104, + 107, + 110, + 114, + 117, + 120, + 123, + 126, + 129, + 151, + 154, + 157, + 160, + 163, + 166, + 169, + 173, + 176, + 179, + 200, + 203, + 206, + 209, + 213, + 216, + 219, + 222, + 225, + 228, + 250, + 253, + 256, + 259, + 262, + 265, + 268, + 272, + 275, + 278, + 299, + 302, + 305, + 308, + 312, + 315, + 318, + 321, + 324, + 327, + 349, + 352, + 355, + 358, + 361, + 364, + 367, + 371, + 374, + 377, + 380 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + } + ], + "effect": { + "name": "Haunted Record", + "description": "Grants the wearer a {0} Redirect Skill DMG bonus.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "12%", + "13%", + "14%", + "15%", + "16%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2, + 2 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 8, + 8 + ] + } + ] + }, + { + "id": "fork_TigerTally", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "orange", + "name": "Ready-Ready", + "desc": "Hold me close, embrace the courage and resolve that transcends the fallen—I salute you, great Tiger warriors.", + "context": "Hold me close, embrace the courage and resolve that transcends the fallen—I salute you, great Tiger warriors.", + "icon": "/Game/UI/UI_Icon/Fork/fork_TigerTally_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_TigerTally_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_TigerTally", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_TigerTally", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Commander Tiger Talisman", + "description": "Increases ATK by {0}.\nIncreases Basic Attack and Critical Riposte damage by {1} for {2}s when casting a Redirect Skill or Ultimate, up to 2 stacks.\nGrants a Left Tiger Talisman when casting Redirect Skill and a Right Tiger Talisman when casting Ultimate.\nUnlocks Commander Tiger Talisman if the wearer obtains the other type of talisman within {3}s of gaining one.\nArc: Commander Tiger Talisman — Increases the wearer's damage to Bosses by {4} for {5}s.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "15%", + "18.8%", + "22.5%", + "26.2%", + "30%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "15%", + "18.8%", + "22.5%", + "26.2%", + "30%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 15, + 15, + 15, + 15, + 15 + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 15, + 15, + 15, + 15, + 15 + ] + }, + { + "id_value": 4, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "12.5%", + "15%", + "17.5%", + "20%" + ] + }, + { + "id_value": 5, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_BitGame", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "Blow up the Crowd", + "desc": "Shh… it's coming, it's coming! IT'S COMING!!!", + "context": "Shh… it's coming, it's coming! IT'S COMING!!!", + "icon": "/Game/UI/UI_Icon/Fork/fork_BitGame_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_BitGame_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_BitGame", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_BitGame", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Beat King", + "description": "Increases the active character's ATK by {0} while the wearer is off-field, and increases the active character's ATK by {1} when the wearer deals damage, up to 4 stacks and triggering at most once every {2}s. Resets the effect when the wearer becomes the active character.\r\nIncreases Psyche DMG by {3} while the wearer is the active character, and increases Psyche DMG by {4} when dealing Psyche DMG with a Basic Attack, up to 10 stacks. Triggers at most once every 0.3s. Resets the effect when switching characters.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "11%", + "12%", + "13%", + "14%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2%", + "2.3%", + "2.6%", + "2.9%", + "3.2%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 2, + 2, + 2, + 2, + 2 + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "12%", + "14%", + "16%", + "18%", + "20%" + ] + }, + { + "id_value": 4, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2%", + "2.3%", + "2.6%", + "2.9%", + "3.2%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_BlackBook", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "orange", + "name": "Youthful Fantasy", + "desc": "\"Secret\"… The moment it was recorded, it was already known by everyone.", + "context": "\"Secret\"… The moment it was recorded, it was already known by everyone.", + "icon": "/Game/UI/UI_Icon/Fork/fork_BlackBook_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_BlackBook_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_BlackBook", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_BlackBook", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + } + ], + "effect": { + "name": "\"Black Tome\"", + "description": "Increases Break Intensity by {0}.\r\nSeals Arc: Black Tome with two chains by default. Unleashes 1 chain each time any character on the team casts a Support Skill. Makes Arc: Black Tome available when all two chains are unleashed.\r\nArc: Black Tome — Summons the Black Tome for {1}s. Designates an enemy every {2}s. Increases the wearer's Chaos DMG dealt to designated enemies by {3}. Deals Chaos DMG equal to {4} of the wearer's ATK to designated enemies when they take Break Damage.", + "values": [ + { + "id_value": 0, + "id_stats": "UnbalIntensity", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 60, + 67, + 74, + 81, + 88 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_value": 3, + "id_stats": "DamageUpChaosBase", + "name": "Chaos DMG Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DamageUp_black", + "bIsPercent": true, + "values": [ + "20%", + "24%", + "28%", + "32%", + "36%" + ] + }, + { + "id_value": 4, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2%", + "2.3%", + "2.6%", + "2.9%", + "3.2%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_mamen", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "orange", + "name": "Contemplative Cat", + "desc": "The meaning of life… the reason for existence… the answer to the universe is… 4… balls of yarn!", + "context": "The meaning of life… the reason for existence… the answer to the universe is… 4… balls of yarn!", + "icon": "/Game/UI/UI_Icon/Fork/fork_mamen_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_mamen_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_mamen", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_mamen", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bIsPercent": true, + "values": [ + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44 + ] + } + ], + "effect": { + "name": "Mammon", + "description": "Increases Cosmos DMG by {1} for every {0} Fons the wearer holds, up to 10 stacks.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 100000, + 100000, + 100000, + 100000, + 100000 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2.5%", + "3%", + "3.5%", + "4%", + "4.5%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_Nakupeda", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "Your Happiness is Priceless", + "desc": "Mm, mm-hmm, mm-hmm-hmm-hmm-hmm-hmm-hmm! (Give me Fons— You'll be happy, and I'll be happy too!)", + "context": "Mm, mm-hmm, mm-hmm-hmm-hmm-hmm-hmm-hmm! (Give me Fons— You'll be happy, and I'll be happy too!)", + "icon": "/Game/UI/UI_Icon/Fork/fork_Nakupeda_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Nakupeda_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Nakupeda", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Nakupeda", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "DefUp", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bIsPercent": true, + "values": [ + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 23.1, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 34.6, + 34.6, + 34.6, + 34.6, + 34.6, + 34.6, + 34.6, + 34.6, + 34.6, + 34.6, + 38.5, + 38.5, + 38.5, + 38.5, + 38.5, + 38.5, + 38.5, + 38.5, + 38.5, + 38.5, + 38.5 + ] + } + ], + "effect": { + "name": "Nacupeda", + "description": "Increases HP by {0}.\nGrants one of the following random effects when the wearer casts an Ultimate:\n1. Recovers {1} of Max HP for the team member with the lowest HP percentage.\n2. Grants a Shield equal to {2} of the wearer's Max HP for {3}s.\n3. Recovers {4} HP for all team members.\nTriggers once every {5}s.", + "values": [ + { + "id_value": 0, + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + "24%", + "28%", + "32%", + "36%", + "40%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "20%", + "25%", + "30%", + "35%", + "40%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "20%", + "25%", + "30%", + "35%", + "40%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 15, + 15, + 15, + 15, + 15 + ] + }, + { + "id_value": 4, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "12.5%", + "15%", + "17.5%", + "20%" + ] + }, + { + "id_value": 5, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 30, + 30, + 30, + 30, + 30 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_wushoutieyu", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "orange", + "name": "Raging Flames", + "desc": "The desire for speed flows through my veins, the roar of engines thunders in my chest! Come on, let's go! Step onto this racetrack where we pledge our souls!", + "context": "Come on, let's go! Step onto this racetrack where we pledge our souls!", + "icon": "/Game/UI/UI_Icon/Fork/fork_wushoutieyu_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_wushoutieyu_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_wushoutieyu", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Wushoutieyu", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 43, + 48, + 54, + 59, + 65, + 70, + 76, + 81, + 87, + 93, + 98, + 104, + 109, + 115, + 120, + 126, + 131, + 137, + 142, + 178, + 184, + 189, + 195, + 200, + 206, + 211, + 217, + 222, + 228, + 265, + 270, + 276, + 281, + 287, + 292, + 298, + 303, + 309, + 314, + 351, + 357, + 362, + 368, + 373, + 379, + 384, + 390, + 395, + 401, + 438, + 443, + 449, + 454, + 460, + 465, + 471, + 476, + 482, + 487, + 524, + 530, + 535, + 541, + 546, + 552, + 557, + 563, + 568, + 574, + 611, + 616, + 622, + 627, + 633, + 638, + 644, + 649, + 655, + 660, + 666 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Headless Rider", + "description": "Increases Lakshana DMG by {3}.\r\nIncreases the wearer's Redirect Skill and Ultimate DMG by {0} for {1}s after casting Ultimate. Increases the wearer’s Redirect Skill DMG by {2} per cast while active, up to 2 stacks.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "12.5%", + "15%", + "17.5%", + "20%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "5%", + "6%", + "7%", + "8%", + "9%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "15%", + "17.5%", + "20%", + "22.5%", + "25%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_Arachne", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "orange", + "name": "Eternal Waltz", + "desc": "Dance to the beat, feel the dizzying sensation as if the world is ending, until forever!", + "context": "Dance to the beat, feel the dizzying sensation as if the world is ending, until forever!", + "icon": "/Game/UI/UI_Icon/Fork/fork_Arachne_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Arachne_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Arachne", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Arachne", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 28, + 31, + 35, + 38, + 42, + 46, + 49, + 53, + 56, + 60, + 64, + 67, + 71, + 74, + 78, + 82, + 85, + 89, + 92, + 114, + 118, + 121, + 125, + 128, + 132, + 136, + 139, + 143, + 146, + 168, + 172, + 175, + 179, + 182, + 186, + 190, + 193, + 197, + 200, + 223, + 227, + 230, + 234, + 237, + 241, + 245, + 248, + 252, + 255, + 278, + 282, + 285, + 289, + 292, + 296, + 300, + 303, + 307, + 310, + 333, + 337, + 340, + 344, + 347, + 351, + 355, + 358, + 362, + 365, + 388, + 392, + 395, + 399, + 402, + 406, + 410, + 413, + 417, + 420, + 424 + ] + }, + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 20.6, + 20.6, + 20.6, + 20.6, + 20.6, + 20.6, + 20.6, + 20.6, + 20.6, + 20.6, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 28.9, + 28.9, + 28.9, + 28.9, + 28.9, + 28.9, + 28.9, + 28.9, + 28.9, + 28.9, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 37.1, + 37.1, + 37.1, + 37.1, + 37.1, + 37.1, + 37.1, + 37.1, + 37.1, + 37.1, + 41.2, + 41.2, + 41.2, + 41.2, + 41.2, + 41.2, + 41.2, + 41.2, + 41.2, + 41.2, + 41.2 + ] + } + ], + "effect": { + "name": "Arachne", + "description": "Increases Max HP by {0}.\nIncreases Mental DMG dealt by {1} for {2}s after the wearer casts an Ultimate.", + "values": [ + { + "id_value": 0, + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + "20%", + "23%", + "26%", + "29%", + "32%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_PoliceRat", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "Hethereau's Keeper", + "desc": "Once again, another day has passed peacefully. Hats off to Officer Whisker!", + "context": "Once again, another day has passed peacefully. Hats off to Officer Whisker!", + "icon": "/Game/UI/UI_Icon/Fork/fork_PoliceRat_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_PoliceRat_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_PoliceRat", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_PoliceRat", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Justice Executioner", + "description": "Increases ATK by {0}.\nIncreases damage dealt to Bosses by {1}.\nUnlocks Arc: Officer Whisker.\nArc: Officer Whisker — Summons Officer Whisker to assist in combat. Officer Whisker continuously attacks enemies, dealing {2} of the wearer's ATK as damage per hit. Lasts 30s. Cooldown: {3}s.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "15%", + "17.5%", + "20%", + "22.5%", + "25%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "15%", + "17.5%", + "20%", + "22.5%", + "25%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "1%", + "1.2%", + "1.5%", + "1.8%", + "2%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 60, + 60, + 60, + 60, + 60 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_tuansanlang", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "purple", + "name": "The Great Thief", + "desc": "The moment I saw you, I was captivated. Your soft fur, that mischievous look on your face—I was mesmerized for so long that it wasn't until you left that I realized… where are my grilled skewers?", + "context": "The moment I saw you, I was captivated. Your soft fur, that mischievous look on your face—I was mesmerized for so long that it wasn't until you left that I realized… where are my grilled skewers?", + "icon": "/Game/UI/UI_Icon/Fork/fork_tuansanlang_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_tuansanlang_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_tuansanlang", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_tuansanlang", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "UnbalIntensityBase", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + } + ], + "effect": { + "name": "Danzaburou", + "description": "Increases Break Intensity by {0} for all characters of the same Esper Type as the wearer (including the wearer) when the team has 3 or more such characters. This effect does not stack.", + "values": [ + { + "id_value": 0, + "id_stats": "UnbalIntensity", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 70, + 84, + 98, + 112, + 126 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_Kite", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "purple", + "name": "Watch Your Heads!", + "desc": "Hehehe… Don't be scared, it's just a laughing kite…", + "context": "Hehehe… Don't be scared, it's just a laughing kite…", + "icon": "/Game/UI/UI_Icon/Fork/fork_Kite_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Kite_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Kite", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Kite", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bIsPercent": true, + "values": [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40 + ] + } + ], + "effect": { + "name": "Ghostly Kite", + "description": "Increases ATK by {0} and Lakshana DMG to targets affected by Remora and Stain by {1} for {2}s after the wearer casts a Redirect Skill. Effect does not stack.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 15, + 15, + 15, + 15, + 15 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_PaperPlane", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "purple", + "name": "Clear Skies", + "desc": "Formation complete, securing air superiority.", + "context": "Formation complete, securing air superiority.", + "icon": "/Game/UI/UI_Icon/Fork/fork_PaperPlane_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_PaperPlane_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_PaperPlane", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_PaperPlane", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + } + ], + "effect": { + "name": "Paper Squadron", + "description": "Increases Anima DMG dealt by the wearer's Redirect Skill and Ultimate by {0}.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "20%", + "23.8%", + "27.5%", + "31.2%", + "35%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_spider", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "purple", + "name": "Failing You, Heavy in My Heart", + "desc": "When you see red reflected in your teacher's eyes, that usually means you're about to fail the class.", + "context": "When you see red reflected in your teacher's eyes, that usually means you're about to fail the class.", + "icon": "/Game/UI/UI_Icon/Fork/fork_spider_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_spider_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_spider", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_spider", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "UnbalIntensityBase", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 72, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 84, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 108, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + } + ], + "effect": { + "name": "Spider Knowledge Collector", + "description": "Grants the wearer 1 stack of Spider Knowledge when dealing damage with Basic Attacks, up to 8 stacks (up to 1 stack every 0.5s). All stacks are consumed when casting Ultimate. Increases the entire team's ATK by {1} for {0}s per stack consumed. Increases ATK by an additional {2} when 8 stacks are consumed.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + }, + { + "id_value": 1, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "1%", + "1.1%", + "1.3%", + "1.5%", + "1.6%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2%", + "2.3%", + "2.6%", + "2.9%", + "3.2%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_yaodao", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "purple", + "name": "Drawn Blade", + "desc": "Lone moon, dark clouds. Blade drawn, soul departs. Form fades, blade weeps.", + "context": "Lone moon, dark clouds. Blade drawn, soul departs. Form fades, blade weeps.", + "icon": "/Game/UI/UI_Icon/Fork/fork_yaodao_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_yaodao_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_yaodao", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_yaodao", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 25, + 29, + 32, + 35, + 39, + 42, + 45, + 48, + 52, + 55, + 58, + 62, + 65, + 68, + 72, + 75, + 78, + 81, + 85, + 106, + 109, + 113, + 116, + 119, + 123, + 126, + 129, + 132, + 136, + 157, + 160, + 164, + 167, + 170, + 174, + 177, + 180, + 183, + 187, + 208, + 211, + 215, + 218, + 221, + 225, + 228, + 231, + 234, + 238, + 259, + 262, + 266, + 269, + 272, + 276, + 279, + 282, + 285, + 289, + 310, + 313, + 317, + 320, + 323, + 327, + 330, + 333, + 336, + 340, + 362, + 365, + 369, + 372, + 375, + 379, + 382, + 385, + 388, + 392, + 395 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5 + ] + } + ], + "effect": { + "name": "Crimson Hexblade", + "description": "Deals additional Incantation DMG equal to {0} of ATK when the wearer triggers a Parry Attack.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2%", + "2.3%", + "2.6%", + "2.9%", + "3.2%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_koinobori", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "purple", + "name": "A Time Will Come", + "desc": "Descending from the heavens, returning to the heavens. Believing in that destined day, we leap into this endless migration with no visible end.", + "context": "Descending from the heavens, returning to the heavens. Believing in that destined day, we leap into this endless migration with no visible end.", + "icon": "/Game/UI/UI_Icon/Fork/fork_koinobori_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_koinobori_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_koinobori", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_koinobori", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + } + ], + "effect": { + "name": "Tidal Ascension", + "description": "Grants the wearer {0} ATK, {1} DEF, and {2} HP when the team has at least 3 different Esper Types.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + }, + { + "id_value": 1, + "id_stats": "DefUp", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + }, + { + "id_value": 2, + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + "10%", + "12%", + "14%", + "16%", + "18%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_snowman", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "purple", + "name": "The Fools' Spring", + "desc": "If I were a cicada, I'd still sing with my raspy voice.", + "context": "If I were a cicada, I'd still sing with my raspy voice.", + "icon": "/Game/UI/UI_Icon/Fork/fork_snowman_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_snowman_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_snowman", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_snowman", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 25, + 29, + 32, + 35, + 39, + 42, + 45, + 48, + 52, + 55, + 58, + 62, + 65, + 68, + 72, + 75, + 78, + 81, + 85, + 106, + 109, + 113, + 116, + 119, + 123, + 126, + 129, + 132, + 136, + 157, + 160, + 164, + 167, + 170, + 174, + 177, + 180, + 183, + 187, + 208, + 211, + 215, + 218, + 221, + 225, + 228, + 231, + 234, + 238, + 259, + 262, + 266, + 269, + 272, + 276, + 279, + 282, + 285, + 289, + 310, + 313, + 317, + 320, + 323, + 327, + 330, + 333, + 336, + 340, + 362, + 365, + 369, + 372, + 375, + 379, + 382, + 385, + 388, + 392, + 395 + ] + }, + { + "id_stats": "DefUp", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bIsPercent": true, + "values": [ + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 31.5, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 36.8, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 42, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 47.2, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5, + 52.5 + ] + } + ], + "effect": { + "name": "Solifugae Vita", + "description": "Increases ATK by {0} while the wearer has a Shield.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "18%", + "21%", + "24%", + "27%", + "30%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_BoxingCandy", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "orange", + "name": "Fluff of Fortitude", + "desc": "Hunter Guild Commemorative Arc: So fluffy!", + "context": "Hunter Guild Commemorative Arc: So fluffy!", + "icon": "/Game/UI/UI_Icon/Fork/fork_BoxingCandy_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_BoxingCandy_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_BoxingCandy", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Quanjitang", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Jawbreaker's Candy", + "description": "Increases the wearer's DMG by {0}. Increases this effect to {1} against enemies with HP below 50%.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "22%", + "26%", + "30%", + "34%", + "38%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "28%", + "34%", + "40%", + "46%", + "52%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_KnightCandy", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "orange", + "name": "Fluff of Ferocity", + "desc": "Hunter Guild Commemorative Arc: Discard all that is useless…", + "context": "Hunter Guild Commemorative Arc: Discard all that is useless…", + "icon": "/Game/UI/UI_Icon/Fork/fork_KnightCandy_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_KnightCandy_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_KnightCandy", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_KnightCandy", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Knight's Candy", + "description": "Increases wearer's CRIT DMG by {0} for {1}s after landing a critical hit, up to 10 stacks. Resets the duration when triggered again.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "4%", + "4.8%", + "5.6%", + "6.4%", + "7.2%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_ThiefCandy", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "orange", + "name": "Fluff of Finesse", + "desc": "Hunter Guild Commemorative Arc: Not every encounter is a pleasant one…", + "context": "Hunter Guild Commemorative Arc: Not every encounter is a pleasant one…", + "icon": "/Game/UI/UI_Icon/Fork/fork_ThiefCandy_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_ThiefCandy_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_ThiefCandy", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_ThiefCandy", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Thief's Candy", + "description": "Increases wearer's damage by {0} for {1}s after performing a Critical Dodge, up to 3 stacks. Resets the duration when triggered again.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "8%", + "9.6%", + "11.2%", + "12.8%", + "14.4%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_MotorCandy", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "orange", + "name": "Fluff of Fleetness", + "desc": "Hunter Guild Commemorative Arc: MAD FLUFF!", + "context": "Hunter Guild Commemorative Arc: MAD FLUFF!", + "icon": "/Game/UI/UI_Icon/Fork/fork_MotorCandy_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_MotorCandy_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_MotorCandy", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_MotorCandy", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bIsPercent": true, + "values": [ + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 26.4, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 30.8, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 35.2, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 39.6, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44 + ] + } + ], + "effect": { + "name": "Motor Candy", + "description": "Increases {1} ATK every {0}s while the wearer is the active character, up to 5 stacks. Resets when the wearer leaves the field.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "id_value": 1, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "5%", + "6%", + "7%", + "8%", + "9%" + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_BlastCandy", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "Fluff of Fearlessness", + "desc": "Hunter Guild Commemorative Arc: Cool fluffs don't look at explosions.", + "context": "Hunter Guild Commemorative Arc: Cool fluffs don't look at explosions.", + "icon": "/Game/UI/UI_Icon/Fork/fork_BlastCandy_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_BlastCandy_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_BlastCandy", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Baozhatang", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22 + ] + } + ], + "effect": { + "name": "Popping Candy", + "description": "Increases ATK by {0} for {1}s after the wearer casts an Ultimate. Effect does not stack.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "25%", + "30%", + "35%", + "40%", + "45%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_Crowbar", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "purple", + "name": "Time Bandit", + "desc": "Time is like water next to a sponge. Look away for only a second, and it vanishes.", + "context": "Time is like water next to a sponge. Look away for only a second, and it vanishes.", + "icon": "/Game/UI/UI_Icon/Fork/fork_Qiaoqiao_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Qiaoqiao_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Crowbar", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Qiaoqiao", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 31, + 35, + 39, + 43, + 47, + 51, + 55, + 59, + 63, + 68, + 72, + 76, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 129, + 133, + 137, + 141, + 145, + 149, + 153, + 157, + 161, + 165, + 190, + 194, + 198, + 202, + 206, + 210, + 214, + 218, + 222, + 226, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 283, + 287, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401, + 405, + 409, + 435, + 439, + 443, + 447, + 451, + 455, + 459, + 463, + 467, + 471, + 475 + ] + }, + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 12.5, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 17.5, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + } + ], + "effect": { + "name": "Picky", + "description": "Increases Break Intensity by {0} for {1}s after the wearer uses a Redirect Skill. Effect does not stack.\r\nAllows use of Arc - Picky. (Cooldown: {1}s).\r\nArc - Picky: Summons Picky to pry open all nearby lockable objects.", + "values": [ + { + "id_value": 0, + "id_stats": "UnbalIntensity", + "name": "Break Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian", + "bIsPercent": false, + "values": [ + 90, + 108, + 126, + 144, + 162 + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 50, + 50, + 50, + 50, + 50 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_Castle", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "purple", + "name": "Call of the Twisted City", + "desc": "When the world begins to warp, crying out in ways no one can understand, who among us can hold on to their sanity?", + "context": "When the world begins to warp, crying out in ways no one can understand, who among us can hold on to their sanity?", + "icon": "/Game/UI/UI_Icon/Fork/fork_Castle_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Castle_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Castle", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Castle", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 25, + 29, + 32, + 35, + 39, + 42, + 45, + 48, + 52, + 55, + 58, + 62, + 65, + 68, + 72, + 75, + 78, + 81, + 85, + 106, + 109, + 113, + 116, + 119, + 123, + 126, + 129, + 132, + 136, + 157, + 160, + 164, + 167, + 170, + 174, + 177, + 180, + 183, + 187, + 208, + 211, + 215, + 218, + 221, + 225, + 228, + 231, + 234, + 238, + 259, + 262, + 266, + 269, + 272, + 276, + 279, + 282, + 285, + 289, + 310, + 313, + 317, + 320, + 323, + 327, + 330, + 333, + 336, + 340, + 362, + 365, + 369, + 372, + 375, + 379, + 382, + 385, + 388, + 392, + 395 + ] + }, + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 18.8, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 22.5, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 26.2, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 33.8, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5, + 37.5 + ] + } + ], + "effect": { + "name": "Cardboard Castle", + "description": "Increases Healing Bonus by {0} for {1}s after the wearer casts a Redirect Skill. Effect does not stack.", + "values": [ + { + "id_value": 0, + "id_stats": "HealUp", + "name": "Healing Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_HealUp", + "bIsPercent": true, + "values": [ + "12%", + "14%", + "16%", + "18%", + "20%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 10, + 10, + 10, + 10, + 10 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 3, + 3 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 8, + 8 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 5, + 5 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 10, + 10 + ] + } + ] + }, + { + "id": "fork_Butterfly", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "Reality Refuge", + "desc": "She told me that I was only ever a butterfly.", + "context": "She told me that I was only ever a butterfly.", + "icon": "/Game/UI/UI_Icon/Fork/fork_Butterfly_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Butterfly_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Butterfly", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Butterfly", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + } + ], + "effect": { + "name": "Swallowtail", + "description": "Increases Anima DMG by {0}.\r\nIncreases the wearer's Attachment DMG by {1}. Increases the Attachment DMG bonus to {2} for {3}s when the wearer casts an Ultimate. Effect does not stack.", + "values": [ + { + "id_value": 0, + "id_stats": "DamageUpNatureBase", + "name": "Anima DMG Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DamageUp_ching", + "bIsPercent": true, + "values": [ + "15%", + "17.5%", + "20%", + "22.5%", + "25%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "10%", + "11.2%", + "12.5%", + "13.8%", + "15%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "20%", + "22.5%", + "25%", + "27.5%", + "30%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 6, + 6, + 6, + 6, + 6 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_NestBird", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "orange", + "name": "Tears Beneath the Mask", + "desc": "Who stole my child? Was it you? Was it him? Or was it…", + "context": "Who stole my child? Was it you? Was it him? Or was it…", + "icon": "/Game/UI/UI_Icon/Fork/fork_NestBird_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_NestBird_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_NestBird", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_NestBird", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Nestbound Bird", + "description": "Applies Warning Gaze on enemies hit by the wearer's Ultimate. Marked enemies deal 18% reduced damage for 20s. Effect does not stack.", + "values": [] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_Whale", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "orange", + "name": "Song of the Whale", + "desc": "The surging tide is its final farewell.", + "context": "The surging tide is its final farewell.", + "icon": "/Game/UI/UI_Icon/Fork/fork_Whale_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Whale_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Whale", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Whale", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Deep Blue Sorrow", + "description": "Increases ATK by {0}.\nIncreases the wearer's damage to Broken enemies by {1}. Restores {2} HP to the wearer if a Broken enemy is defeated. Triggers at most once every {3}s.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "12%", + "14%", + "16%", + "18%", + "20%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "12%", + "14%", + "16%", + "18%", + "20%" + ] + }, + { + "id_value": 2, + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bIsPercent": true, + "values": [ + "30%", + "30%", + "30%", + "30%", + "30%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 30, + 30, + 30, + 30, + 30 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_Time", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "Marching Beyond Time", + "desc": "We press on, lest we rust away to nothing.", + "context": "We press on, lest we rust away to nothing.", + "icon": "/Game/UI/UI_Icon/Fork/fork_Time_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Time_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Time", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Time", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Time Beyond Time", + "description": "Increases ATK by {0}.\r\nEnters Wastelab and clears current Wastetime when the wearer casts a Redirect Skill. While in Wastelab, allies gain 1 stack of Wastetime each time they use a Redirect or Support Skill, up to 3 stacks. When the wearer uses their Ultimate in Wastelab, they exit Wastelab and consume all Wastetime, increasing Ultimate Crit DMG by {1}, plus an additional {2} per Wastetime consumed. Consuming 3 Wastetime stacks at once grants an extra {3} DEF Ignore for {4}s.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "16%", + "20%", + "24%", + "28%", + "32%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "24%", + "30%", + "36%", + "42%", + "48%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "8%", + "10%", + "12%", + "14%", + "16%" + ] + }, + { + "id_value": 3, + "id_stats": "DefIgnore", + "name": "Penetration", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DefIgnore", + "bIsPercent": true, + "values": [ + "12%", + "15%", + "18%", + "21%", + "24%" + ] + }, + { + "id_value": 4, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 70, + 70, + 70, + 70, + 70 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_Rose", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "orange", + "name": "The Last Rose", + "desc": "On the water's surface, the last rose blooms alone. She waits… for a dear friend, or perhaps for a boundless dream.", + "context": "On the water's surface, the last rose blooms alone. She waits… for a dear friend, or perhaps for a boundless dream.", + "icon": "/Game/UI/UI_Icon/Fork/fork_Rose_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Rose_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_Rose", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Rose", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Bohemian Rose", + "description": "Increases ATK by {0}.\nGrants 1 stack of Chaos Thorn each time the wearer deals DoT. Increases CRIT DMG by {1} per stack for {2}s. Triggers at most once every 0.3s, up to 10 stacks, and refreshes the duration when retriggered. Grants 10 stacks of Chaos Thorn immediately when the wearer casts a Redirect Skill.\nExtends the Broken state of a Broken enemy by {3}s when the wearer deals damage to them (triggers at most once per Break Effect).", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "14%", + "17.5%", + "21%", + "24.5%", + "28%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "6%", + "7.5%", + "9%", + "10.5%", + "12%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 3, + 3, + 3, + 3, + 3 + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 3, + 3, + 3, + 3, + 3 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_worldrain", + "type_id": 1, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_solid", + "quality": "orange", + "name": "The Rain That Shook the World", + "desc": "It emerged from a downpour that turned the world upside down.", + "context": "It emerged from a downpour that turned the world upside down.", + "icon": "/Game/UI/UI_Icon/Fork/fork_worldrain_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_worldrain_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_worldrain", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_worldrain", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 8.8, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 13.2, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 15.4, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 17.6, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 19.8, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22 + ] + } + ], + "effect": { + "name": "Hypervortex", + "description": "Deals {0} increased Cosmos DMG with the wearer's Redirect Skill and Ultimate.\r\nIncreases the wearer's Cycle Intensity by {1} for {2}s after casting a Redirect Skill. Resets the duration when triggered again.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "30%", + "33%", + "36%", + "39%", + "42%" + ] + }, + { + "id_value": 1, + "id_stats": "Mag", + "name": "Cycle Intensity", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_attri_surpass", + "bIsPercent": false, + "values": [ + 36, + 45, + 54, + 63, + 72 + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 15, + 15, + 15, + 15, + 15 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_moon", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "orange", + "name": "Stellar Veil", + "desc": "At sunrise, the lost stars are merely homeward bound.", + "context": "At sunrise, the lost stars are merely homeward bound.", + "icon": "/Game/UI/UI_Icon/Fork/fork_moon_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_moon_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_moon", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_moon", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 33, + 38, + 42, + 46, + 51, + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 94, + 99, + 103, + 107, + 112, + 137, + 141, + 146, + 150, + 154, + 159, + 163, + 167, + 172, + 176, + 203, + 207, + 211, + 216, + 220, + 224, + 229, + 233, + 237, + 242, + 269, + 273, + 278, + 282, + 286, + 291, + 295, + 299, + 304, + 308, + 336, + 340, + 344, + 349, + 353, + 357, + 362, + 366, + 370, + 375, + 402, + 406, + 411, + 415, + 419, + 424, + 428, + 432, + 437, + 441, + 469, + 473, + 477, + 482, + 486, + 490, + 495, + 499, + 503, + 508, + 512 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 13.8, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 16.5, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 24.8, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5, + 27.5 + ] + } + ], + "effect": { + "name": "Aqua Astra", + "description": "Increases the wearer's Psyche DMG by {0}. Increases Crit DMG dealt by {1} for {2}s when dealing Psyche DMG, up to 10 stacks. Triggers at most once every 0.1s.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "12%", + "14.5%", + "17%", + "19.5%", + "21%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "2%", + "2.4%", + "2.8%", + "3.2%", + "3.6%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 5, + 5, + 5, + 5, + 5 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_GoldWool", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "orange", + "name": "What's Desired", + "desc": "And so the epic begins, and everyone sets out on the journey. As for where the road ends, does it really matter?", + "context": "And so the epic begins, and everyone sets out on the journey. As for where the road ends, does it really matter?", + "icon": "/Game/UI/UI_Icon/Fork/fork_GoldWool_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_GoldWool_100", + "forkCard": "/Game/UI/UI_Icon/Fork/image_fork_GoldWool", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_GoldWool", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Golden Fleece", + "description": "Increases the wearer's Lakshana DMG by {0}. Increases the wearer's CRIT DMG by {1} for {2}s when they cast a Redirect Skill or Ultimate. Resets the duration when triggered again.", + "values": [ + { + "id_value": 0, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "20%", + "25%", + "30%", + "35%", + "40%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "40%", + "50%", + "60%", + "70%", + "80%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_LunarPhase", + "type_id": 5, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_boson", + "quality": "orange", + "name": "Blushing Mirage", + "desc": "Moonlight whispers a promise of unfurled wings, stirring rare passion and inspiration. But not every whisper should be trusted.", + "context": "Moonlight whispers a promise of unfurled wings, stirring rare passion and inspiration. But not every whisper should be trusted.", + "icon": "/Game/UI/UI_Icon/Fork/fork_LunarPhase_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_LunarPhase_100", + "forkCard": "/Game/UI/UI_Icon/Fork/img_fork_LunarPhase", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_LunarPhase", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Moonphase Shift", + "description": "Increases ATK by {0}. \nAfter casting Ultimate, increases the wearer's Cosmos DMG dealt by {1} and allows the wearer to ignore {2} of enemy DEF for {3}s. Resets the duration when triggered again.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "20%", + "23%", + "26%", + "29%", + "32%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "32%", + "36.8%", + "41.6%", + "46.4%", + "51.2%" + ] + }, + { + "id_value": 2, + "id_stats": "DefIgnore", + "name": "Penetration", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DefIgnore", + "bIsPercent": true, + "values": [ + "12%", + "13.8%", + "15.6%", + "17.4%", + "19.2%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_Door", + "type_id": 2, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_liquid", + "quality": "orange", + "name": "The Wrong Gate", + "desc": "Do not open that door. Do not leave this place. Wouldn't you rather stay somewhere warm?", + "context": "Do not open that door. Do not leave this place. Wouldn't you rather stay somewhere warm?", + "icon": "/Game/UI/UI_Icon/Fork/fork_Door_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_Door_100", + "forkCard": "/Game/UI/UI_Icon/Fork/img_fork_Door", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_Door", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + } + ], + "effect": { + "name": "Reverie Gate", + "description": "Increases ATK by {0}.\r\nWhen the wearer performs healing, increases the wearer's Anima DMG dealt by {2} and all allies' DMG dealt by {1} for {3}s. Resets the duration when triggered again. Effects with the same name do not stack.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "16%", + "20%", + "24%", + "28%", + "32%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "15%", + "18.8%", + "22.5%", + "26.2%", + "30%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "30%", + "37.5%", + "45%", + "52.5%", + "60%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 20, + 20, + 20, + 20, + 20 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_01_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_DemonBlade", + "type_id": 4, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_gas", + "quality": "orange", + "name": "Ravenous Blade", + "desc": "Where fear takes hold, death is never far behind.", + "context": "Where fear takes hold, death is never far behind.", + "icon": "/Game/UI/UI_Icon/Fork/fork_DemonBlade_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_DemonBlade_100", + "forkCard": "/Game/UI/UI_Icon/Fork/img_fork_DemonBlade", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_DemonBlade", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Cursed Blade - Soulbound", + "description": "Increases Crit Rate by {0}.\r\nGrants the wearer a {1} Crit DMG bonus for {2}s when they deal Incantation DMG. Stacks up to 7 times, with no more than 1 stack gained every 0.3s. Resets the duration when triggered again.", + "values": [ + { + "id_value": 0, + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + "16%", + "20%", + "24%", + "28%", + "32%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "9%", + "11.2%", + "13.5%", + "15.8%", + "18%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 15, + 15, + 15, + 15, + 15 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_02_lv3", + "OrdinaryMonMaterial_03_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + }, + { + "id": "fork_GoldRecord", + "type_id": 3, + "type_icon": "/Game/UI/UI/player/YH_UI_icon_plasma", + "quality": "orange", + "name": "Voice of the Voyager", + "desc": "The languages engraved upon it remain indecipherable. Yet their message is clear enough: somewhere in the cosmos, we are not alone.", + "context": "The languages engraved upon it remain indecipherable. Yet their message is clear enough: somewhere in the cosmos, we are not alone.", + "icon": "/Game/UI/UI_Icon/Fork/fork_GoldRecord_256", + "iconSmall": "/Game/UI/UI_Icon/Fork/fork_GoldRecord_100", + "forkCard": "/Game/UI/UI_Icon/Fork/img_fork_GoldRecord", + "originalPainting": "/Game/UI/UI_Icon/Fork/1024/fork_GoldRecord", + "stats": [ + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": false, + "values": [ + 37, + 42, + 46, + 51, + 56, + 61, + 66, + 70, + 75, + 80, + 85, + 90, + 94, + 99, + 104, + 109, + 114, + 118, + 123, + 154, + 159, + 164, + 168, + 173, + 178, + 183, + 188, + 192, + 197, + 227, + 232, + 237, + 241, + 246, + 251, + 256, + 261, + 265, + 270, + 301, + 306, + 311, + 315, + 320, + 325, + 330, + 335, + 339, + 344, + 374, + 379, + 384, + 388, + 393, + 398, + 403, + 408, + 412, + 417, + 448, + 453, + 458, + 462, + 467, + 472, + 477, + 482, + 486, + 491, + 522, + 527, + 532, + 536, + 541, + 546, + 551, + 556, + 560, + 565, + 570 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bIsPercent": true, + "values": [ + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 9.6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 14.4, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 16.8, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 19.2, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 21.6, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + } + ], + "effect": { + "name": "Golden Record", + "description": "Increases ATK by {0}.\r\nIncreases the wearer's Support Skill Crit DMG by {1}. Dealing DMG with a Support Skill increases their Ultimate Crit DMG by {2} for {3}s, up to 3 stacks. Resets the duration when triggered again.", + "values": [ + { + "id_value": 0, + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bIsPercent": true, + "values": [ + "24%", + "30%", + "36%", + "42%", + "48%" + ] + }, + { + "id_value": 1, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "66%", + "82.5%", + "99%", + "1.2%", + "1.3%" + ] + }, + { + "id_value": 2, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": true, + "values": [ + "22%", + "27.5%", + "33%", + "38.5%", + "44%" + ] + }, + { + "id_value": 3, + "id_stats": "", + "name": " ", + "icon": "", + "bIsPercent": false, + "values": [ + 3, + 3, + 3, + 3, + 3 + ] + } + ] + }, + "materials": [ + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 4, + 4 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10, + 10 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 12, + 12 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 6, + 6 + ] + }, + { + "items_id": [ + "WeaponBreakMaterial_03_lv3", + "OrdinaryMonMaterial_02_lv3" + ], + "amount": [ + 12, + 12 + ] + } + ] + } +] diff --git a/data-src/espers.json b/data-src/espers.json new file mode 100644 index 0000000..715b660 --- /dev/null +++ b/data-src/espers.json @@ -0,0 +1,66951 @@ +[ + { + "id": "1003", + "name": "Sakiri", + "description": "Unrivaled at Eibon and as scary as she looks.", + "element": [ + { + "element_id": "Incantation", + "name": "Incantation" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_003", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_003x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_003_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_zaowu", + "tags": { + "char_tags": [ + { + "name": "Buff", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_fuzhu01" + }, + { + "name": "Control", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_kongzhi" + }, + { + "name": "DMG Boost", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zengyi" + } + ], + "arcs_tags": { + "type_id": "4", + "name": "Gas", + "icon": "/Game/UI/UI/player/YH_UI_icon_gas" + } + }, + "reaction": [ + { + "name": "Hexed", + "desc": "Deals an additional instance of follow-up attack DMG to the target equal to 20% of Anima or Incantation DMG taken within 12s after triggering Esper Cycle." + }, + { + "name": "Scorch", + "desc": "Upon triggering Esper Cycle, inflicts Scorch on the target for 15s, dealing DoT." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's Break when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1003_1", + "characterId": "1003", + "name": "Pumpkin Magic", + "desc": "Q³ holiday limited edition pajamas, perfect for listening to bedtime stories with friends.\r\n\"A witch had a pumpkin field with squeaky clean magical pumpkins, and scruffy non-magical pumpkins.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_003_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_003_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_003_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zaowu2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zaowu2", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1003_0", + "characterId": "1003", + "name": "Teddy and the Hungry Ghost", + "desc": "An outfit that's undeniably adorable… though Sakiri wouldn't admit it. Comes with a hat, bow tie, and teddy bear backpack. But what's inside the bear's belly?", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_003", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_003_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zaowu", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zaowu", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1360, + 1469, + 1578, + 1686, + 1795, + 1904, + 2013, + 2122, + 2230, + 2339, + 2448, + 2557, + 2666, + 2774, + 2883, + 2992, + 3101, + 3210, + 3318, + 3427, + 3536, + 3645, + 3754, + 3862, + 3971, + 4080, + 4189, + 4298, + 4406, + 4515, + 4624, + 4733, + 4842, + 4950, + 5059, + 5168, + 5277, + 5386, + 5494, + 5603, + 5712, + 5821, + 5930, + 6038, + 6147, + 6256, + 6365, + 6474, + 6582, + 6691, + 6800, + 6909, + 7018, + 7126, + 7235, + 7344, + 7453, + 7562, + 7670, + 7779, + 7888, + 7997, + 8106, + 8214, + 8323, + 8432, + 8541, + 8650, + 8758, + 8867, + 8976, + 9085, + 9194, + 9302, + 9411, + 9520, + 9629, + 9738, + 9846, + 9955 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 78, + 82, + 86, + 90, + 94, + 98, + 101, + 105, + 109, + 113, + 117, + 121, + 125, + 129, + 133, + 137, + 140, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 179, + 183, + 187, + 191, + 195, + 199, + 203, + 207, + 211, + 215, + 218, + 222, + 226, + 230, + 234, + 238, + 242, + 246, + 250, + 254, + 257, + 261, + 265, + 269, + 273, + 277, + 281, + 285, + 289, + 293, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 335, + 339, + 343, + 347, + 351, + 355, + 359, + 363, + 367, + 371, + 374, + 378, + 382, + 386 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Eibon Staff", + "description": "A white-haired girl with the horn of an oni, accompanied by a one-eyed ghost humming a strange nursery rhyme, often causes clients to doubt her due to her height… For your safety, please avoid mentioning this directly to her. Thank you.\n\"Kiroumaru! Stop eating random things. Spit it out!\"\n\"Sakiri, you stingy little… ouch!\"", + "birthday": "November 7", + "homePlace": "Eibon Antique Shop", + "abilityName": "Ghosteater", + "introduction": "Unrivaled at Eibon and as scary as she looks.", + "voiceChinese": "蔡书瑾", + "voiceEnglish": "Brianna Knickerbocker", + "voiceJapanese": "伊藤美来", + "voiceKorean": "김나율" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "The main obstacles to Eibon owner Hotori's dreams of getting rich are, aside from the owner's own issues, the unavoidable compensation fees after every commission from the \"Eibon Ace Trio (self-proclaimed),\" especially for things Sakiri breaks. What Kiroumaru swallows is small stuff, but when Sakiri gets really mad and swings Kiroumaru around, well…\nOf course, Sakiri gets a good scolding from Hotori for pulling stunts like that, but judging from Eibon's monthly bills and Adler's furrowed brow, the effect probably isn't great.\n\nEven though Sakiri brings all sorts of trouble to Eibon every time she goes on quests, if you leave her idle in the shop…\nOne second she's reading \"Weekly Fantasy,\" the next she might grab some scene from the manga and get Nanally to take her out for fun, ahem, building The Coluccis. If she doesn't follow Nanally out to cause trouble, then poor Taygedo gets it instead. And even if Sakiri miraculously stays put in the shop for once, Kiroumaru can still create some accidents…\n\nTrouble seems to follow Sakiri wherever she goes, but unlike Nanally, Sakiri never causes major disasters and can even bail Nanally out when it counts. While it looks like Nanally is the one dragging Sakiri and Edgar around everywhere for The Coluccis, when you really think about it… maybe Sakiri is actually the most reliable one?\n\nOh, and if you don't want to get hit with Kiroumaru's \"Memory Correction Technique,\" remember this well: don't get curious about the things Sakiri sneakily throws away every day, or else…" + }, + { + "name": "Colucci Family, Second in Command", + "desc": "Personally certified by the Ichi-daime of the Coluccis, the cornerstone of growing bigger, getting stronger, and reaching new heights!\n\"Sakiri! Edgar! I just thought of a new plan for the family!\"\n\"Seriously? Again? Should we make a run for it while we can?\"\n\"If we don't listen… Nanally's gonna keep going on about it next time…\"\n\"Give me a break…\"\n\"Come on! This'll be the meeting that decides the Coluccis' fate!\"" + }, + { + "name": "Honest Popping Candy", + "desc": "\"Hehe, Edgar, what exactly did Sakiri say after she ate that Honest Popping Candy last time? Taygedo said I missed quite a show!\"\n\"Um… Sakiri told me not to say…\"\n\"Oh come on, it's fine, Sakiri's not…\"\n\"Dummy! What are you whispering about with Nanally?! Time to get to work, Kiroumaru!\"\n\"No no no no no no! I don't know anything yet!\"" + }, + { + "name": "Kiroumaru", + "desc": "An Anomaly that seems born just to eat! It eats food, it eats radios, it eats bike wheels, it eats tires, eat eat eat eat eat eat eat eat eat!\n\"Sakiri, can I eat this? Sakiri, can I eat that?\"\nAnyway, as long as it can stay by Sakiri's side and eat eat eat, it's happy! Always following Sakiri around, eat eat eat!" + }, + { + "name": "\"With everyone now…\"", + "desc": "A melody few have ever heard, Sakiri never hums this nursery rhyme in front of others.\nFor someone who acts too mature for her age most of the time, this is one of those rare moments when she actually shows her inner child.\nThough Sakiri always keeps quiet about it, perhaps we can glimpse something from this song…\nFrom this lonely and eerie nursery rhyme, we might see some hints of her past." + }, + { + "name": "\"A place that won't abandon me\"", + "desc": "At the end of the \"Pawn Moonlight\" incident, Otro gave Sakiri a gift: a box containing little bears designed to look like Eibon members.\nSometimes Sakiri hides in her room and takes out the bears to play with them, surrounded by the little figures like she's playing house.\nThough she's never said it out loud, she really loves this gift." + } + ], + "melee": [ + { + "id": "GA_Sagiri_Melee", + "name": "Kiroumaru Headbutt", + "type_name": "Basic Attack", + "desc_name": [ + "Ram</>", + "<Title>Eating Mode</>", + "<Title>Swallow</>", + "<Title>Critical Riposte: Mischief</>" + ], + "desc": [ + "Sakiri swings Kiroumaru and performs up to <NumGreen>5</> consecutive attacks, dealing <Zhou>Incantation DMG</>.", + "Hold to activate <hot textstyle=\"TextEXPL\" param=\"nouns&SagiriEat\">Eating Mode</> with Kiroumaru. Mounts Sakiri onto Kiroumaru, allowing movement.\r\nOpens its mouth to continuously pull nearby targets within a cone while Hungry. Destroys movable objects in the scene and devours weak enemies.\r\nTakes <NumGreen>180s</> to digest <NumGreen>each</> devoured enemy, with only <NumGreen>1</> target digested at a time.\r\nBecomes Full when the number of enemies being digested reaches the limit, remaining movable but unable to pull or devour enemies.\r\nRelease to exit the mode.", + "Wields Kiroumaru in the air and plunges, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Ram after a Critical Dodge. Leaps high into the air and strikes down hard with Kiroumaru against enemies left vulnerable by their missed attacks. Deals <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area and reduces Break." + ], + "desc_short": [ + "Deals <Zhou>Incantation DMG</>.", + "Hold to activate <hot textstyle=\"TextEXPL\" param=\"nouns&SagiriEat\">Eating Mode</> with Kiroumaru. Mounts Sakiri onto Kiroumaru, allowing movement.", + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>." + ], + "context": "<Italic>According to Mr. T, an oddity who survived the depths of Kiroumaru's belly and lived to tell the tale thanks to Sakiri's timely intervention, hints at an unexpected perk: Amidst the gloom, one might unearth a half-digested game console to while away the hours—a quirky, entertaining twist to an otherwise harrowing wait for rescue.</>", + "icon": "/Game/UI/UI_Icon/Skill/Sagiri_Melee", + "additional_desc": [ + { + "name": "Eating Mode", + "desc": "Moves continuously while riding Kiroumaru. Pulls in and devours weak enemies during this time. Takes time to digest each devoured enemy." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Sagiri_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 40, + 43, + 47, + 50, + 54, + 59, + 64, + 69, + 74, + 80, + 87, + 94, + 101 + ] + ] + }, + { + "id_stats": "GE_Player_Sagiri_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 13, + 14, + 16, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32, + 34 + ], + [ + 75, + 81, + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151, + 163, + 176, + 190 + ] + ] + }, + { + "id_stats": "GE_Player_Sagiri_Melee8_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4 + ], + [ + 71, + 77, + 83, + 90, + 97, + 105, + 113, + 122, + 132, + 143, + 154, + 166, + 180 + ] + ] + }, + { + "id_stats": "GE_Player_Sagiri_Melee5_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%*3", + "values": [ + [ + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83 + ] + ] + }, + { + "id_stats": "GE_Player_Sagiri_Melee6_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8 + ], + [ + 106, + 114, + 123, + 133, + 144, + 156, + 168, + 182, + 196, + 212, + 229, + 247, + 267 + ] + ] + }, + { + "id_stats": "GE_Player_Sagiri_AirAttack1_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 107, + 116, + 125 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34 + ] + ] + }, + { + "id_stats": "GE_Player_Sagiri_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 214, + 231, + 249, + 269, + 291, + 314, + 339, + 366, + 396, + 427, + 462, + 499, + 538 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Sagiri_Skill", + "name": "Devour Whole", + "type_name": "Redirect Skill", + "desc_name": [ + "<Title>Burp</>", + "<Title>Gravity Eater</>" + ], + "desc": [ + "Press to activate. Kiroumaru opens its mouth, pulling in nearby enemies. Kiroumaru then inflates and knocks down the enemy.", + "Hold to activate. Kiroumaru opens its mouth, pulling in nearby enemies. Kiroumaru then bites through the ground, devouring the gravity in that area, levitating enemies there (not effective against powerful enemies)." + ], + "desc_short": [ + "Pulls nearby enemies, dealing <Zhou>Incantation DMG</>.", + "Pulls and levitates nearby enemies, dealing <Zhou>Incantation DMG</>." + ], + "context": "<Italic>\"Sa… Sakiri, can I eat this?\" \"Moron, next time ask before you eat!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Sagiri_Skill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Sagiri_Skill1_Damage", + "name": "Press Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 167, + 181, + 195, + 211, + 228, + 246, + 266, + 287, + 310, + 335, + 362, + 391, + 422 + ], + [ + 232, + 250, + 270, + 292, + 315, + 341, + 368, + 397, + 429, + 464, + 501, + 541, + 584 + ] + ] + }, + { + "id_stats": "GE_Player_Sagiri_Skill5_Damage", + "name": "Hold Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 90, + 97, + 105, + 113, + 122, + 132, + 143, + 154, + 167, + 180, + 195, + 210, + 227 + ], + [ + 118, + 128, + 138, + 149, + 161, + 174, + 188, + 203, + 219, + 237, + 256, + 277, + 299 + ], + [ + 190, + 206, + 222, + 240, + 259, + 280, + 302, + 327, + 353, + 381, + 412, + 445, + 480 + ] + ] + }, + { + "id_stats": "GA_Sagiri_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Press to get Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Hold to get Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Sagiri_UltraSkill", + "name": "Feast of Gluttony", + "type_name": "Ultimate", + "desc": "No escaping this time! Kiroumaru spits out a large amount of Gravity Slurry from above, dealing <NumGreen>6</> instances of <Zhou>Incantation DMG</> to an area. Applies strong gravity to hit enemies, pressing them heavily to the ground (not effective against Bosses). Prevents <TextHLT>Suppressed</> enemies from moving for a period. Increases Team ATK (excluding Sakiri) based on Sakiri's Base ATK.", + "desc_short": "<TextHLT>Suppresses</> enemies, dealing <Zhou>Incantation DMG</>. Increases Team ATK (excluding Sakiri) based on her ATK.", + "context": "<Italic>No prey escapes before Kiroumaru has its fill.</>", + "icon": "/Game/UI/UI_Icon/Skill/Sagiri_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Sagiri_UltraSkill1_Damage", + "name": "Gravity Slurry Ratio", + "icon": "", + "value_name": "{0}% *5 + {1}%", + "values": [ + [ + 120, + 129, + 140, + 151, + 163, + 176, + 190, + 205, + 222, + 239, + 259, + 279, + 302 + ], + [ + 300, + 324, + 349, + 377, + 408, + 440, + 476, + 514, + 555, + 599, + 647, + 699, + 755 + ] + ] + }, + { + "id_stats": "GA_Sagiri_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Sagiri_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + }, + { + "name": "Suppress Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "ATK Bonus Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Sagiri_QTE", + "name": "Squash!", + "type_name": "Support Skill", + "desc": "Let's see which unlucky soul is about to get squashed? Sakiri slams the enlarged Kiroumaru heavily onto the target, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area.", + "desc_short": "Deals <Zhou>Incantation DMG</>.", + "context": "<Italic>Kiroumaru, stop right there! Hm? Did you just bump into something?</>", + "icon": "/Game/UI/UI_Icon/Skill/Sagiri_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Sagiri_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Sagiri_Passive_1", + "name": "Can I Eat This?", + "type_name": "Passive Skill", + "desc": "<TextHLT>Scorch Enhancement</>: Increases DoT taken by the target by 25% for each type of DoT effect while in Scorch state, up to 100%.", + "context": "<Italic>It's not time to start yet! Instead of swallowing whole… wouldn't it be better to add more ingredients? Can't let the fun pass!</>", + "icon": "/Game/UI/UI_Icon/Skill/Sagiri_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Sagiri_Passive_2", + "name": "Impish Trick", + "type_name": "Passive Skill", + "desc": "Reduces enemies' DEF by 10% for 20s after inflicting Airborne or <TextHLT>Suppress</>.", + "context": "<Italic>Those on the naughty list… will be taken by ghosts… or perhaps eaten?</>", + "icon": "/Game/UI/UI_Icon/Skill/Sagiri_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_Sagiri_01", + "name": "No Work, No Reward", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_tptcg", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Sakiri increases dish prices by an additional <Green2>0.12</> Fons." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Sakiri reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, Kiroumaru actively attacks and drives away Danzaburou." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Sakiri reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Sakiri increases dish prices by <Green2>0.3</> Fons when a dish contains 3 identical tags." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Diffusive Haze", + "desc": "Extends the immovable effect inflicted by Feast of Gluttony to <NumGreen>6s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1003_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Dextrous Separation", + "desc": "Deals extra damage with Feast of Gluttony to airborne enemies, scaling with the target's mass and capped at <NumGreen>600%</> of ATK.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1003_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Adhesive Grip", + "desc": "Increases Devour Whole and Feast of Gluttony damage by <NumGreen>6%</> for <NumGreen>each</> enemy defeated by the Team over the next <NumGreen>15s</>, up to <NumGreen>60%</>. Resets when out of combat.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1003_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Wishful Reliance", + "desc": "Increases Team ATK (excluding Sakiri) by <NumGreen>30%</> of Sakiri's Base ATK for <NumGreen>20s</> after casting Feast of Gluttony.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1003_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Sensory Collapse", + "desc": "Fully restores Feast of Gluttony's Ultimate Energy and resets its cooldown immediately when Devour Whole makes the target airborne.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1003_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Gluttonous Dissolution", + "desc": "Allows Kiroumaru to devour and digest up to <NumGreen>3</> enemies at a time in <hot textstyle=\"TextEXPL\" param=\"nouns&SagiriEat\">Eating Mode</>, with the digestion time for each enemy calculated independently.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1003_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Eating Mode", + "desc": "Moves continuously while riding Kiroumaru. Pulls in and devours weak enemies during this time. Takes time to digest each devoured enemy." + } + ] + } + ], + "resonance": [ + { + "name": "Insatiable Appetite", + "desc": "Increases the skill level of Kiroumaru Headbutt, Devour Whole, and Feast of Gluttony by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Fog Penetration", + "desc": "For each negative effect on the target, Sakiri deals <NumGreen>3%</> increased damage to the target, up to <NumGreen>12%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1003/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "DamageUpIncantationBase", + "name": "Incantation DMG Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DamageUp_red", + "bShowPercent": true, + "value": 9 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_015", + "amount": 100 + }, + { + "item_id": "Food_064", + "amount": 100 + }, + { + "item_id": "Food_093", + "amount": 100 + }, + { + "item_id": "Flower0002", + "amount": 200 + }, + { + "item_id": "Furniture_draw_002", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1003" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial", + "Likeprice_1003_0" + ], + "amount": [ + 20, + 5, + 1 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1003" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1003" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1003" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1003" + ], + "amount": [ + 50000, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "(Kiroumaru: Hello, I'm the ever-so-grumpy Sakiri, and this is the invincible Lord Kiroumaru—ouch!) \nSo you're the appraiser Hotori picked up? There, be careful around that ugly monster Kiroumaru, don't get too close… If something goes missing, I won't help you find it… No insurance if you get bitten on the butt either!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_meet_001_01" + }, + { + "name": "Chat: Gluttony", + "desc": "Kiroumaru! What's that junk you're eating? Spit it out!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_chat_001" + }, + { + "name": "Chat: Nursery Rhyme", + "desc": "Snap, snap, where did you go?\r\nFragile and cute, that glass doll.\r\nTick-tock, tick-tock, the sun's dipped low.\r\nSafe with the crew, fears all stowed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_chat_002" + }, + { + "name": "Chat: Milk", + "desc": "Still sleeping, eh… Glug glug glug… Ugh, I can't stand milk…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_chat_003" + }, + { + "name": "Sunny", + "desc": "Let's drag Nanally and the dummy out for some… something big!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_weather_001" + }, + { + "name": "Rainy", + "desc": "Another car splashes me, it's done for!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_weather_002" + }, + { + "name": "Cold", + "desc": "I won't dress like an ugly yarn ball… Ah, achoo!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_weather_003" + }, + { + "name": "Hot", + "desc": "Little bear popsicle? Please, that's kid stuff…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "What took you so long?! The sun's been up for hours!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Hey, I've been here for you all day, maybe show some gratitude?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "If you blink at the moment the sun goes down, you'll get—snagged by the shadow ghost!… Haha, just kidding!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_greet_003" + }, + { + "name": "Good Night", + "desc": "Off to dreamland already? You're so boring… Come earlier tomorrow, okay?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_greet_004" + }, + { + "name": "Hobbies", + "desc": "Seeing Taygedo rage is priceless! Just eat all his snacks from the fridge, or hide his precious sticker cards. After all, he always hides them in the same uncreative places! …How is this not a hobby? It's called \"bonding,\" got it?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_hobby_001" + }, + { + "name": "Worries", + "desc": "Still not taller after drinking this stuff for a year… Adler's a liar…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_vexation_001" + }, + { + "name": "Topic: Anomalies Honest Popping Candy", + "desc": "Snacks for me? Hmph, I'll reluctantly accept them. …Popping candy? …Who told you about the honest popping candy? Well, no use denying it! Forget it yourself, or shall I have Kiroumaru surgically remove that memory for you?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_talk_001" + }, + { + "name": "Topic: Disqualified Spawn", + "desc": "It's not a big deal. When a human and an anomaly merge, if the human overcomes the anomaly, they become a Disqualified Spawn. If the anomaly overcomes the human, they become something even more inferior, living miserably… What's with that look?… Just to make it clear, I'm not about to be bested by those bottom-rung beings! So, if you're pitying me, you might as well step back.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_talk_002" + }, + { + "name": "Topic: Empty Bottles", + "desc": "W…what? Empty milk bottles?! You must be seeing things… That's Kiroumaru's weird taste, not mine, definitely.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "How unlucky do you have to be to get stuck with someone like Kiroumaru? Always defiant and noisy! I can't count how many times I've cleaned up its mess because it eats everything! And when it gets an upset stomach, it vomits everywhere!\r\n(Kiroumaru: Everything's on the menu! Gluttony rules!)\r\nZip—it—! One day I'll sew that mouth shut!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_self_001_01" + }, + { + "name": "About Myself: Wish", + "desc": "Curious, are we? Did those two meddlers say something?… Hmph. Save the guesswork. These lips are sealed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_self_002" + }, + { + "name": "About Hotori", + "desc": "She's a lazy squanderer! Always stirring the pot and acting like a child! I was just showing my kindness to her everyday!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_001" + }, + { + "name": "About Adler", + "desc": "If Adler wasn't around, Eibon would've gone bankrupt ages ago! Taking care of the flaky bunch is a full-time gig. Why not care for yourself for a change?!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_002" + }, + { + "name": "About Daffodill", + "desc": "Daffodill's got moves, and I respect that. But teaming up with her? It's like a breath-holding contest with a statue. Ha… I bet she'd vibe with that dummy, Edgar!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_003" + }, + { + "name": "About Nanally", + "desc": "Psst, wanna see Nanally freak out? Put on a horror film, and she'll be hugging her tail in no time. Go on, dare her—but don't say I gave you the idea!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_004" + }, + { + "name": "About Edgar", + "desc": "Being a brainiac is great and all, but if he's too shy to speak up, what's the point? So yeah, I'm the one who steps up! But let me tell you, don't let that quiet act fool you. When it's go-time, he'll come out swinging and leave everyone's jaws on the floor!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_005" + }, + { + "name": "About the Coluccis", + "desc": "Ah, Nanally and the dummy, what a pair! One's scatterbrained, the other's tight-lipped. What would they do without me? But guess what? I… don't hate their company…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_006" + }, + { + "name": "About Taygedo", + "desc": "The dumbest oddity in the entire Bridge Crossings! Never understands the hierarchy! That dumb otter can only be my sidekick, okay? And he cries at the drop of a hat, so embarrassing! Hmm… but you know what, life would be boring without Taygedo… I guess he can stick around!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_007" + }, + { + "name": "About Mismo", + "desc": "Those self-righteous, high-and-mighty guys, I should have hit 'em harder last time! But I'm all about second chances, especially when they're trying to make things right. So, I'll let bygones be bygones… for now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_008" + }, + { + "name": "About Eibon Antique Shop", + "desc": "Humph, I haven't found anywhere else that feels quite satisfying. Plus, Adler's cooking? That's reason enough to stay and lend a hand…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_about_009" + }, + { + "name": "Character Ascension I", + "desc": "It's barely passable.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "At this rate, they'll never catch up with me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "How is Kiroumaru's appetite growing?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Wow, how did you…? Ahem, I'll remember you tried this hard!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Did you want Kiroumaru to cover a mistake you made? Just name it! Kiroumaru will deal with it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Thanks. I'll make sure Kiroumaru doesn't eat it—Umm, at least before I sleep.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I'll give you a surprise some day. A legit one!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Time to eat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Knock them all away!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Hey yah! (Yahoo!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_skill_003_01" + }, + { + "name": "Ultimate I", + "desc": "Get 'em, Kiroumaru!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Watch out, fools!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Watch your step… (Gotcha!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_aoe_UI_003_01" + }, + { + "name": "Containment I", + "desc": "Kiroumaru! Let's get down to business!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_containment_001" + }, + { + "name": "Containment II", + "desc": "Hmph, decent work! You can have that now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_containment_002" + }, + { + "name": "Nullification I", + "desc": "Tch, thought there would be more chaos…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Is it over? Boring.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Aren't you useful sometimes, Kiroumaru!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Hmm… can't figure it out, let's take it back for Nanally and the dummy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Oh! Nice find! Nanally's going to react funny!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "You're dead if you eat this! (Kiroumaru: Ugh…)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "If I give this to Hotori…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "My lucky day!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Ugh… it hurts a bit…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_hp_001" + }, + { + "name": "Low Health II", + "desc": "I don't like this…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_hp_002" + }, + { + "name": "Heal I", + "desc": "I'm not going away this easily!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_fh_001" + }, + { + "name": "Heal II", + "desc": "Hmph, I'm more than this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_fh_002" + }, + { + "name": "Down I", + "desc": "…How could it be…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_dead_001" + }, + { + "name": "Down II", + "desc": "…I see…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_dead_002" + }, + { + "name": "Down III", + "desc": "…You… dare…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_dead_003" + }, + { + "name": "Takedown I", + "desc": "Some unlucky soul got crushed!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_kill_001" + }, + { + "name": "Takedown II", + "desc": "Piece of cake!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_kill_002" + }, + { + "name": "Damaged I", + "desc": "Not bad!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_struck_001" + }, + { + "name": "Damaged II", + "desc": "Wait and see!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Ugh… I'm gonna crush you! (Eat!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_hstruck_001_01" + }, + { + "name": "Heavily Damaged II", + "desc": "…You'll regret this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Let's make a scene together!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Kiroumaru, now you may eat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Taking off!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Over here!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Kiroumaru Overdrive!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_QTE_003_glw" + }, + { + "name": "Glide I", + "desc": "So slow…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_Fly_001" + }, + { + "name": "Glide II", + "desc": "Kiroumaru, stop squirming around! I'm not helping you if you fall!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_Fly_002" + }, + { + "name": "Switch I", + "desc": "Coming through!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_Switch_001" + }, + { + "name": "Switch II", + "desc": "Tag, you're it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_Switch_002" + }, + { + "name": "Switch III", + "desc": "Time to eat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_Switch_003" + }, + { + "name": "Special Switch - Hotori", + "desc": "Move aside! Let the great Sakiri handle this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_SSC_001" + }, + { + "name": "Special Switch - Edgar", + "desc": "Stay back and help, dummy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_SSC_002" + }, + { + "name": "Special Switch - Nanally", + "desc": "Yeah, yeah, Ichi-whatever.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_SSC_003" + }, + { + "name": "Special Switch - Adler", + "desc": "Stop treating me like a child.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_SSC_004" + }, + { + "name": "Special Switch - Daffodill", + "desc": "My turn!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_SSC_005" + }, + { + "name": "Special Switch - Zero", + "desc": "Watch out, watch out! It's Kiroumaru!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_SSC_ZERO_001" + }, + { + "name": "Teammate Down - Hotori", + "desc": "Stay out of this if you're drunk!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_TeammateDown_001" + }, + { + "name": "Teammate Down - Edgar", + "desc": "Get back, Edgar!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_TeammateDown_002" + }, + { + "name": "Teammate Down - Nanally", + "desc": "I'm telling you… You can't just charge forward.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_TeammateDown_003" + }, + { + "name": "Teammate Down - Adler", + "desc": "Don't try too hard, old man.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_TeammateDown_004" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "No way you made a mistake like that…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_TeammateDown_005" + }, + { + "name": "Teammate Down - Zero", + "desc": "Hey, baddies, do you think our Appraiser is a pushover?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_TeammateDown_006" + }, + { + "name": "Parry I", + "desc": "I knew it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_Parry_001" + }, + { + "name": "Parry II", + "desc": "My turn!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Kiroumaru is faster than this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Heh, another miss?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_DodgeCombo_002" + } + ] + } + }, + { + "id": "1004", + "name": "Lacrimosa", + "description": "Holds the record for most maintenance requests submitted by BAC staff.", + "element": [ + { + "element_id": "Chaos", + "name": "Chaos" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_004", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_004x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_004_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_anhunqu", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + }, + { + "name": "DoT", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_chixu" + } + ], + "arcs_tags": { + "type_id": "2", + "name": "Liquid", + "icon": "/Game/UI/UI/player/YH_UI_icon_liquid" + } + }, + "reaction": [ + { + "name": "Nova", + "desc": "Inflicts Nova on the target for <NumGreen>5s</> after triggering Esper Cycle. When the effect ends, the target takes massive <bule>Mental Damage</>." + }, + { + "name": "Scorch", + "desc": "Upon triggering Esper Cycle, inflicts Scorch on the target for <NumGreen>15s</>, dealing DoT." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1004_nighty", + "characterId": "1004", + "name": "New Moon Lullaby", + "desc": "Lacrimosa's loungewear. Made of soft, cozy fabric that lets you fall asleep anytime, anywhere.\r\n\"One bat… two bats… three… zzz…\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_004_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_004_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_004_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_anhunqu2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_anhunqu2", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1004_0", + "characterId": "1004", + "name": "The Tomato Story", + "desc": "A comfortable handmade dress. Though Lacrimosa stumbles through her days, her landlady grandmother's skilled hands can always restore it to perfect condition.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_004", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_004_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_anhunqu", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_anhunqu", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1004_2", + "characterId": "1004", + "name": "Yesterday's Melody", + "desc": "A decadent, ornate formal dress, perfect for a castle banquet.\r\n\"The night sky poured over the garden, soaking its roses in muted darkness. Years later, those flowers still bloom in silence, and the rest of the story has faded into shadow.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_004_5_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_004_5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_004_5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_anhunqu5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_anhunqu5", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1004_3", + "characterId": "1004", + "name": "Piano Key Sonatina", + "desc": "Like night and day, some things in this world are simply black and white: espresso and latte, tuxedo cats and white cats, piano keys, Lacrimosa's everyday outfit, and the white dress she wears only once in a while.\r\n\"White dresses are pretty. But… they get dirty so easily.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_004_4_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_004_4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_004_4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_anhunqu4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_anhunqu4", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1004_1", + "characterId": "1004", + "name": "Gilded Rhapsody", + "desc": "Things that shine are often heavy. Lacrimosa feels unusually tired flying to work today. Maybe it isn't just her imagination.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_004_3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_004_3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_004_3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_anhunqu3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_anhunqu3", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1004_4", + "characterId": "1004", + "name": "Nightingale's Crescendo", + "desc": "Happiness sometimes arrives without rhyme or reason, like a reckless hard landing. Just as the bat that foretells good fortune flies through the window lattice, it always comes with a crisp crash and shattered glass strewn across the floor.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_004_6_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_004_6", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_004_6_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_anhunqu6", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_anhunqu6", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1320, + 1426, + 1531, + 1637, + 1742, + 1848, + 1954, + 2059, + 2165, + 2270, + 2376, + 2482, + 2587, + 2693, + 2798, + 2904, + 3010, + 3115, + 3221, + 3326, + 3432, + 3538, + 3643, + 3749, + 3854, + 3960, + 4066, + 4171, + 4277, + 4382, + 4488, + 4594, + 4699, + 4805, + 4910, + 5016, + 5122, + 5227, + 5333, + 5438, + 5544, + 5650, + 5755, + 5861, + 5966, + 6072, + 6178, + 6283, + 6389, + 6494, + 6600, + 6706, + 6811, + 6917, + 7022, + 7128, + 7234, + 7339, + 7445, + 7550, + 7656, + 7762, + 7867, + 7973, + 8078, + 8184, + 8290, + 8395, + 8501, + 8606, + 8712, + 8818, + 8923, + 9029, + 9134, + 9240, + 9346, + 9451, + 9557, + 9662 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 108, + 112, + 116, + 120, + 124, + 128, + 132, + 136, + 140, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 184, + 188, + 192, + 196, + 200, + 204, + 208, + 212, + 216, + 220, + 224, + 228, + 232, + 236, + 240, + 244, + 248, + 252, + 256, + 260, + 264, + 268, + 272, + 276, + 280, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 364, + 368, + 372, + 376, + 380, + 384, + 388, + 392, + 396 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "ETD-4, Member", + "description": "\"I've been watching for a while now. That girl from ETD has been standing there motionless for two hours! She must be plotting something that could destroy Hethereau…\"\n\"That's just your prejudice talking. She's young and already risking her life for this city. Standing there quietly is probably part of her duty.\"\n\"Last week she threw a truck across half the street and left a huge crater in the ground. You saw it too!\"\n\"Wasn't that to stop a suddenly rampaging Anomaly? C'mon, be reasonable…\"\nNot far away, Lacrimosa, who had accidentally fallen asleep while standing, let out a big yawn and rubbed her eyes groggily.\nThe wind today, so noisy… Sigh… miss home.", + "birthday": "June 26", + "homePlace": "Bureau of Anomaly Control, ETD-4", + "abilityName": "Requiem", + "introduction": "Holds the record for most maintenance requests submitted by BAC staff.", + "voiceChinese": "宴宁", + "voiceEnglish": "Baraka May", + "voiceJapanese": "長縄まりあ", + "voiceKorean": "김보나" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Bureau of Anomaly Control Fun Fact #1: A Lacrimosa will regularly spawn on the break room couch.\nOther common Lacrimosa spawn points include sun-warmed rooftops, quiet and rarely-visited stairwells, or the inside of a creepy-looking coffin that actually has soft, fluffy padding inside…\nThere are 24 hours in a day, so sleeping for only 20 hours isn't that much, right?\n\nAs ETD-4's adorable little ace, Lacrimosa may not be good at socializing, but her popularity remains sky-high. While her complaint letters are directly proportional to her property damage rate, the thank-you letters and fan mail she receives are equally staggering.\nTeam relationships? Harmonious. Even when having lunch at Clicky Fast Food, when all the ketchup gets hogged and everyone has to dip their french fries in ice cream instead… it's no big deal.\n\nPerhaps because she's too innocent and pure, Lacrimosa has a unique \"eye for discovering beauty.\"\nThis manifests as: accidentally bumping into street signs hard enough to hurt her forehead, or taking exhausting routes that take forever to walk despite being quickly reachable by car. In these moments, Lacrimosa reaches the conclusion: Street signs, cars, powerful! Lacrimosa, must learn!\n\"Actually, controlling Esper Abilities and creating all sorts of complex shapes out of thin air is actually much harder than people imagine. Lacrimosa has put in a lot of effort where no one can see!\" —assessment from ETD reserve training staff currently in casts.\n\nWhat, Lacrimosa's missing again? Did she get lost? Where did she fall asleep this time? Or was she distracted by a roadside tomato jelly vending machine? Well, no worries. Trust that she's still a reliable ETD team member. When the team really needs Lacrimosa, she'll definitely come running.\n…Though it'll probably be at the cost of glass doors shattered all along the way." + }, + { + "name": "Tomato Enthusiasm 100%", + "desc": "Perhaps it's the price of her Esper Abilities, but aside from tomato products, Lacrimosa can't taste anything she eats. No matter how delicious food smells, eating it is like chewing soft, chewy, or crispy plain cardboard.\nThe upside is that even when Mint has a \"brilliant idea\" and creates something like banana coco pumpkin pie, so long as it doesn't smell too questionable, Lacrimosa can eat it all with a straight face!\nRumor has it that the tomato product brand \"Tomato 100\" once approached Lacrimosa, hoping to invite her to become their spokesperson. However, the collaboration was temporarily suspended due to negative social impact caused by the \"Tomato Devil\" Anomaly. Recently though, the brand seems interested in restarting the partnership… but we'll leave that story for another time." + }, + { + "name": "Level 1 Aviation Emergency Alert", + "desc": "Hethereau is just too big, and walking is just too exhausting. One day, Lacrimosa thought to herself: \"It'd be great if I didn't have to walk.\" The next second, she found herself transformed into a little bat, flying through the air. Mm, much easier. Problem solved!\nHowever, now Lacrimosa had new troubles. After all, not every building had glass doors, but glass windows were everywhere. Ever since she learned to fly, situations where Lacrimosa's forehead and glass both get damaged have become increasingly common. To add to her woes, flying takes less effort than walking, so naturally closing her eyes and dozing off is pretty normal, right? If she actually falls asleep, however, she'll forget to flap her wings… and down comes a falling Lacrimosa from the sky." + }, + { + "name": "Cult Manga Club", + "desc": "As a devoted fan of the most famous cult manga \"Duke K\" in recent years, Lacrimosa naturally hangs out on Bagel, constantly keeping up with the latest news.\nTyping is too hard, so Lacrimosa usually just lurks without commenting. She's even too lazy to come up with a username, so she goes online using her real name. Unexpectedly, she was caught by a fellow \"Duke K\" fanatic called \"GeneSectParanormalDeptAce\" because of her frequent likes, and somewhat reluctantly gained a friend with shared interests.\nHer teammates are quite relieved that Lacrimosa has finally made a friend, but she still can't remember the other person's full username and usually just calls them \"Net Friend With A Long Name.\" On the other hand, the other person apparently still thinks her habit of referring to herself in-person by her online username is rather self-centered…" + }, + { + "name": "Secret of the Starlight Ring?", + "desc": "The Bureau of Anomaly Control's employee files contain a photo of Lacrimosa from before she joined the team: sitting on the ruins of a completely flattened convenience store, concentrating intently on drinking tomato jelly.\nThe files also show that her almost complete inability to control her Esper Abilities improved significantly after she spent some time training with the ETD reserve team. A pair of rings of unknown origin with obvious signs of use, received from a future captain, seemed to provide great help with her practice.\nPerhaps after she grows up, she'll be able to sense the true secret contained within those rings… but that's all in the future." + }, + { + "name": "Untitled Future", + "desc": "Just like most people can't remember their earliest days as an infant, Lacrimosa can't recall anything from before she became \"Lacrimosa.\"\nBased on a line of text carved on the coffin where she woke up, Lacrimosa decided on her own name. Why don't other people get to decide their own? Don't adults always tell her that she should choose the kind of person she wants to become?\nHowever, names she didn't choose like \"Mosa\" or \"Lacrimosa Senpai\" also seem to be calling her. If she had chosen a different name, would she have become a different person? …Lacrimosa can't answer such complex questions yet.\nShe only knows that her teammates taught her to respond seriously when her name is called. Lacrimosa has kept those words close to her heart.\n\"That super-strong pretty girl from ETD may always have a blank expression, but she's surprisingly down-to-earth! When I greeted her on the street last time, she even responded! Oh my gosh, so cute!\"\nThus, her popularity among citizens rose a bit more." + } + ], + "melee": [ + { + "id": "GA_Lacrimosa_Melee", + "name": "Sweet and Sour", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Tomato Metal</>", + "<Title>Basic Attack: Tomato Percussion</>", + "<Title>Flavor Variation</>", + "<Title>Basic Attack: Devilish Inspiration</>", + "<Title>Basic Attack: Lycopersicum Meteors</>", + "<Title>Critical Riposte: fff Rest</>", + "<Title>Nightmare</>" + ], + "desc": [ + "Swings her Frying Pan, performing up to 5 consecutive attacks, dealing <An>Chaos DMG</>.\r\nThe projectile generated by the 2nd attack can be shattered by subsequent attacks, causing an explosion and dealing extra <An>Chaos DMG</>.", + "Manipulates Red Jelly, performing up to <NumGreen>5</> consecutive attacks, dealing <An>Chaos DMG</>.", + "Flavor Variation can be used at any time via the Aim button.\r\nTosses her Frying Pan and performs a flying kick forward when using Tomato Metal, dealing 1 instance of <An>Chaos DMG</> to each target hit. Switches her attack module to Tomato Percussion.\r\nLeaps into the air and slams the ground, dealing 1 instance of AoE <An>Chaos DMG</> when using Tomato Percussion. Switches her attack module to Tomato Metal.\r\nThe current Basic Attack style determines the attack pattern of Working Day Judgement.", + "Hold to enter Aim mode. Deals 1 instance of <An>Chaos DMG</> to an enemy in the crosshair and learns their combat technique.\r\nTemporarily forgets Morning Tomato and uses the learned technique upon successful learning.\r\nLearned techniques are stored permanently in Lacrimosa's memory. New techniques can be learned to replace existing ones, or Lacrimosa can actively forget a technique on the Skill page to recall Morning Tomato.", + "Manipulates Esper Ability Constructs in the air and plunges, dealing <NumGreen>1</> instance of <An>Chaos DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Basic Attacks after a Critical Dodge. Seizes the opening created by the enemy's missed attack and violently hurls a large amount of Red Jelly onto the enemy's head, dealing <NumGreen>6</> instances of <An>Chaos DMG</> to an area and reducing Break.", + "Inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> on the target when attacks hit, up to 10 stacks.\r\nInflicts 1 stack of <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> per damage instance when a single Basic Attack deals multiple instances of damage." + ], + "desc_short": [ + "Deals <An>Chaos DMG</>.", + "Deals <An>Chaos DMG</>.", + "Press Aim to switch attack style, dealing <An>Chaos DMG</>.", + "Hold to enter Aim mode. Deals <An>Chaos DMG</> and learns the enemy's skill.", + "Deals <An>Chaos DMG</>.", + "Deals <An>Chaos DMG</>.", + "Attacks inflict <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> on hit." + ], + "context": "<Italic>At first, there were no roads. Then Lacrimosa made lots of vehicles and road signs, and suddenly roads appeared. The problem? Too many signs with contradictory rules. How are you supposed to turn left and right at the same time?</>", + "icon": "/Game/UI/UI_Icon/Skill/Lacrimosa_Melee", + "additional_desc": [ + { + "name": "Nightmare", + "desc": "Deals 1 instance of <An>Chaos DMG</> to the target per second for 3s.\r\nRemoves 1 stack of Nightmare when the target receives healing." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Lacrimosa_B_Melee1_Damage", + "name": "Melee Basic Attack: 1st Instance Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 64, + 69, + 74, + 80, + 87, + 94, + 101, + 110, + 118, + 128, + 138, + 149, + 161 + ], + [ + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42, + 46, + 50, + 54, + 58 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_B_Melee3_Damage", + "name": "Melee Basic Attack: 2nd Instance Ratio", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 43, + 46, + 50 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_B_Melee4_Damage", + "name": "Melee Basic Attack: 3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}% *3", + "values": [ + [ + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 61 + ], + [ + 14, + 15, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_B_Melee5_Damage", + "name": "Melee Basic Attack: 4th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 70, + 76, + 82, + 89, + 96, + 104, + 112, + 121, + 131, + 141, + 153, + 165, + 178 + ], + [ + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_B_Melee7_Damage", + "name": "Melee Basic Attack: 5th Instance Ratio", + "icon": "", + "value_name": "{0}% *3 + {1}%", + "values": [ + [ + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 39, + 43, + 46, + 50, + 54, + 58 + ], + [ + 123, + 133, + 143, + 155, + 167, + 181, + 195, + 211, + 228, + 246, + 266, + 287, + 310 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_B_Melee3_Explode_Damage", + "name": "Melee Basic Attack Explosion", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 19, + 21, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_Melee1_Damage", + "name": "Ranged Basic Attack: 1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 37, + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_Melee2_Damage", + "name": "Ranged Basic Attack: 2nd Instance Ratio", + "icon": "", + "value_name": "{0}% *3", + "values": [ + [ + 16, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_Melee3_Damage", + "name": "Ranged Basic Attack: 3rd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 113, + 123, + 132, + 143, + 155, + 167, + 180, + 195, + 210, + 227, + 245, + 265, + 286 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_Melee4_Damage", + "name": "Ranged Basic Attack: 4th Instance Ratio", + "icon": "", + "value_name": "{0}% *3 + {1}%", + "values": [ + [ + 15, + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39 + ], + [ + 193, + 209, + 225, + 244, + 263, + 284, + 307, + 332, + 358, + 387, + 418, + 451, + 487 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_Melee5_Damage", + "name": "Ranged Basic Attack: 5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 123, + 133, + 144, + 156, + 168, + 182, + 196, + 212, + 229, + 247, + 267, + 288, + 312 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_Pan_Damage", + "name": "Flavor Variation: Melee to Ranged", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_SwitchModB_Damage", + "name": "Flavor Variation: Ranged to Melee", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 79, + 85, + 92, + 99, + 107, + 116, + 125, + 135, + 146, + 157, + 170, + 184, + 198 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_Blood_Damage", + "name": "Nightmare DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + ] + }, + { + "name": "Nightmare Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_BranchPraojectile_Damage", + "name": "Aim DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 32 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151, + 163, + 176, + 190, + 205, + 222 + ] + ] + }, + { + "name": "Melee Basic Attack Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32 + ] + ] + }, + { + "name": "Ranged Basic Attack Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%+{1}%*5", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ], + [ + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Lacrimosa_Skill", + "name": "Morning Tomato", + "type_name": "Redirect Skill", + "desc_name": [ + "<Title>Skill: Morning Tomato</>", + "<Title>Redirect Skill: Devilish Gift</>" + ], + "desc": [ + "Ah… Achoo! Throws a barrage of unfinished Esper Ability Constructs, dealing <NumGreen>1</> instance of <An>Chaos DMG</> to all targets within the area and inflicting <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> on the targets.\r\nCombos into the <NumGreen>5</>th instance of Tomato Metal or Tomato Percussion after casting Morning Tomato.", + "Lacrimosa... can do it too.\r\nLacrimosa uses her Esper Ability to copy and cast an enemy's skill, triggering the corresponding additional effects. The skill duration matches that of the original owner. During the cast, Lacrimosa cannot move, but she can manually cancel the cast or switch to another character. Lacrimosa takes damage if she is attacked during the cast.\r\nCasting Devilish Gift grants Lacrimosa a percentage of the original skill owner's ATK." + ], + "desc_short": [ + "Deals <An>Chaos DMG</> to an area and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</>.", + "Casts the acquired skill." + ], + "context": "<Italic>\"Ah. Lacrimosa… didn't mean to…\"</>\r\n<Italic>\"Haha, nice work there, Mosa! Let's have Skia buy you some ice cream!\"</>\r\n<Italic>\"Baicang, nosy. Ice cream… three scoops…\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Lacrimosa_Skill1", + "additional_desc": [ + { + "name": "Nightmare", + "desc": "Deals 1 instance of <An>Chaos DMG</> to the target per second for 3s.\r\nRemoves 1 stack of Nightmare when the target receives healing." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Lacrimosa_Skill1_Damage", + "name": "Morning Tomato DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 300, + 324, + 349, + 377, + 408, + 440, + 476, + 514, + 555, + 599, + 647, + 699, + 755 + ] + ] + }, + { + "name": "Morning Tomato Nightmare Stacks", + "icon": "", + "value_name": "{0} stacks", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "name": "Devilish Gift ATK Gain", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Devilish Gift Max ATK Gain", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200 + ] + ] + }, + { + "name": "Devilish Gift Min ATK Gain", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "name": "Devilish Gift Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Lacrimosa_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Lacrimosa_UltraSkill", + "name": "Working Day Judgement", + "type_name": "Ultimate", + "desc": "Controls the Truck when using Tomato Metal, dealing 10 instances of <An>Chaos DMG</> to an area and inflicting <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> on all targets in range.\r\n\r\nDismantles the Car when using Tomato Percussion, dealing 5 instances of <An>Chaos DMG</> to an area and inflicting <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> on all targets in range.", + "desc_short": "Deals <An>Chaos DMG</> to an area and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</>.", + "context": "<Italic>A friendly reminder from Barracuda, BAC's Professional Maintenance Staff: ETD-4 has exhausted their free maintenance quota for this month. Future repair costs will be deducted from the performance bonus of those who file the requests. CERTAIN team members are kindly reminded to take better care of Bureau property, especially non-reinforced glass items and sensitive electronic equipment. CERTAIN team members needing items from the vending machine should seek assistance from their squad captain or lieutenant.</>", + "icon": "/Game/UI/UI_Icon/Skill/Lacrimosa_UltraSkill", + "additional_desc": [ + { + "name": "Nightmare", + "desc": "Deals 1 instance of <An>Chaos DMG</> to the target per second for 3s.\r\nRemoves 1 stack of Nightmare when the target receives healing." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Lacrimosa_UltraSkillModB_Damage", + "name": "Truck DMG Ratio", + "icon": "", + "value_name": "{0}% *2+{1}% *5+{2}% *3", + "values": [ + [ + 253, + 273, + 295, + 319, + 344, + 372, + 401, + 434, + 468, + 506, + 546, + 590, + 637 + ], + [ + 42, + 46, + 49, + 53, + 58, + 62, + 67, + 73, + 79, + 85, + 92, + 99, + 107 + ], + [ + 93, + 100, + 108, + 117, + 126, + 137, + 148, + 159, + 172, + 186, + 201, + 217, + 234 + ] + ] + }, + { + "id_stats": "GE_Player_Lacrimosa_UltraSkill1_Damage", + "name": "Car DMG Ratio", + "icon": "", + "value_name": "{0}% *4 + {1}%", + "values": [ + [ + 94, + 101, + 109, + 118, + 128, + 138, + 149, + 161, + 174, + 188, + 203, + 219, + 237 + ], + [ + 623, + 673, + 727, + 785, + 848, + 915, + 989, + 1068, + 1153, + 1246, + 1345, + 1453, + 1569 + ] + ] + }, + { + "name": "Inflicts Nightmare", + "icon": "", + "value_name": "{0} stacks", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "id_stats": "GA_Lacrimosa_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Lacrimosa_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Lacrimosa_QTE", + "name": "Microwake", + "type_name": "Support Skill", + "desc": "Lacrimosa get this done, and Lacrimosa get to sleep… Manipulates Esper Ability Constructs, dealing <NumGreen>1</> instance of <An>Chaos DMG</> to an area.", + "desc_short": "Deals <An>Chaos DMG</> to an area.", + "context": "<Italic>Lacrimosa couldn't care less about villain arcs and tragic backstories. She just wants to clock out and go home to sleep.</>", + "icon": "/Game/UI/UI_Icon/Skill/Lacrimosa_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Lacrimosa_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Lacrimosa_Passive_1", + "name": "Tomato Banquet", + "type_name": "Passive Skill", + "desc": "<TextHLT>Discord Enhancement</>: Deals additional DMG equal to 400% of ATK to the target when Discord is triggered, if the target is already Broken.", + "context": "<Italic>Weekday morning alarms… magic, mess with memory.</>\r\n<Italic>\"So this is your excuse for being late?\"</>\r\n<Italic>\"Alarm 1, Alarm 2, Lacrimosa turned them all off. But… ah… Lacrimosa can't remember…\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Lacrimosa_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Lacrimosa_Passive_2", + "name": "Sleep In", + "type_name": "Passive Skill", + "desc": "Grants <NumGreen>1</> additional attempt of Morning Tomato after Lacrimosa uses Tomato Metal or Tomato Percussion <NumGreen>5</> times during the skill cooldown. Activates only <NumGreen>1</> time per skill cooldown.", + "context": "<Italic>One person's sweet dream can be another's nightmare. Makes you wonder… why don't people wake themselves up with their sleep talking?</>", + "icon": "/Game/UI/UI_Icon/Skill/Lacrimosa_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Lacrimosa_Passive_3", + "name": "Sleepwalk", + "type_name": "Character Traits", + "desc": "Lacrimosa transforms into a bat in her dream, flying freely. When out of combat, hold dodge to enter flight. Flight costs stamina.", + "context": "<Italic>\"Lacrimosa can fly. But glass… always hit it. Hate it. And when Lacrimosa sleeps… down from the sky!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Lacrimosa_Pas3", + "additional_desc": [], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_lacrimosa_01", + "name": "Chef Tomato", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_fqdc", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Lacrimosa increases dish prices by <Green2>1%</> for each Dessert tag on dishes." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Lacrimosa reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, a special dish \"Special Tomato Juice\" appears, made by adding tomato juice to a glass." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Lacrimosa reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Lacrimosa increases dish prices by <Green2>1.5%</> for every 2 Dessert tags on dishes." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + }, + { + "id": "City_Ability_lacrimosa_sp01", + "name": "Exclusive Bat-efit", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_zsfl", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases Fons and Paw-Paw Coins obtained from Pink Paws Heist settlement by <Green2>15%</> while Lacrimosa is in the team (Cannot exceed the cap)." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Increases the bonus to Fons and Paw-Paw Coins obtained from Pink Paws Heist settlement to <Green2>20%</> while Lacrimosa is in the team (Cannot exceed the cap)." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Clock Out Clemency", + "desc": "Increases the DMG Ratio of <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> to <NumGreen>{0}%</> at the current skill level.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1004_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Nightmare", + "desc": "Deals 1 instance of <An>Chaos DMG</> to the target per second for 3s.\r\nRemoves 1 stack of Nightmare when the target receives healing." + } + ] + }, + { + "name": "Rise and Shine", + "desc": "Increases Lacrimosa's damage dealt by <NumGreen>15%</> for <NumGreen>15</>s when she switches in using a Support Skill.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1004_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Molten Ice Cream", + "desc": "Triggers all accumulated <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> effects on the target at once when the <NumGreen>5</>th hit of Tomato Metal or Tomato Percussion lands.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1004_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Nightmare", + "desc": "Deals 1 instance of <An>Chaos DMG</> to the target per second for 3s.\r\nRemoves 1 stack of Nightmare when the target receives healing." + } + ] + }, + { + "name": "Almighty Lord of Tomatoes", + "desc": "Extends <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> duration to <NumGreen>6</>s.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1004_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Nightmare", + "desc": "Deals 1 instance of <An>Chaos DMG</> to the target per second for 3s.\r\nRemoves 1 stack of Nightmare when the target receives healing." + } + ] + }, + { + "name": "Tempered Glass Judgment", + "desc": "Reduces the target's Max HP by <NumGreen>200%</> of the <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> DMG dealt when dealing <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> DMG. Restores her HP every <NumGreen>3</>s based on the <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> DMG dealt during that period, restoring HP equal to <NumGreen>1.5%</> of the total <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> DMG dealt. Prevents <hot textstyle=\"TextEXPL\" param=\"nouns&Lacrimosa_dot\">Nightmare</> stacks from being removed when the target is healed.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1004_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Nightmare", + "desc": "Deals 1 instance of <An>Chaos DMG</> to the target per second for 3s.\r\nRemoves 1 stack of Nightmare when the target receives healing." + } + ] + }, + { + "name": "Morning Spell", + "desc": "Allows Lacrimosa to automatically cast her Support Skill and trigger the corresponding cycle without Cycle Energy accumulation when switching to her from any character that can trigger Esper Cycle: Nova, Scorch, or Discord within <NumGreen>5</>s after casting Devilish Gift. Triggers up to <NumGreen>once</> per <NumGreen>5</>s.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1004_1", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "The Heart's Drowsy Flames", + "desc": "Increases the skill level of Sweet and Sour, Morning Tomato, Devilish Gift, and Working Day Judgement by <NumGreen>1</>. Reduces the Stamina cost to <NumGreen>85%</> while flying in bat form.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Lullaby", + "desc": "Lacrimosa's damage ignores <NumGreen>20%</> of the target's DEF. Reduces the Stamina cost to <NumGreen>70%</> while flying in bat form.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1004/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "DamageUpChaosBase", + "name": "Chaos DMG Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DamageUp_black", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_039", + "amount": 100 + }, + { + "item_id": "Food_100", + "amount": 100 + }, + { + "item_id": "Food_101", + "amount": 100 + }, + { + "item_id": "Food_102", + "amount": 100 + }, + { + "item_id": "Flower0003", + "amount": 200 + }, + { + "item_id": "SmallPoster005", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "SpecialGift_1004", + "amount": 1200 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1004" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1004" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Friendship_3_1004" + ], + "amount": [ + 20, + 20000, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1004" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1004", + "Friendship_4_1004" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1004" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1004", + "Fashion_character_1004_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Hello… Mmhm… Ah. Lacrimosa, not asleep. Not asleep…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_meet_001" + }, + { + "name": "Chat: Natural", + "desc": "Uwah…! Lacrimosa… stepped on shoelace… ow. Floor, cold… comfy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_chat_001" + }, + { + "name": "Chat: Insomnia", + "desc": "In-som-nia…? Insomnia? Hmm… \"trouble sleeping\"? Eh…? Sleep is easy… just close your eyes… zzz…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_chat_002" + }, + { + "name": "Chat: Manga", + "desc": "Duke K is strong… Duke K also breaks things and gets scolded by others… just like Lacrimosa.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_chat_003" + }, + { + "name": "Sunny", + "desc": "The sun… bright… Lacrimosa… going blind…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_weather_001" + }, + { + "name": "Rainy", + "desc": "It's raining. Drip, drop… so sleepy…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_weather_002" + }, + { + "name": "Cold", + "desc": "So cold… Lacrimosa… going to get bundled up again… Hm? You know… hats, gloves, scarves… fuzzy and warm…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_weather_003" + }, + { + "name": "Hot", + "desc": "Ice cream… melting… Lacrimosa… melting…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Appraiser, good morning. Lacrimosa, bad morning… Work, annoying.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Work… many… Lacrimosa… hungry…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "The sun… looks like a tomato. Round. Bright. How would it taste…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_greet_003" + }, + { + "name": "Good Night", + "desc": "The sky is dark… Goodnight, appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_greet_004" + }, + { + "name": "Hobbies", + "desc": "What do Lacrimosa like…? Hmm, being home alone is the best. No work, all sleep. When get up, Lacrimosa can eat tomato jelly, and read \"Weekly Fantasy\" until Lacrimosa get sleepy… Lacrimosa like that. Hmm… Can Lacrimosa go home now?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_hobby_001" + }, + { + "name": "Worries", + "desc": "Baicang, troublemaker, Skia gets mad. Fadia, not helping, and then it gets noisier and noisier… Lacrimosa told them, \"Be kind… to the doggo…\" Baicang and Fadia laughed louder… Lacrimosa don't understand.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_vexation_001" + }, + { + "name": "Topic: Anomalies", + "desc": "Lacrimosa, avoid the sun. But Lacrimosa like how the sun smells… Fluffy always sunbathes and smells nice. Lacrimosa like Fluffy. Sleeping with Fluffy makes Lacrimosa happy…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_talk_001" + }, + { + "name": "Topic: Tomato Timer", + "desc": "There is this… \"tomato timer\"… and Lacrimosa wanted a taste… Doggo said, the tomato timer is not for eating… it is for working, splitting time into tomatoes… \"one tomato, two tomatoes…\"\nTomatoes… not eaten, but for work… Poor tomato, bad human.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_talk_002" + }, + { + "name": "Topic: Lost Items", + "desc": "Where is… Lacrimosa's… ID card…? Oh… Behind… Flipped. Thank you, appraiser…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "Lacrimosa's Esper Ability… Like this… turn it into something solid, crush the bad anomaly flat, and then sleep…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_self_001" + }, + { + "name": "About Myself: Destruction", + "desc": "Glass… Lacrimosa's enemy. Lacrimosa, always run into glass. Lizard guy said, um, replaced the glass, in the bureau. Glass, doesn't break. Lacrimosa, get hurt.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_self_002" + }, + { + "name": "About Myself: Being Picky", + "desc": "Tomatoes… Lacrimosa like tomatoes… One day, Lacrimosa will wake up from a tomato bed, and live life in a tomato castle. Other food, not needed… Maybe ice cream can stay.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_self_003" + }, + { + "name": "About Alphard", + "desc": "Director, cold, snake eyes. Director comes, work comes. Lacrimosa, not happy… but doggo says, don't make director angry.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_001" + }, + { + "name": "About Baicang", + "desc": "Work… glass… Baicang… bad…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_002" + }, + { + "name": "About Fadia", + "desc": "Fadia, never rushes Lacrimosa to work… good… Fadia, always pinch Lacrimosa on cheeks… bad…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_003" + }, + { + "name": "About Skia", + "desc": "Doggo… fluffy, nice to touch… tall, walks fast, can't keep up… but doggo crouches down when talking to Lacrimosa, so no need to look up… doggo, good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_004" + }, + { + "name": "About Mint", + "desc": "Mint… always shining, easy to see… always gives the biggest hugs… warm…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_005" + }, + { + "name": "About Haniel", + "desc": "\"Net Friend With A Long Name\" likes \"Duke K\" too… following updates, together, fun. But.. never met in person… Lacrimosa went to see \"Net Friend With A Long Name\" once, but failed. Lacrimosa, went out on the wrong day…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_006" + }, + { + "name": "About Bureau of Anomaly Control", + "desc": "Cafeteria, out of tomato jelly, not good… but the vending machine has jelly. Lacrimosa won't go hungry… Oh, and the sofa is really comfy. It's soft… Lacrimosa can sleep on it. But can't get caught.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_007" + }, + { + "name": "About ETD", + "desc": "ETD… busy. Doggo… meetings. Baicang… chaos. Fadia… \"making friends\". Lacrimosa… sleeping…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_about_008" + }, + { + "name": "Character Ascension I", + "desc": "Lacrimosa… had a nice dream.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Lacrimosa, stronger now. Happy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Lacrimosa, improved?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Lacrimosa… love, love, love it. Thank you, Appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Wow… Appraiser, genius of, sending gifts.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_gift_002" + }, + { + "name": "Gift Received III", + "desc": "For Lacrimosa…? Thanks…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "The gift, Lacrimosa, will treasure.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Achoo!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Go.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Don't run.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_skill_003" + }, + { + "name": "Redirect Skill IV", + "desc": "Lacrimosa… can do this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_skill_mon_01" + }, + { + "name": "Redirect Skill V", + "desc": "Hmm.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_skill_mon_02" + }, + { + "name": "Redirect Skill VI", + "desc": "Mm, it's you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_skill_mon_03" + }, + { + "name": "Ultimate I", + "desc": "…Stay there.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "…Lacrimosa, angry.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Let's all go home early today…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Yawn… Leave, home, bed, sleep…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_containment_001" + }, + { + "name": "Containment II", + "desc": "Anomaly. Be good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_containment_002" + }, + { + "name": "Nullification I", + "desc": "Ah, it's gone.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "It's over. Bye bye.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Uwa. What's that…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "…Hm? Who dropped this?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Found something… Ah, better give it to the team.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Can't… throw things around.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Seems… useful?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Lacrimosa, found something shiny…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Sleepy… bed…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_hp_001" + }, + { + "name": "Low Health II", + "desc": "Lacrimosa, tired…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_hp_002" + }, + { + "name": "Low Health III", + "desc": "Lacrimosa, want to rest a bit. Just a bit…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_hp_003" + }, + { + "name": "Heal I", + "desc": "Hmm… break time's over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_fh_001" + }, + { + "name": "Heal II", + "desc": "Lacrimosa, feeling energetic…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_fh_002" + }, + { + "name": "Down I", + "desc": "…Lacrimosa, falling asleep…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_dead_001" + }, + { + "name": "Down II", + "desc": "…Eyes, can't open…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_dead_002" + }, + { + "name": "Down III", + "desc": "Wake Lacrimosa up… later…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_dead_003" + }, + { + "name": "Takedown I", + "desc": "…Weird thing, fell asleep.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_kill_001" + }, + { + "name": "Takedown II", + "desc": "It's quiet now…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_kill_002" + }, + { + "name": "Damaged I", + "desc": "Ah. That hurts…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_struck_001" + }, + { + "name": "Damaged II", + "desc": "Forgot to dodge…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Ugh… it hurts…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Uggh…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "…Get this done and get home.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_deploy_002" + }, + { + "name": "Deploy II", + "desc": "Is bedtime over…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Lacrimosa, helping.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Mm… on time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Lacrimosa, very strong.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_QTE_003" + }, + { + "name": "Glide I", + "desc": "Be careful… glass.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_Fly_001" + }, + { + "name": "Glide II", + "desc": "No wings… so easy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_Fly_002" + }, + { + "name": "Switch I", + "desc": "…Leave it to Lacrimosa.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_Switch_001" + }, + { + "name": "Switch II", + "desc": "Lacrimosa, can handle it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_Switch_002" + }, + { + "name": "Switch III", + "desc": "Shift change… go rest now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_Switch_003" + }, + { + "name": "Special Switch - Baicang", + "desc": "Baicang, be careful.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_SSC_001" + }, + { + "name": "Special Switch - Skia", + "desc": "Doggo, need help?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_SSC_002" + }, + { + "name": "Special Switch - Fadia", + "desc": "Fadia's \"friends,\" no fun.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_SSC_003" + }, + { + "name": "Special Switch - Mint", + "desc": "Don't… bully Mint.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_SSC_004" + }, + { + "name": "Teammate Down - Baicang", + "desc": "Baicang, can't sleep yet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_TeammateDown_001" + }, + { + "name": "Teammate Down - Skia", + "desc": "Doggo, hurt?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_TeammateDown_002" + }, + { + "name": "Teammate Down - Fadia", + "desc": "Fadia, tired from playing?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_TeammateDown_003" + }, + { + "name": "Teammate Down - Mint", + "desc": "Mint… looks very tired, go rest now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_TeammateDown_004" + }, + { + "name": "Parry I", + "desc": "Right now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_Parry_001" + }, + { + "name": "Parry II", + "desc": "Lacrimosa, won't lose.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Phew, dodged them all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Lacrimosa… faster.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC004/Play_Vo_Char_NPC004_DodgeCombo_002" + } + ] + } + }, + { + "id": "1008", + "name": "Skia", + "description": "Often mistaken for Squad 4's captain, despite being the lieutenant.", + "element": [ + { + "element_id": "Lakshana", + "name": "Lakshana" + } + ], + "rarity": 4, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_008", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_008x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_008_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_langren", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + } + ], + "arcs_tags": { + "type_id": "4", + "name": "Gas", + "icon": "/Game/UI/UI/player/YH_UI_icon_gas" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Stain", + "desc": "Increases the target's <bule>Psyche and Lakshana DMG</> taken by <NumGreen>20%</> for <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1008_0", + "characterId": "1008", + "name": "Working Hours", + "desc": "A practical outfit inspired by a suit design, modified for easier movement. Although Skia has left his former company, he's still accustomed to dressing this way.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_008", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_008_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_yi", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_yi", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1100, + 1188, + 1276, + 1364, + 1452, + 1540, + 1628, + 1716, + 1804, + 1892, + 1980, + 2068, + 2156, + 2244, + 2332, + 2420, + 2508, + 2596, + 2684, + 2772, + 2860, + 2948, + 3036, + 3124, + 3212, + 3300, + 3388, + 3476, + 3564, + 3652, + 3740, + 3828, + 3916, + 4004, + 4092, + 4180, + 4268, + 4356, + 4444, + 4532, + 4620, + 4708, + 4796, + 4884, + 4972, + 5060, + 5148, + 5236, + 5324, + 5412, + 5500, + 5588, + 5676, + 5764, + 5852, + 5940, + 6028, + 6116, + 6204, + 6292, + 6380, + 6468, + 6556, + 6644, + 6732, + 6820, + 6908, + 6996, + 7084, + 7172, + 7260, + 7348, + 7436, + 7524, + 7612, + 7700, + 7788, + 7876, + 7964, + 8052 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 70, + 74, + 77, + 81, + 84, + 88, + 91, + 95, + 98, + 102, + 105, + 109, + 112, + 116, + 119, + 123, + 126, + 130, + 133, + 137, + 140, + 144, + 147, + 151, + 154, + 158, + 161, + 165, + 168, + 172, + 175, + 179, + 182, + 186, + 189, + 193, + 196, + 200, + 203, + 207, + 210, + 214, + 217, + 221, + 224, + 228, + 231, + 235, + 238, + 242, + 245, + 249, + 252, + 256, + 259, + 263, + 266, + 270, + 273, + 277, + 280, + 284, + 287, + 291, + 294, + 298, + 301, + 305, + 308, + 312, + 315, + 319, + 322, + 326, + 329, + 333, + 336, + 340, + 343, + 347 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 55, + 59, + 64, + 68, + 73, + 77, + 81, + 86, + 90, + 95, + 99, + 103, + 108, + 112, + 117, + 121, + 125, + 130, + 134, + 139, + 143, + 147, + 152, + 156, + 161, + 165, + 169, + 174, + 178, + 183, + 187, + 191, + 196, + 200, + 205, + 209, + 213, + 218, + 222, + 227, + 231, + 235, + 240, + 244, + 249, + 253, + 257, + 262, + 266, + 271, + 275, + 279, + 284, + 288, + 293, + 297, + 301, + 306, + 310, + 315, + 319, + 323, + 328, + 332, + 337, + 341, + 345, + 350, + 354, + 359, + 363, + 367, + 372, + 376, + 381, + 385, + 389, + 394, + 398, + 403 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "ETD-4, Lieutenant", + "description": "Skia's first positive impression of the Bureau occurred when he was updating his resume.\nHe decided to give the job at the Bureau a try when he was invited to apply, but the formality of a resume was still required. Since leaving his previous job, he hadn't bothered to think of resumes and job applications… Now, he had no choice but to polish up his old resume.\n He uploaded a new ID photo, replacing the original one—he nearly didn't recognize the young man in the portrait anymore—then clicked submit.\n —This is usually where the systems tell him \"face not detected, please upload an appropriate portrait\" and what not. Strangely, the file was submitted without issue.\n Skia let out a quiet sigh of relief. Although he had long since stopped caring about facing prejudice based on his looks, having to make an extra trip to compensate for system inadequacies and disrupting his established workflow… that would have been truly intolerable.", + "birthday": "January 10", + "homePlace": "Bureau of Anomaly Control, ETD-4", + "abilityName": "Faust", + "introduction": "Often mistaken for Squad 4's captain, despite being the lieutenant.", + "voiceChinese": "刘雨轩", + "voiceEnglish": "Bill Butts", + "voiceJapanese": "杉田智和", + "voiceKorean": "이동훈" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Skia's name had once been praised by his old colleagues as having \"quite the martial artist's spirit.\" Skia didn't care much for the supposed depth of his name. But he found quiet satisfaction in the act of writing it—each letter placed with purpose, each curve and line falling into place. It was neat, orderly, and well arranged. Just the way he liked.\nHowever, whenever he signed his name with too much force, that scene would always reappear in his mind… That day when he signed his employment contract at his ex-company.\nFor that job, he completely embraced all the workplace etiquette his colleagues believed in as \"standard practice,\" never questioning any of it. This included things like specialized signature training to leave clients with an elite impression.\nIt made perfect sense, really—if all it took to preserve one's dignity was to follow a visible, rigid set of rules, then the cost was laughably low for the rewards.\n\nAs for his current signature… the overall form remained rigorous, but a closer look revealed slightly hurried connecting strokes.\nHad he stopped caring about these surface details? Had taking too much time off made him sloppy? Or perhaps it was the pressure from too many emergency missions piling up with all the cleanup…\n\nThings weren't done the way he wanted. He felt he was the only one willing to maintain the system. Well… there was nothing he could do about that.\nDespite that, he gradually got used to working at the BAC. And… how should he put it? He didn't mind the sincere jokes of his teammates.\n\nOn the other hand, there was a new cafeteria lady at the Bureau who was particularly enthusiastic about Skia.\nWhen serving him food, though Skia hadn't said anything, she would ladle several extra bone-in ribs, then casually speak to another female staff member about how her son also likes chewing on those ribs.\nThe other woman lowered her voice, sounding embarrassed. \"He… he's not an Oddity! He's the lieutenant from ETD-4!\"\nSkia quietly stared at the perfectly balanced, almost strict meal composition, topped with those extra bone-in ribs… then picked up his tray and walked away. In the end, he never asked about the \"breed\" of the lady's son." + }, + { + "name": "Office", + "desc": "At Leon International, Skia embodied the role of a regular office worker and was naturally suited for that kind of life.\nIn modern civilized society, the fact that awakening Esper Abilities could change physical appearance was already common knowledge. His transformation was indeed dramatic, and just one look gave him a worse shock than any he'd experienced in five years of work… but once he calmed down, there was nothing he couldn't rationalize. After all, it wasn't a job that depended on looks, so it shouldn't break his routine…\nThe truth was, his routine wasn't determined by his own mindset.\nBack then, he'd stood up in the meeting room, unable to bear it any longer, forcing himself to remain polite as he asked why the projects he'd always handled weren't even going through him for reports anymore.\nSitting among the well-dressed elites around him, someone wrinkled their eyes forcefully. Skia later realized it was the kind of motion… like trying to squeeze out some murky substance that had fallen into their eye.\nAs the meeting adjourned, Skia raised his gaze, looking past the cracks in his self-imposed mask that he was forced to reexamine, his eyes meeting the massive silhouette in the center of the projection screen that rose with his standing figure.\nDoes he look like a monster to others?\nWell, at least the price of gaining the Esper Ability's wasn't too high. Now he was a regular office worker in every way except appearance." + }, + { + "name": "Resignation", + "desc": "\"It's like being a frog slowly boiled alive…\"\nWhile drinking, the man on his left complained to the bartender about his predicament. The man was troubled, trapped in a state where every fiber of his being couldn't relax due to workplace pressure. If he wanted to escape, he'd inevitably face brutal consequences. The man was deeply conflicted about this.\n\"Next time I see you here, I hope you won't be sipping your drink with such restraint… You can only break free if you break down completely for once. You don't cure alcohol by drinking a cure. You simply throw up.\"\nThe man sitting on his right, with a menacing aura and face of scars, responded across the space. His deliberate, unhurried way of speaking, which contrasted sharply with his appearance, caught Skia's attention.\nBecoming friends with that person marked the beginning of Skia realizing that he had the ability to build a routine wherever he was.\nIf on that chaotic and dangerous path, there were rules, order, and clear objectives, then perhaps…" + }, + { + "name": "Canine", + "desc": "The imposing black hound poked its head out from the hole carved by the lighter's flame, keeping watch. Once it discovered the lighter had been replaced, its ears flattened, showing signs of dejection.\n\"Did the hound really prefer the original lighter?\" Skia wondered. But giving an explanation like \"I'm not switching back because that one had my ex-company's logo\" seemed foolish, inefficient, and overly formal… Communication with his own Esper Ability should done internally. After all, the ability was a reflection of himself.\nThe issue was shelved, and the final result was a naturally acceptance of this current form." + }, + { + "name": "Caffeine", + "desc": "A specialty coffee available for order from Ms. Fei.\nCompared to the golden ratio morning coffee that Skia's ex-company mandated at 8:00 AM daily, this had… 3 extra sugar cubes, 25 ml extra milk, and… other ingredients that shouldn't appear in coffee. As for the coffee beans' origin… Well, perhaps it's from a different dimension. That was about the best way to describe the drink.\nThe coffee poured from Ms. Fei's head wasn't exactly brewed. The recipe isn't something one can expect—one had to taste it. But back then, Skia still tried to describe the drink with precise words.\nMs. Fei said she named the coffee after seeing Skia react to coffee she served him after he joined the BAC—it was as if he never had a real cup of coffee before. The look on his face was a mix of surprise and bewilderment, making it impossible to tell whether he was thinking it was absolutely delicious! or utterly awful!\nMs. Fei gave up asking about his preferences, and the long sigh that followed was enough to sum up all his thoughts." + }, + { + "name": "Order", + "desc": "If you ever eavesdrop on JTF members, you'd discover that Skia has quite a high reputation among them for being reliable, competent, and reasonable. They'd say that he has no weird temper and no strange hobbies, as well as other great qualities many of his colleagues lack!\n\"There are too many difficult people over there, honestly it's pretty scary. But working with Lieutenant Skia is incredibly easy. He's steady and skilled, he knows what documents I need to hand over better than I do. It's like he's been working for twenty years…\"\n \"Oh man, Skia has it so tough. He's bears burdens alone; he acts as the only pillar of order in group of weirdos; he's the sole boat stubbornly sailing against the current; he struggles to impose procedures amid a raging tide of individualism…\"\nTheir analysis of his role and development prospects in ETD… somehow has a bitter aftertaste." + } + ], + "melee": [ + { + "id": "GA_Skia_Melee", + "name": "Arresting Art", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Arresting Art</>", + "<Title>Basic Attack: Territory Control</>", + "<Title>Fang Thrust</>", + "<Title>Critical Riposte: Pen to Paper</>" + ], + "desc": [ + "Performs up to <NumGreen>5</> consecutive attacks using steady martial arts techniques, dealing <Xiang>Lakshana DMG</>.\r\nSplits <NumGreen>1</> <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> from his shadow to pursue <NumGreen>each</> target hit. Locks each target with up to <NumGreen>3</> <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrusts</> simultaneously.", + "Strikes in the air and plunges, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Splitting from Skia's shadow, these shattered shadows resemble the fangs of a giant beast. They automatically track and <hot textstyle=\"TextEXPL\" param=\"nouns&attach\">attach</> to targets, disappearing after dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</>.", + "Triggers when using Arresting Art after a Critical Dodge. Strikes enemies with ink-splash shadows, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area and reducing Break." + ], + "desc_short": [ + "Deals <Xiang>Lakshana DMG</>. Inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> on a target when hit, allowing up to 3 per target.", + "Deals <Xiang>Lakshana DMG</>.", + "Deals 1 instance of <Xiang>Lakshana DMG</> then disappears.", + "Deals <Xiang>Lakshana DMG</>." + ], + "context": "<Italic>\"The doggo… This dark stuff comes out with doggo punches… pretty impressive.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Skia_Melee", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + }, + { + "name": "Attach", + "desc": "Certain skills can apply Attachments to targets. Attachments automatically detach after dealing 1 instance of DMG to the target." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Skia_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 60, + 65, + 70, + 76 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%*2+{1}%", + "values": [ + [ + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6, + 6, + 7, + 8, + 8, + 9 + ], + [ + 18, + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35, + 37, + 40, + 44, + 47 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_Melee5_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 55, + 59, + 64, + 69, + 74, + 80 + ], + [ + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 85, + 91, + 99, + 107, + 115 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_Melee7_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_Melee8_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74 + ], + [ + 55, + 59, + 64, + 69, + 75, + 81, + 87, + 94, + 102, + 110, + 119, + 129, + 139 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_ShadowAtk_Damage", + "name": "Fang Thrust DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 10, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 20, + 21, + 23, + 25 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 208, + 224, + 242, + 262, + 283, + 305, + 330, + 356, + 385, + 415, + 449, + 484, + 523 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Skia_Skill", + "name": "Shadow Hound Chase", + "type_name": "Redirect Skill", + "desc": "A workflow designed for pursuit. Enters the <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill1\">Tailed</> state, leaps into own shadow, and deals <NumGreen>6</> instances of <Xiang>Lakshana DMG</> to an area. Splits 3 <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrusts</> from shadow for each target hit, then enters <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill2\">Shadow Hound Gnaw</> mode.\r\n\r\n<hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill1\">Tailed</>\r\nPrevents <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrusts</> from disappearing after dealing damage to targets during the state.\r\n\r\n<hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill2\">Shadow Hound Gnaw</>\r\nAllows movement on ground or wall surfaces, similar to Shadow Hound mode.\r\nRemains undetected when approaching enemy targets.\r\nGrants immunity to certain attacks, but cancels the mode when hit by ground damage.\r\nTriggers additional attacks from <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrusts</> whenever touching an enemy already marked by <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">them</>.\r\nPress Basic Attack or switch characters to exit this mode during its duration.\r\nMoves forward at the edge of a high place to end this mode.\r\nDeals <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area upon exiting the mode.", + "desc_short": "Deals <Xiang>Lakshana DMG</> and enters <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill1\">Tailed</> state. Applies 3 <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrusts</> to the target on hit, then enters <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill2\">Shadow Hound Gnaw</>.\r\n\r\n<hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill1\">Tailed</>\r\nPrevents <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrusts</> from disappearing after dealing damage to targets during the state.\r\n\r\n<hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill2\">Shadow Hound Gnaw</>\r\nRemoves this state when hit by ground damage. Launches 1 additional attack from <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrusts</> when touching a target marked by <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">them</>. Press Basic Attack or switch characters during the duration to exit this mode and deal 1 instance of <Xiang>Lakshana DMG</>.", + "context": "<Italic>Some nimble troublemakers might think they can escape ETD's pursuit… They should check what's lurking beneath their feet.</>", + "icon": "/Game/UI/UI_Icon/Skill/Skia_Skill", + "additional_desc": [ + { + "name": "Tailed", + "desc": "Enters this state when casting a Skill. Prevents <TextEXPL>Fang Thrust</> from disappearing after dealing damage to targets during the state." + }, + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + }, + { + "name": "Shadow Hound Gnaw", + "desc": "Deals additional <Xiang>Lakshana DMG</> when touching targets marked by <TextEXPL>Fang Thrust</>. Deals <Xiang>Lakshana DMG</> to hit targets upon exiting." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Skia_Skill1_Damage", + "name": "Quad Strike DMG Ratio", + "icon": "", + "value_name": "{0}% *4", + "values": [ + [ + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 69, + 75 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_Skill2_Damage", + "name": "Dive DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 4, + 5, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 9, + 9, + 10, + 11 + ], + [ + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 54, + 59, + 64 + ] + ] + }, + { + "name": "Tailed Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_SkillShadowAtk_Damage", + "name": "Fang Thrust Extra DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 55, + 59, + 64, + 69, + 74, + 80, + 87, + 94, + 101, + 109, + 118, + 128, + 138 + ] + ] + }, + { + "name": "Fang Thrust Extra DMG Interval", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35, + 0.35 + ] + ] + }, + { + "name": "Shadow Hound Gnaw Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_Evade1_Damage", + "name": "Shadow Hound Gnaw Outro DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 107, + 116, + 125 + ] + ] + }, + { + "id_stats": "GA_Skia_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Skia_UltraSkill", + "name": "The Pack", + "type_name": "Ultimate", + "desc": "A workflow designed for suppression. Throws a spinning lighter, causing his shadow to spread across the ground in all directions, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area.\r\nConverges multiple shadows on a single location like well-trained canines, dealing <NumGreen>3</> instances of <Xiang>Lakshana DMG</> to an area.\r\nIncreases <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</>'s damage after casting The Pack (including collision damage in <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill2\">Shadow Hound Gnaw</> mode) and inflicts a control effect on targets with each attack.", + "desc_short": "Deals <Xiang>Lakshana DMG</>.\r\n\r\nAfter casting, <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</>'s damage is increased, and applies a control effect on each hit.", + "context": "<Italic>The consequences of \"non-compliance.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Skia_UltraSkill", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + }, + { + "name": "Shadow Hound Gnaw", + "desc": "Deals additional <Xiang>Lakshana DMG</> when touching targets marked by <TextEXPL>Fang Thrust</>. Deals <Xiang>Lakshana DMG</> to hit targets upon exiting." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Skia_UltraSkill1_Damage", + "name": "Spread DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 290, + 313, + 338, + 365, + 394, + 426, + 460, + 497, + 537, + 580, + 626, + 676, + 730 + ] + ] + }, + { + "id_stats": "GE_Player_Skia_UltraSkill2_Damage", + "name": "Converge DMG Ratio", + "icon": "", + "value_name": "{0}%*3", + "values": [ + [ + 69, + 75, + 81, + 88, + 95, + 102, + 110, + 119, + 129, + 139, + 150, + 163, + 176 + ] + ] + }, + { + "name": "Fang Thrust DMG Up", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "name": "DMG Increase Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Fang Thrust Control Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75, + 0.75 + ] + ] + }, + { + "id_stats": "GA_Skia_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Skia_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Skia_QTE", + "name": "Arrest Warrant", + "type_name": "Support Skill", + "desc": "The relentless shadows cannot be shaken off. Commands the shadow like a police canine to bite the target, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area.", + "icon": "/Game/UI/UI_Icon/Skill/Skia_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Skia_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Skia_Passive_1", + "name": "Suppression", + "type_name": "Passive Skill", + "desc": "<TextHLT>Remora Enhancement</>: Inflicts an additional Remora on a target when <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> locks onto them in Remora state.", + "context": "<Italic>Usually, there's no need for physical intervention—Skia can subdue targets with just his shadows, keeping facilities undamaged. Plus, he helps with cleanup… According to a BAC cafeteria survey, 84% of staff welcome Skia at their work site—less hassle for them!</>", + "icon": "/Game/UI/UI_Icon/Skill/Skia_Pas1", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Skia_Passive_2", + "name": "Apprehension", + "type_name": "Passive Skill", + "desc": "Increases <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> damage by <NumGreen>10%</> for <NumGreen>15s</> after casting The Pack, including collision damage in <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill2\">Shadow Hound Gnaw</> mode.", + "context": "<Italic>Your body might be free to move, but your shadow is held in an iron grip, rendering you immobile… Quite the peculiar sensation.</>", + "icon": "/Game/UI/UI_Icon/Skill/Skia_Pas2", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + }, + { + "name": "Shadow Hound Gnaw", + "desc": "Deals additional <Xiang>Lakshana DMG</> when touching targets marked by <TextEXPL>Fang Thrust</>. Deals <Xiang>Lakshana DMG</> to hit targets upon exiting." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_skia_01", + "name": "Middle Manager", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_zcgl", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Skia increases traffic by <Green2>18</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Skia reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, customer patience is boosted by <Green2>50%</>." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Skia reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Skia increases traffic by <Green2>27</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Process of Elimination", + "desc": "Increses the auto-attack DMG Ratio for <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> by <NumGreen>60%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1008_1", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + } + ] + }, + { + "name": "Law and Order", + "desc": "Increases Skia's Crit Chance by <NumGreen>10%</> and Resistance to Interruptions by <NumGreen>50%</> for <NumGreen>15s</> after casting Shadow Hound Chase.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1008_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Solution", + "desc": "Skia's damage to targets locked by <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> is increased by <NumGreen>4%</>.\r\nIf only one target is locked onto by <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> on the field, Skia's damage to it is further increased by <NumGreen>4%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1008_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + } + ] + }, + { + "name": "Resolution", + "desc": "Extends the duration of <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill1\">Tailed</> to <NumGreen>12s</>. Increases Attachment DMG by 2% per second a target is <hot textstyle=\"TextEXPL\" param=\"nouns&attach\">attached</>, up to 40%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1008_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Tailed", + "desc": "Enters this state when casting a Skill. Prevents <TextEXPL>Fang Thrust</> from disappearing after dealing damage to targets during the state." + }, + { + "name": "Attach", + "desc": "Certain skills can apply Attachments to targets. Attachments automatically detach after dealing 1 instance of DMG to the target." + } + ] + }, + { + "name": "Social Contract", + "desc": "Increases the target's mass by <NumGreen>50</> and reduces its Movement Speed by <NumGreen>20%</> for each <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> locked onto it.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1008_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + } + ] + }, + { + "name": "Unbothered Appearance", + "desc": "Increases the Extra DMG Ratio of <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</> by <NumGreen>20%</> while in <hot textstyle=\"TextEXPL\" param=\"nouns&skiaskill2\">Shadow Hound Gnaw</> mode when touching an enemy locked onto by <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1008_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Shadow Hound Gnaw", + "desc": "Deals additional <Xiang>Lakshana DMG</> when touching targets marked by <TextEXPL>Fang Thrust</>. Deals <Xiang>Lakshana DMG</> to hit targets upon exiting." + }, + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + } + ] + } + ], + "resonance": [ + { + "name": "Cubical Survival Manual", + "desc": "Increases the skill level of Arresting Art, Shadow Hound Chase, and The Pack by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Employee of the Month", + "desc": "Reduces the locked-on target's Lakshana Resistance by 2% per <hot textstyle=\"TextEXPL\" param=\"nouns&skiamelee1\">Fang Thrust</>, up to 6%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [ + { + "name": "Fang Thrust", + "desc": "A state applied to targets on hit, up to 3 stacks. Disappears after dealing damage to the target." + } + ] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1008/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + -1, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_018", + "amount": 100 + }, + { + "item_id": "Food_045", + "amount": 100 + }, + { + "item_id": "Food_062", + "amount": 100 + }, + { + "item_id": "SmallPoster002", + "amount": 200 + }, + { + "item_id": "SmallPoster005", + "amount": 200 + }, + { + "item_id": "SmallPoster006", + "amount": 200 + }, + { + "item_id": "Furniture_Light_007", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1008" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial", + "Furniture_draw_0035_KV_solo" + ], + "amount": [ + 20, + 5, + 1 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1008" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1008" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1008" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1008" + ], + "amount": [ + 50000, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Lieutenant Skia, Squad 4, Enforcement Tactical Division. Perhaps we might meet at work again in the future.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_meet_001" + }, + { + "name": "Chat: Work Environment", + "desc": "Whether in studies or work, everyone is deeply influenced by their environment and unconsciously becomes part of it—it goes both ways.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_chat_001" + }, + { + "name": "Chat: Pace of Life", + "desc": "You came to this city without any prior knowledge or preparation, so I imagine Eibon will shape your life here. What do you think? Is this life for you?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_chat_002" + }, + { + "name": "Chat: Meeting", + "desc": "If you see Baicang, could you please ask him to reply to my message as soon as possible? I've organized the meeting minutes he missed and sent them to his phone. We need him to GO THROUGH them by today.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_chat_003" + }, + { + "name": "Sunny", + "desc": "When the sun is directly overhead, it's harder for my shadow to spread from beneath my feet. However… within short distances, the condensed and distinct shadow packs a way stronger punch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_weather_001" + }, + { + "name": "Rainy", + "desc": "The humid weather will significantly impact outdoor operations, and it's not just about slippery surfaces. Make sure to watch out for anomalies that adapt their patterns based on weather changes.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_weather_002" + }, + { + "name": "Cold", + "desc": "I'm not cold… but don't count on me as a heat source.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_weather_003" + }, + { + "name": "Hot", + "desc": "This weather makes me irritable, but I'm not a dog—you won't catch me panting to cool down!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning. Where should we start today?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "The food at the Bureau's cafeteria is neither good nor bad. The orderly queuing and dining system is certainly efficient, but it's only natural to get tired of eating there every day.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "ETD doesn't have fixed off-duty hours—we're expected to be ready for deployment at any time. Don't hesitate to call me whenever something comes up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_greet_003" + }, + { + "name": "Good Night", + "desc": "You've worked hard today. Get some rest.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_greet_004" + }, + { + "name": "Hobbies", + "desc": "It's hard to say I have any particular hobbies. If I had to choose, I suppose I prefer… the feeling of seeing all my tasks progressing steadily toward completion.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_hobby_001" + }, + { + "name": "Worries", + "desc": "Troubles? …With Baicang or Fadia? …Well, it's understandable that Lacrimosa acts out sometimes and causes minor disturbances… But those two are adults slacking off and causing problems. It's hard not to get a headache from it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_vexation_001" + }, + { + "name": "Topic: Anomaly - Ms. Fei", + "desc": "Ms. Fei's coffee has… a unique flavor, but it keeps you alert. I don't mind it. She gets upset if we brew tea at our desks, so we have to go outside for that.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_talk_001" + }, + { + "name": "Topic: Anomaly - Agent.LUCK", + "desc": "Agent.LUCK handles all the paperwork nobody else at the Bureau wants to do. Tedious and endless as it may be. It persists in the belief that its master will return home once everything is complete… Watching it work diligently reminds me of that staff member who vanished into the lights and remains missing to this day, and of all the unresolved cases we still haven't found a way to tackle…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_talk_002" + }, + { + "name": "Topic: Resume", + "desc": "Yes, I worked for quite a while at a company… one you might have heard of. Then I spent some time working with some outlaws, and now I serve in a public institution. Some say my resume is rather unusual, but looking back, perhaps it was all just trial and error in search of where I belong.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "Are you wondering why my shadow seems to have a different temperament from me, even though I'm the one controlling it…? It might be a bit abstract to explain. Let's just say that after awakening my Esper Ability, and as I gained a deeper understanding of my role, I realized I didn't need to maintain a tense facade all the time. That's when my shadow started appearing more energetic than before.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_self_001" + }, + { + "name": "About Myself: Animorphic", + "desc": "It's quite common for Esper ability awakenings to come with transfer characteristics, but as you can see, my physical transformation is far more severe than most. That day, I tried my best to stay calm, attempting to maintain my usual routine with rationality and courtesy. But inevitably, I lost my place among the usual \"elites\"… I suppose that was the \"price\" I had to pay.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_self_002" + }, + { + "name": "About Myself: \"Elite\"", + "desc": "After that, I did go through a period where it felt like the foundation I'd built my life on had crumbled… But it's fine now—I've long since stopped caring about that job and the standards it set for me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_self_003" + }, + { + "name": "About Alphard", + "desc": "The director is a leader of great resolve. However, she doesn't particularly mind how her subordinates conduct themselves, rather focusing solely on results… Perhaps that's why the ETD can afford to be so lenient with its many free spirits…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_about_001" + }, + { + "name": "About Baicang", + "desc": "When Baicang says he's \"exhausted\", \"done for\", or \"gravely injured\"… don't waste your energy on him… If he speaks, he's alive enough. Talking from experience.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_about_002" + }, + { + "name": "About Fadia", + "desc": "One time… field duty with Fadia… I ran into an old acquaintance from the past. We chatted for a bit… the guy asked me if \"I am working an honest job or not\"… Thinking about how colleagues' public image can greatly influence others' perception of the workplace and the job… I'm tired of this…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_about_003" + }, + { + "name": "About Lacrimosa", + "desc": "If I don't pick up Lacrimosa or meet her early… she might not even be allowed on site because she doesn't have her ID. Compared to that, oversleeping or getting lost are very minor concerns.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_about_004" + }, + { + "name": "About Bureau of Anomaly Control", + "desc": "I used to think the ideal path for me was a stable management position in a large corporation, living a perfectly ordered life. I never imagined I'd get involved with an organization like the bureau that handles emergencies. Life is unpredictable—a series of unexpected turns brought me here, and now this daily routine of handling the unexpected has gradually become my new sense of order…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_about_005" + }, + { + "name": "About ETD", + "desc": "In the past, I would have had little tolerance for subordinates who lacked team spirit or were too much of an individual. But now, here… those who can't accept working with such spirits are probably the ones who don't fit in.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_about_006" + }, + { + "name": "Character Ascension I", + "desc": "Feeling smooth.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Steady and methodical.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "You can always learn something new on the job.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_ug_003" + }, + { + "name": "Gift Received I", + "desc": "A practical, appropriate, and thoughtful gift. Thank you, Appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_gift_001" + }, + { + "name": "Gift Received II", + "desc": "I've been too busy from work to buy this. I didn't expect you to get it for me…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_gift_002" + }, + { + "name": "Gift Received III", + "desc": "I understand. This is all part of maintaining good relationships. Thanks.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I'll remember your gift and repay in kind.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Stand down!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Take this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Stay out of trouble!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Suppress the target!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "All in a day's work!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Time to take a harder approach.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "All done. The CSU will take it from here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_containment_001" + }, + { + "name": "Containment II", + "desc": "I'll help with the clean-up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_containment_002" + }, + { + "name": "Nullification I", + "desc": "Hmph, not the easiest pill to swallow.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_anomaly_002" + }, + { + "name": "Nullification II", + "desc": "Target neutralized.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_anomaly_003" + }, + { + "name": "Unexpected Gains I", + "desc": "An unexpected discovery.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Let logistics handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Let's check if it's safe first.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "…Worth the effort.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "I'll hold onto this for now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "An unexpected gain.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_windfall_006" + }, + { + "name": "Low Health I", + "desc": "This is getting outta hand…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_hp_001" + }, + { + "name": "Low Health II", + "desc": "Where's our backup?!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_hp_002" + }, + { + "name": "Low Health III", + "desc": "…Stay calm. There's still a chance.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_hp_003" + }, + { + "name": "Heal I", + "desc": "Just in time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_fh_001" + }, + { + "name": "Heal II", + "desc": "Thanks for the help.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_fh_002" + }, + { + "name": "Down I", + "desc": "Ugh… I'm sorry.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_dead_001" + }, + { + "name": "Down II", + "desc": "Beyond my capabilities…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_dead_002" + }, + { + "name": "Down III", + "desc": "Team… fall back…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_dead_003" + }, + { + "name": "Takedown I", + "desc": "I'll help with the clean-up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_kill_001" + }, + { + "name": "Takedown II", + "desc": "Slow and steady.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_kill_002" + }, + { + "name": "Damaged I", + "desc": "Just a graze.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_struck_001" + }, + { + "name": "Damaged II", + "desc": "Nothing worth mentioning.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Can't let your guard down.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Enemies at the gates…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "ETD-4 on scene.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_deploy_002" + }, + { + "name": "Deploy II", + "desc": "Let's get our hands on.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Fass.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "…Like a shadow.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "I'll cover you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_QTE_003" + }, + { + "name": "Glide I", + "desc": "I'll take this chance to look around…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_Fly_001" + }, + { + "name": "Glide II", + "desc": "Hmm… good vision here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_Fly_002" + }, + { + "name": "Switch I", + "desc": "I'll take point.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_Switch_001" + }, + { + "name": "Switch II", + "desc": "Providing backup.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_Switch_002" + }, + { + "name": "Switch III", + "desc": "Engage!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_Switch_003" + }, + { + "name": "Special Switch I - Baicang", + "desc": "ETD-4 is now on scene.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_SSC_001" + }, + { + "name": "Special Switch II - Baicang", + "desc": "Baicang, stay sharp.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_SSC_002" + }, + { + "name": "Special Switch I - Fadia", + "desc": "ETD-4 is now on scene.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_SSC_FDY_001" + }, + { + "name": "Special Switch II - Fadia", + "desc": "Fadia, don't overextend.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_SSC_004" + }, + { + "name": "Special Switch I - Lacrimosa", + "desc": "Protecting my team is my responsibility.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_SSC_005" + }, + { + "name": "Special Switch II - Lacrimosa", + "desc": "Lacrimosa, go get some rest.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_SSC_006" + }, + { + "name": "Teammate Down - Baicang", + "desc": "You've done well, Captain… I'll take over from here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_TeammateDown_001" + }, + { + "name": "Teammate Down - Fadia", + "desc": "Fadia, don't push yourself. I got your back.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_TeammateDown_002" + }, + { + "name": "Teammate Down - Lacrimosa", + "desc": "Lacrimosa, go get some sleep. I'll handle the rest.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_TeammateDown_003" + }, + { + "name": "Parry I", + "desc": "Never!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_Parry_001" + }, + { + "name": "Parry II", + "desc": "Surrender now!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "You're nothing special.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "You can't catch a shadow.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC005/Play_Vo_Char_NPC005_DodgeCombo_002" + } + ] + } + }, + { + "id": "1010", + "name": "Nanally", + "description": "The Ichi-daime of the Coluccis—currently seeking new recruits!", + "element": [ + { + "element_id": "Nature", + "name": "Anima" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_010", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_010x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_010_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_nanali", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + }, + { + "name": "Follow-up Attack", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuijiagongji" + } + ], + "arcs_tags": { + "type_id": "3", + "name": "Plasma", + "icon": "/Game/UI/UI/player/YH_UI_icon_plasma" + } + }, + "reaction": [ + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1010_nighty", + "characterId": "1010", + "name": "Fluffy Flying Tiger", + "desc": "Nanally's loungewear. Thoughtful decorations have been added to a simple dress.\r\n\"Ever heard of 'adding wings to a tiger'? Tigers and wings are a perfect combo!\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_010_4_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_010_4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_010_4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_1010_4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanali4", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1010_0", + "characterId": "1010", + "name": "Family Boss", + "desc": "Typical streetwear with a twist of authority. As the boss of the Colucci family, her appearance sets the tone for the entire clan.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_010", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_010_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nanali", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanali", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1010_3", + "characterId": "1010", + "name": "The Popular Kid", + "desc": "School uniform style clothing that balances both beauty and comfort. The armband was handmade by Nanally herself, and she's quite satisfied with it.\r\n\"Ahem, Colucci has its own standards of discipline!\"", + "quality": "orange", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_010_2", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_010_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_010_2", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_1010_2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanali2", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1010_2", + "characterId": "1010", + "name": "Phoenix Kick", + "desc": "A fighting outfit with a unique design. Nanally specifically enrolled in a combat training class for this.\r\n\"When am I going to attend the training sessions? Uh… Next time for sure!\"", + "quality": "orange", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_010_3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_010_3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_010_3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_1010_3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanali3", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1010_swimsuit", + "characterId": "1010", + "name": "Sunny Surf", + "desc": "The Coluccis are expanding into open waters, and Captain Nanally is ready to set sail! All aboard, for the family!", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_010_5_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_010_5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_010_5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_1010_5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanali5", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1010_1", + "characterId": "1010", + "name": "Reverse Fairy Tale", + "desc": "Q³ holiday limited edition pajamas, perfect for listening to bedtime stories with friends.\r\n\"Once upon a time, there was a lonely little gray wolf in the forest who donned a velvet red cape, hoping to make friends.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_010_1_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_010_1", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_010_1_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_1010_1", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanali1", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1320, + 1426, + 1531, + 1637, + 1742, + 1848, + 1954, + 2059, + 2165, + 2270, + 2376, + 2482, + 2587, + 2693, + 2798, + 2904, + 3010, + 3115, + 3221, + 3326, + 3432, + 3538, + 3643, + 3749, + 3854, + 3960, + 4066, + 4171, + 4277, + 4382, + 4488, + 4594, + 4699, + 4805, + 4910, + 5016, + 5122, + 5227, + 5333, + 5438, + 5544, + 5650, + 5755, + 5861, + 5966, + 6072, + 6178, + 6283, + 6389, + 6494, + 6600, + 6706, + 6811, + 6917, + 7022, + 7128, + 7234, + 7339, + 7445, + 7550, + 7656, + 7762, + 7867, + 7973, + 8078, + 8184, + 8290, + 8395, + 8501, + 8606, + 8712, + 8818, + 8923, + 9029, + 9134, + 9240, + 9346, + 9451, + 9557, + 9662 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 108, + 112, + 116, + 120, + 124, + 128, + 132, + 136, + 140, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 184, + 188, + 192, + 196, + 200, + 204, + 208, + 212, + 216, + 220, + 224, + 228, + 232, + 236, + 240, + 244, + 248, + 252, + 256, + 260, + 264, + 268, + 272, + 276, + 280, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 364, + 368, + 372, + 376, + 380, + 384, + 388, + 392, + 396 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Eibon Staff", + "description": "She looks like a delinquent girl who might pull out a baseball bat at any time, yet she often helps old ladies cross the street, rescues cats stuck in trees in the Bridge Crossings, and assists those trapped by Anomalies. To the \"most prestigious family head in the Bridge Crossings,\" these are just random acts. She's still troubled by the Coluccis' revitalization plan.\n\"Hey, look up! The Coluccis' Ichi-daime is about to make a grand… OUCH!!!\"\n\"Sorry, sorry, sorry, I'll pay for the broken flowerpot… Can the bill not be sent to Eibon?\"", + "birthday": "August 20", + "homePlace": "Eibon Antique Shop", + "abilityName": "Genius Ichi-daime: Earth Flip", + "introduction": "The Ichi-daime of the Coluccis—currently seeking new recruits!", + "voiceChinese": "宋媛媛", + "voiceEnglish": "Brittany Lauda", + "voiceJapanese": "竹達彩奈", + "voiceKorean": "강새봄" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Nanally, the queen of Bridge Crossings, whose reputation for causing trouble is known far and wide.\nFacing the famous Eibon antique shop, it took Nanally just one glorious month to go from challenging them to being held as collateral for debt.\nWork hard, Colucci Family Ichi-daime! Make the world bow and tremble before those mighty fists!\n\nWhen not on quests, Nanally spends most of her time wandering around trying to revive the Colucci Family.\nHer top recruitment targets are obviously the Eibon folks. Sure, there's a dummy or two, but they're pretty decent people overall. Well… they can share in the family's glorious revival.\n\nShe's picky about food. Mackerel must be crispy, and lamb chops better come smothered in sauce.\nFor post-meal cleanup, try Fluffy Tail Care Spray, no ads needed, love from Nanally.\nPost-meal exercise options include 360° wall parkour, patrolling territory, or picking a fight with someone. The first one's recommended, safe and risk-free.\nNanally's top pick for best scenic spot in Hethereau is… oh no! A family boss can't reveal her whereabouts!\nThough Nanally did mention enjoying some view with an important companion before… but who was it… who was it… she can't remember either. That's what happens when important people forget things, right?\n\nFinally, something important must be said three times:\nNanally is not a cat, she's a tiger! Not a cat, a tiger! Not a tiger, a cat… bah! Not a cat, a tiger!" + }, + { + "name": "Ichi-daime's Badge", + "desc": "A carefully cut tiger-shaped bottle cap, topaz blue plastic wrap, plus one unbreakable little safety pin.\nAnyone who dares to underestimate the badge on Nanally's chest better be ready for a flurry of punches!\nPower, power keeps flowing endlessly… Heh heh, feel the bond of the Colucci Family!" + }, + { + "name": "\"Nini's Adventures\"", + "desc": "Nanally's favorite gang anime when she was a kid… and of course, it's still her favorite now.\r\nShe's especially obsessed with the pink muscle tiger that appears at 12:07 in Episode 3… absolutely unforgettable! That towering figure, standing unwavering amidst the sparks and lightning, mirrors Nanally's lifelong creed.\r\nIf only she could befriend it… they'd be an unbeatable team." + }, + { + "name": "\"Family Quotes Collection\"", + "desc": "\"Don't worry about my attitude, I'm tough as nails (snorts).\" - Nanally\n\"Fist to flesh, thunder and lightning! This is the romance of gang life (throws punch)!\" - Nanally\n\"Walking this path… it means constant encounters and farewells… I understand that (sighs)…\" - Nanally" + }, + { + "name": "Justice From Above", + "desc": "At age 8, during the \"Puka Crispy Stick Snatching Incident,\" Nanally defeated a greedy kid and helped him quit sweets. He later lost weight and became the school heartthrob.\nAt age 9, during the \"Torchwood Basketball Court Invasion Incident,\" she drove off three middle school bullies and opened a hole in a third-floor window with a basketball to improve ventilation.\nAt age 10, during the \"Helping Granny Cross the Street Incident,\" she achieved the impressive record of only taking 5 seconds from one side of the street to the other. Granny's legs even recovered instantly, and she walked away briskly. What a miracle!" + }, + { + "name": "World Flip", + "desc": "Ever seen a reversed spherical magnetic field?\nThe office building is like underwear that got flipped upside down, and the trees along the edge are tiger tails all frizzed up from static.\nThe sun gets stuck to the horizon… shadows overlap with magnetic fields… Welcome to a whole new world that's never been revealed." + } + ], + "melee": [ + { + "id": "GA_Nanally_Melee", + "name": "Colucci Secret Skill", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Colucci Secret Skill</>", + "<Title>Basic Attack: Heavy Hitter!</>", + "<Title>Basic Attack: Colucci Secret Gundo</>", + "<Title>Basic Attack: Grand Entrance!</>", + "<Title>Critical Riposte: Can't Touch This!</>" + ], + "desc": [ + "Bares her fangs and brandishes her claws, performing up to <NumGreen>5</> consecutive attacks, dealing <Ling>Anima DMG</>. Dodging does not interrupt the combo.", + "Triggers by holding Basic Attack. Performs up to 3 powerful attacks, dealing <Ling>Anima DMG</>. Chains after Critical Riposte and the 1st, 2nd, 3rd, and 5th attacks of Colucci Secret Skill. Dodging does not interrupt the combo.", + "Enters aim mode, dealing <NumGreen>1</> instance of single-target <Ling>Anima DMG</> to the enemy in the crosshair.", + "Swings her claws in the air and plunges, dealing <NumGreen>1</> instance of <Ling>Anima DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Colucci Secret Skill after a Critical Dodge. Charges toward the target at full speed, planting one hand on the ground, delivering a roundhouse kick that deals <NumGreen>1</> instance of <Ling>Anima DMG</> to an area, and reducing Break." + ], + "desc_short": [ + "Deals <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</>.", + "Hold Basic Attack to deal <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</>." + ], + "context": "<Italic>Said to be a secret combat technique passed down in the Coluccis, though it clearly incorporates many street-fighting elements from Hethereau.</>", + "icon": "/Game/UI/UI_Icon/Skill/Nanally_Melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Nanally_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 54, + 59, + 63, + 69, + 74 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 38, + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30 + ], + [ + 21, + 22, + 24, + 26, + 28, + 30, + 33, + 36, + 38, + 42, + 45, + 49, + 52 + ], + [ + 127, + 137, + 148, + 160, + 172, + 186, + 201, + 217, + 235, + 253, + 274, + 296, + 319 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Melee6_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}% *7", + "values": [ + [ + 6, + 7, + 8, + 8, + 9, + 10, + 10, + 11, + 12, + 13, + 14, + 16, + 17 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Melee9_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 77, + 83, + 89, + 97, + 104, + 113, + 122, + 132, + 142, + 154, + 166, + 179, + 194 + ], + [ + 77, + 83, + 90, + 97, + 105, + 113, + 122, + 132, + 143, + 154, + 166, + 180, + 194 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_ExtraAtk1_Damage", + "name": "Heavy Basic Attack: 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 67, + 72, + 78, + 84, + 91, + 98, + 106, + 115, + 124, + 134, + 145, + 156, + 169 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_ExtraAtkIntro1_Damage", + "name": "Heavy Basic Attack: 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *2 + {1}%", + "values": [ + [ + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29 + ], + [ + 84, + 91, + 98, + 106, + 115, + 124, + 134, + 145, + 156, + 169, + 182, + 197, + 213 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_ExtraAtkOutro1_Damage", + "name": "Heavy Basic Attack: 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 158, + 171, + 184, + 199, + 215, + 232, + 251, + 271, + 293, + 316, + 342, + 369, + 399 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_BranchPraojectile_Damage", + "name": "Aim DMG Ratio", + "icon": "", + "value_name": "Each instance {0}%", + "values": [ + [ + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 32 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_AirAttack1_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 107, + 116, + 125 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 166, + 179, + 193, + 209, + 225, + 243, + 263, + 284, + 307, + 331, + 358, + 387, + 418 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Nanally_Skill", + "name": "Colucci Howling Technique", + "type_name": "Redirect Skill", + "desc": "Hehe, surprise time! Deals <NumGreen>5</> instances of <Ling>Anima DMG</> to surrounding enemies and wraps herself in Anima Esper Ability, gaining the <hot textstyle=\"TextEXPL\" param=\"nouns&NanallyWalkOnWall\">Ichi-daime's Authority</> effect.\r\nLasts <NumGreen>12s</> or until Nanally is switched out.\r\nEnds <hot textstyle=\"TextEXPL\" param=\"nouns&NanallyWalkOnWall\">Ichi-daime's Authority</> early when recast.", + "desc_short": "Deals <Ling>Anima DMG</> and enters <hot textstyle=\"TextEXPL\" param=\"nouns&NanallyWalkOnWall\">Ichi-daime's Authority</> state.", + "context": "<Italic>Mint tried to learn this move from Nanally, but the moment she saw that Nanally's hair went rough, curved, split, and knotted, she gave up the idea. Adler is not with her in the Bureau of Anomaly Control to take care of her hair, after all.</>", + "icon": "/Game/UI/UI_Icon/Skill/Nanally_Skill", + "additional_desc": [ + { + "name": "Ichi-daime's Authority", + "desc": "Increases Nanally's CRIT DMG by 30%.\r\nNanally can ignore gravity and walk on any surface." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Nanally_Skill1_Damage", + "name": "Area DMG Ratio", + "icon": "", + "value_name": "{0}%*5", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GA_Nanally_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11 + ] + ] + }, + { + "name": "Crit DMG Increase", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Nanally_UltraSkill", + "name": "Colucci Ultimate Technique", + "type_name": "Ultimate", + "desc": "I'm way stronger than them! Deals <NumGreen>7</> instances of <Ling>Anima DMG</> immediately to surrounding enemies and summons Underboss to fight alongside her.\r\nCreates a small pull effect on surrounding enemies with Nanally's attacks while Underboss is active, and coordinates with all of Nanally's attacks to launch strikes, dealing <Ling>Anima DMG</> that also counts as <TextHLT>follow-up attack</> damage.", + "desc_short": "Deals <Ling>Anima DMG</> and summons an Underboss to fight alongside her. The Underboss deals <Ling>Anima DMG</> and counts as a <TextHLT>follow-up attack</>.", + "context": "<Italic>\"A proper gang leader will give her goons some room to shine in the spotlight… I can't fight without my goons?! Ahem, are you having doubts about my strength?\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Nanally_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Nanally_UltraSkill1_Damage", + "name": "Area DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}% *5 + {2}%", + "values": [ + [ + 293, + 316, + 341, + 369, + 398, + 430, + 465, + 502, + 542, + 585, + 632, + 683, + 738 + ], + [ + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106 + ], + [ + 495, + 535, + 577, + 624, + 674, + 727, + 786, + 849, + 917, + 990, + 1069, + 1155, + 1247 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Melee1_Damage", + "name": "Underboss Basic Attack: 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42, + 46, + 50, + 54, + 58, + 63 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Melee2_Damage", + "name": "Underboss Basic Attack: 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Melee3_Damage", + "name": "Underboss Basic Attack: 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 85, + 91, + 99, + 107 + ], + [ + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Melee5_Damage", + "name": "Underboss Basic Attack: 4th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *3", + "values": [ + [ + 31, + 34, + 37, + 39, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Melee6_Damage", + "name": "Underboss Basic Attack: 5th Instance DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97, + 104, + 113 + ], + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 119, + 129, + 139, + 151 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Branch1_Damage", + "name": "Underboss Heavy Basic Attack: 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Branch2_Damage", + "name": "Underboss Heavy Basic Attack: 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 22, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 44, + 47, + 51, + 55 + ], + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ], + [ + 71, + 77, + 83, + 90, + 97, + 105, + 113, + 122, + 132, + 142, + 154, + 166, + 180 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Branch5_Damage", + "name": "Underboss Heavy Basic Attack: 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *3", + "values": [ + [ + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 86, + 93, + 100, + 108, + 117 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_AirAttack_Damage", + "name": "Underboss Plunge Attack: DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 107, + 116, + 125 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_Skill_Damage", + "name": "Underboss Skill: DMG Ratio", + "icon": "", + "value_name": "{0}% *5", + "values": [ + [ + 24, + 25, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 51, + 56, + 60 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_PerfectEvadeAttack_Damage", + "name": "Underboss Critical Riposte: DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 85, + 92, + 100, + 108, + 116, + 125, + 136, + 146, + 158, + 171, + 185, + 199, + 215 + ] + ] + }, + { + "id_stats": "GE_Player_Nanally_Cat_QTE_Damage", + "name": "Underboss Support Skill: DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 150, + 162, + 175, + 189, + 204, + 220, + 238, + 257, + 277, + 299, + 323, + 349, + 377 + ] + ] + }, + { + "name": "Underboss Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + }, + { + "id_stats": "GA_Nanally_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Nanally_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Nanally_QTE", + "name": "Justice from Above", + "type_name": "Support Skill", + "desc": "Time to get serious! Charges with a spinning motion, delivering a kick and dealing <NumGreen>1</> instance of <Ling>Anima DMG</> to an area.", + "desc_short": "Deals <Ling>Anima DMG</>.", + "context": "<Italic>Got a problem? Come find Nanally - I've got you covered!</>", + "icon": "/Game/UI/UI_Icon/Skill/Nanally_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Nanally_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Nanally_Passive_1", + "name": "More Than Passionate", + "type_name": "Passive Skill", + "desc": "<TextHLT>Blossom Enhancement</>: Fires 10 Vita Pistils with Vita Bud, reducing the interval between each shot to 1s.", + "context": "<Italic>The First Rule of Gang Wars: \"Watch your back.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Nanally_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Nanally_Passive_2", + "name": "Fair Duel", + "type_name": "Passive Skill", + "desc": "Applies <NumGreen>1</> <TextHLT>follow-up attack</> to a single enemy, dealing <Ling>Anima DMG</> of <NumGreen>60%</> ATK whenever any ally deals <NumGreen>1</> instance of Esper Cycle DMG while Nanally is in <hot textstyle=\"TextEXPL\" param=\"nouns&NanallyWalkOnWall\">Ichi-daime's Authority</> state. DMG Ratio scales with Basic Attack skill level, reaching <NumGreen>129.5%</> at Lvl 11.\r\nTriggers <NumGreen>once</> every <NumGreen>2s</>.", + "desc_short": "Performs a <TextHLT>follow-up attack</>, dealing <Ling>Anima DMG</> whenever the team triggers Esper Cycle DMG while Nanally is in <hot textstyle=\"TextEXPL\" param=\"nouns&NanallyWalkOnWall\">Ichi-daime's Authority</> state. Maintains a minimum trigger interval.", + "context": "<Italic>\"Hey, hey, hey! The duel's already started! Running soooo far away… Chickening out, huh?\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Nanally_Pas2", + "additional_desc": [ + { + "name": "Ichi-daime's Authority", + "desc": "Increases Nanally's CRIT DMG by 30%.\r\nNanally can ignore gravity and walk on any surface." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_nanally_01", + "name": "Family Business", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_jzcy", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Nanally increases dish prices by <Green2>0.2</> Fons for each Main Dish tag on dishes." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Nanally reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, hitting customers with the hammer grants <Green2>115%</> of the current dish price." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Nanally reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Nanally increases dish prices by <Green2>0.3</> Fons for every 2 Main Dish tags on dishes." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Gang Formation", + "desc": "Grants Nanally <NumGreen>2.5</> Ultimate Energy for <NumGreen>each</> <TextHLT>follow-up attack</> she performs. Triggers at most <NumGreen>once</> every <NumGreen>1s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1010_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Second Member", + "desc": "Underboss lasts <NumGreen>3s</> longer.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1010_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Call Me the Boss", + "desc": "Applies <NumGreen>1</> <TextHLT>follow-up attack</> to a single enemy, dealing <Ling>Anima DMG</> of <NumGreen>{0}%</> ATK whenever Nanally deals damage to an enemy while she's in <hot textstyle=\"TextEXPL\" param=\"nouns&NanallyWalkOnWall\">Ichi-daime's Authority</> state. DMG Ratio scales with Basic Attack skill level, reaching <NumGreen>107.9%</> at Lvl 11. Triggers <NumGreen>once</> per second.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1010_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Ichi-daime's Authority", + "desc": "Increases Nanally's CRIT DMG by 30%.\r\nNanally can ignore gravity and walk on any surface." + } + ] + }, + { + "name": "Not a Troublemaker", + "desc": "Increases Underboss's damage by <NumGreen>100%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1010_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Followers Everywhere", + "desc": "Increases Nanally's ATK by <NumGreen>2%</> for <NumGreen>each</> <TextHLT>follow-up attack</> she performs, up to <NumGreen>20%</>. Disappears when Nanally leaves the battlefield or exits combat.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1010_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Because We're Family", + "desc": "Extends the duration of <hot textstyle=\"TextEXPL\" param=\"nouns&NanallyWalkOnWall\">Ichi-daime's Authority</> state to <NumGreen>15s</>, and further extends it to <NumGreen>20s</> when out of combat.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1010_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Ichi-daime's Authority", + "desc": "Increases Nanally's CRIT DMG by 30%.\r\nNanally can ignore gravity and walk on any surface." + } + ] + } + ], + "resonance": [ + { + "name": "Colucci Secrets - Part 1", + "desc": "Increases the skill level of Colucci Secret Skill, Colucci Howling Technique, and Colucci Ultimate Technique by 1.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Colucci Secrets - Part 2", + "desc": "Increases damage dealt by 15%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1010/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 2, + "desc": "Increases {0} by {1}% for each Type II Module equipped.", + "special_desc": "Type II Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "value": 6 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_006", + "amount": 100 + }, + { + "item_id": "Food_012", + "amount": 100 + }, + { + "item_id": "Food_084", + "amount": 100 + }, + { + "item_id": "Flower0007", + "amount": 200 + }, + { + "item_id": "BigPoster001", + "amount": 200 + }, + { + "item_id": "BigPoster003", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_Blue_002", + "amount": 200 + }, + { + "item_id": "Figure_maskerrider_01_001", + "amount": 400 + }, + { + "item_id": "Figure_maskerrider_01_002", + "amount": 400 + }, + { + "item_id": "Furniture_Gacha_Blue_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "SpecialGift_1010", + "amount": 1200 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1010" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1010" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Friendship_3_1010" + ], + "amount": [ + 20, + 20000, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1010" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1010", + "Friendship_4_1010" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1010" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1010", + "Fashion_character_1010_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Newcomer? I—no, ahem, I mean, I, Nanally Coluccis, am the Ichi-daime of the future greatest family in all of Hethereau—the Colucci family! I'll have your back from now on.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_meet_001" + }, + { + "name": "Chat: Grand Plan", + "desc": "If you've got nothing to …do, want to hear my grand plan for the family?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_chat_001" + }, + { + "name": "Chat: Keenness", + "desc": "Argh, I'm so bored… Hmm?! Something doesn't feel quite right. I should probably scram…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_chat_002" + }, + { + "name": "Chat: Books", + "desc": "Family Management… huh… Prologue… first of all… Ugh!!!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_chat_003" + }, + { + "name": "Sunny", + "desc": "Clear skies! …Why are you looking at me like a pleased mother?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_weather_001" + }, + { + "name": "Rainy", + "desc": "Boy, the rain is crazy… Alright, let's surf our way back!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_weather_002" + }, + { + "name": "Cold", + "desc": "It's so cold! Hurry up. I'm turning into a popsicle!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_weather_003" + }, + { + "name": "Hot", + "desc": "I feel like a fish on the beach right now. If only I had a Blizzi ice cream…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning! Any new commissions? The Coluccis are always good to go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Lunchtime! Is my favorite cheesy eggroll on the menu today?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "It's still early. Let's go out for another round.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_greet_003" + }, + { + "name": "Good Night", + "desc": "Huh? Is it this late already? One more game and I'm going to sleep!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_greet_004" + }, + { + "name": "Hobbies", + "desc": "Snacks, manga, gaming, bug catching, parkour, beating up minions, and… argh, I've lost count.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_hobby_001" + }, + { + "name": "Worries", + "desc": "Worry? Hmm… Uh… I know! Someone ate the pudding I left in the fridge. I was totally looking forward to enjoying it while reading the latest issue of \"Monthly Fantasy\".", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_vexation_001" + }, + { + "name": "Topic: Family", + "desc": "A boss who doesn't stand by their family is not a real boss… We owe everything to the family business for who we are today. Betraying the family is betraying yourself! …How's that? Cool, right? I've always wanted to say these lines from \"Sin City Chronicles\"!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_talk_001" + }, + { + "name": "Topic: Electromagnetic Attraction", + "desc": "First a crackle-POP, then a snap-ZAP, and bam—I'm upside down and clinging to the wall! Oh, oh! And when I go whoosh and drop in right in front of the bad guys? That's my signature entrance!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_talk_002" + }, + { + "name": "Topic: Hair Care", + "desc": "First, rinse the fur with clean water. Then use the special cleanser, blow-dry with warm air until it's fluffy-but-damp, spritz on some conditioners, switch to cool air to finish drying, and trim off any split ends. That's how Adler taught me—after all, the Ichi-daime has to look the part!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "To get back the family heirloom, I leapt onto the outer pipes of the building! But then—get this—some creep set up a broken live cable just waiting for me. I felt this ZZZZZT jolt and then I was falling! But I swear someone grabbed me! Next thing I know, my body's all spark-crackle, and we're just standing there—on the wall! As for the price… hmm… didn't feel anything weird. Maybe the cost was too small to notice? Is this what they call… plot armor?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_self_001" + }, + { + "name": "About Myself: Wounds", + "desc": "This wound's probably from an anomaly. This one is from bumping into a fire hydrant when I chased Danzaburou after it stole food from a grandma… Ah, and this is from teaching those robbers a good lesson. All minor injuries, doesn't hurt one bit! …Huh? Holes on my clothes?! Ahhh… guess I'm in trouble with the old man…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_self_002" + }, + { + "name": "About Myself: Street Fighter", + "desc": "Not trying to brag or anything, but before I joined Eibon, everyone on Bluebeard Road and Torchwood Avenue knew who I was! I didn't even need to fight them with my Esper Ability… Uh, what? Did you just say you wanted to learn more about me? Thanks but no thanks. I don't want no trouble around Eibon!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_self_003" + }, + { + "name": "About Hotori", + "desc": "A mysterious antique shop owner with an enigmatic background sounds so cool! I really want to be like her. Should I start by learning to drink?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_about_001" + }, + { + "name": "About Adler", + "desc": "There is nothing old man can't do, can you believe it? I've tried to dig for secrets a few times when Boss was drunk, and all I got was all sorts of rumors… except Sakiri said none of those were true. Boy, is the guy some sort of trade secret?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_about_002" + }, + { + "name": "About Sakiri", + "desc": "It seems like Sakiri… keeps a whole lot of things to herself. But as the leader, I'm very tolerant of my family members. Sakiri can continue being herself. I mean, she might just open up to me someday when I'm as powerful as Master Daffodill!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_about_003" + }, + { + "name": "About Edgar", + "desc": "There seems to be a computer in Edgar's head. He can even answer bizarre questions like \"Why are round pizzas put in square boxes and then cut into triangles?\" or \"Why is there more air than chips in a bag of chips?\" Honestly, they should have designed Edgar's head the way they have Taygedo's.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_about_004" + }, + { + "name": "About Daffodill", + "desc": "I've never seen anyone with a more regular routine than Master Daffodill! She never slacks off! I mean, she even brushes her teeth and eats with her back straight! And when she trains, she never takes a break… Uh, I just happened to see it while passing by. I wasn't peeking! I swear!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_about_005" + }, + { + "name": "About Taygedo", + "desc": "Taygedo? He's still on probation, but if he does as I say, I just might consider giving him an important role in the family down the road. He really needs to consider himself lucky working for me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_about_006" + }, + { + "name": "About Eibon Antique Shop", + "desc": "A mysterious shop in a quiet alley, an enigmatic shop owner, a high-combat-value cold bodyguard, a versatile robot-like butler, and… a mascot! It looks like a setting straight out of a hot-blooded manga! I mean, life at Eibon turned out different than I'd imagined… but I can already smell the plot brewing! People all over Hethereau are going to know Eibon and the Coluccis. No, people all over the world are going to know Eibon and the Coluccis!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_about_008" + }, + { + "name": "Character Ascension I", + "desc": "This is Nanally Colucci for you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "New move!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Time to show you my ultimate power!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_ug_003" + }, + { + "name": "Gift Received I", + "desc": "I swear, nothing can ever—beat—this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_gift_001" + }, + { + "name": "Gift Received II", + "desc": "A gift like this… Are you sure? I knew you wouldn't let me down!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Where did you get spoils like this?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Alright then, let this Ichi-daime know what you need.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Mrrrowr!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Surprise!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Watch me shine!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Take that! The city's mine!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Everyone! Follow my command!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Underboss, it's our turn!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Well well well… The Colucci Family is always looking for new members like you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_containment_001" + }, + { + "name": "Containment II", + "desc": "Get along with everyone from now on!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_containment_002" + }, + { + "name": "Nullification I", + "desc": "Job done! …Uh, can the bill for damages be sent elsewhere?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_anomaly_002" + }, + { + "name": "Nullification II", + "desc": "It's finally over!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_anomaly_003" + }, + { + "name": "Unexpected Gains I", + "desc": "Great stuff! Better hide it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Very good, the family shall grow stronger.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Can this be used to pay off the Boss's debt?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Woah, I gotta hide this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Hold on, I'll look into this when we get back!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Oooh! I know this! It… it's…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Tch, I've got even better moves!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_hp_001" + }, + { + "name": "Low Health II", + "desc": "Ouch… hope no one saw that?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_hp_002" + }, + { + "name": "Low Health III", + "desc": "Cough cough… before this hero's final moments…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_hp_003" + }, + { + "name": "Heal I", + "desc": "Heh, now it's my turn!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_fh_001" + }, + { + "name": "Heal II", + "desc": "Ready to go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_fh_002" + }, + { + "name": "Down I", + "desc": "Brought shame… to the Coluccis…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_dead_001" + }, + { + "name": "Down II", + "desc": "I'm not… a competent boss…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_dead_002" + }, + { + "name": "Down III", + "desc": "This… isn't cool at all…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_dead_003" + }, + { + "name": "Takedown I", + "desc": "Next!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_kill_001" + }, + { + "name": "Takedown II", + "desc": "Beg for mercy earlier next time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_kill_002" + }, + { + "name": "Damaged I", + "desc": "Just warming up!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_struck_001" + }, + { + "name": "Damaged II", + "desc": "Just a tickle!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Quite arrogant!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "No hitting from behind!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "I'll handle this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_deploy_001" + }, + { + "name": "Deploy II", + "desc": "It should've been my turn ages ago!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Time to shine!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "You picked a fight with the wrong person!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Eat this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_QTE_003" + }, + { + "name": "Glide I", + "desc": "What's that smell? Smells amazing!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_Fly_001" + }, + { + "name": "Glide II", + "desc": "Whoo! As free as the wind!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_Fly_002" + }, + { + "name": "Special Switch - Hotori", + "desc": "Leave this to me! I won't mess up this time!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_SSC_001" + }, + { + "name": "Special Switch - Adler", + "desc": "Take a break, old man! I'll handle this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_SSC_002" + }, + { + "name": "Special Switch - Sakiri", + "desc": "Let them witness the bond of the Coluccis!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_SSC_003" + }, + { + "name": "Special Switch - Daffodill", + "desc": "I'm gonna show you how a great teacher makes a great student!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_SSC_004" + }, + { + "name": "Special Switch - Edgar", + "desc": "Why didn't you call your boss when you needed help?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_SSC_005" + }, + { + "name": "Special Switch - Mint", + "desc": "Move like wind, strike like thunder!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_SSC_006" + }, + { + "name": "Special Switch - Zero", + "desc": "Don't underestimate my wombo-combo with the Appraiser!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_SSC_ZERO_001" + }, + { + "name": "Teammate Down - Hotori", + "desc": "What did you do to the Boss?!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_TeammateDown_001" + }, + { + "name": "Teammate Down - Adler", + "desc": "I'll never forget this…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_TeammateDown_002" + }, + { + "name": "Teammate Down - Sakiri", + "desc": "Who gave you permission to lay hands on one of mine?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_TeammateDown_003" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "I'll never let Master down.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_TeammateDown_004" + }, + { + "name": "Teammate Down - Mint", + "desc": "DON'T—STEP—ON—HER—TAIL!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_TeammateDown_005" + }, + { + "name": "Teammate Down - Edgar", + "desc": "It's not time to give up!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_TeammateDown_006" + }, + { + "name": "Teammate Down - Zero", + "desc": "Who dares to hurt a core Colucci member!?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_TeammateDown_007" + }, + { + "name": "Parry I", + "desc": "Heh, child's play.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_Parry_001" + }, + { + "name": "Parry II", + "desc": "I block!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Think you can challenge me?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Can't touch this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC011/Play_Vo_Char_NPC011_DodgeCombo_002" + } + ] + } + }, + { + "id": "1019", + "name": "Mint", + "description": "If there was such a ranking, I'd probably hold the record for \"Most Times Tricked by Anomalies\" in the Containment Units…", + "element": [ + { + "element_id": "Nature", + "name": "Anima" + } + ], + "rarity": 4, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_019", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_019x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_bohe", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + } + ], + "arcs_tags": { + "type_id": "2", + "name": "Liquid", + "icon": "/Game/UI/UI/player/YH_UI_icon_liquid" + } + }, + "reaction": [ + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1019_nighty", + "characterId": "1019", + "name": "Leisurely Holiday", + "desc": "Mint's loungewear. Simple clothing that showcases the carefree and relaxed spirit of being a homebody.\r\n\"There's nothing better than staying home and sleeping in on a day off!\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_019_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_019_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_bohe3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_bohe3", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1019_0", + "characterId": "1019", + "name": "CSU Prodigy", + "desc": "An upgraded Bureau of Anomaly Control Containment Strike Unit uniform. Making it into the CSU was Mint's greatest stroke of luck.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_019", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_bohe", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_bohe", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1019_swimsuit", + "characterId": "1019", + "name": "Saltwater Taffy", + "desc": "A shiny candy wrapper catches the sunlight and shimmers with every color of the rainbow. This one's mint.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_019_6_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_019_6", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_6_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_bohe6", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_bohe7", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1019_rpg_level1", + "characterId": "1019", + "name": "Wild as the Wind", + "desc": "Run, and the scent of freedom will reach the road before your footsteps.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1019_rpg_level1_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_019_3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_bohe1", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_bohe4", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + }, + { + "fashionId": "Fashion_1019_rpg_level2", + "characterId": "1019", + "name": "Sylvan Hunter", + "desc": "From the first fallen leaf to the final footprint, the hunt never ceases.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1019_rpg_level2_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_019_4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_bohe4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_bohe5", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + }, + { + "fashionId": "Fashion_1019_rpg_level3", + "characterId": "1019", + "name": "Aurora Flame", + "desc": "Like a ghostflame before the wilds, the daughter of the wind was born to roam free and unbound.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1019_rpg_level3_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_019_5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_bohe5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_bohe6", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + }, + { + "fashionId": "Fashion_1019_1", + "characterId": "1019", + "name": "To Mary", + "desc": "Q³ holiday limited edition pajamas, perfect for listening to bedtime stories with friends.\r\n\"Mary had a little black cat, with ears from her mother, a body from her father, and siblings as its limbs. Wherever Mary went, it would always follow along.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_019_1_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_019_1", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_019_1_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_bohe2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_bohe2", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1000, + 1080, + 1160, + 1240, + 1320, + 1400, + 1480, + 1560, + 1640, + 1720, + 1800, + 1880, + 1960, + 2040, + 2120, + 2200, + 2280, + 2360, + 2440, + 2520, + 2600, + 2680, + 2760, + 2840, + 2920, + 3000, + 3080, + 3160, + 3240, + 3320, + 3400, + 3480, + 3560, + 3640, + 3720, + 3800, + 3880, + 3960, + 4040, + 4120, + 4200, + 4280, + 4360, + 4440, + 4520, + 4600, + 4680, + 4760, + 4840, + 4920, + 5000, + 5080, + 5160, + 5240, + 5320, + 5400, + 5480, + 5560, + 5640, + 5720, + 5800, + 5880, + 5960, + 6040, + 6120, + 6200, + 6280, + 6360, + 6440, + 6520, + 6600, + 6680, + 6760, + 6840, + 6920, + 7000, + 7080, + 7160, + 7240, + 7320 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 75, + 79, + 83, + 86, + 90, + 94, + 98, + 101, + 105, + 109, + 113, + 116, + 120, + 124, + 128, + 131, + 135, + 139, + 143, + 146, + 150, + 154, + 158, + 161, + 165, + 169, + 173, + 176, + 180, + 184, + 188, + 191, + 195, + 199, + 203, + 206, + 210, + 214, + 218, + 221, + 225, + 229, + 233, + 236, + 240, + 244, + 248, + 251, + 255, + 259, + 263, + 266, + 270, + 274, + 278, + 281, + 285, + 289, + 293, + 296, + 300, + 304, + 308, + 311, + 315, + 319, + 323, + 326, + 330, + 334, + 338, + 341, + 345, + 349, + 353, + 356, + 360, + 364, + 368, + 371 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 60, + 65, + 70, + 74, + 79, + 84, + 89, + 94, + 98, + 103, + 108, + 113, + 118, + 122, + 127, + 132, + 137, + 142, + 146, + 151, + 156, + 161, + 166, + 170, + 175, + 180, + 185, + 190, + 194, + 199, + 204, + 209, + 214, + 218, + 223, + 228, + 233, + 238, + 242, + 247, + 252, + 257, + 262, + 266, + 271, + 276, + 281, + 286, + 290, + 295, + 300, + 305, + 310, + 314, + 319, + 324, + 329, + 334, + 338, + 343, + 348, + 353, + 358, + 362, + 367, + 372, + 377, + 382, + 386, + 391, + 396, + 401, + 406, + 410, + 415, + 420, + 425, + 430, + 434, + 439 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Member of CSU-2", + "description": "Mint believes everyone has a unique scent and prefers to call people by the scent she detects rather than their names. Her quirky nicknames, energetic personality, and top-notch performance in containment work earn her praise from even the strictest seniors. However—\n\"Hehe, I'm going to become a CSU Ace… Did I fail the containment regulation exam again…? Uwaa…\"\nClearly, Mint needs a bit more luck to achieve her dreams.", + "birthday": "June 1", + "homePlace": "Bureau of Anomaly Control, CSU-2", + "abilityName": "Nya-choo!", + "introduction": "If there was such a ranking, I'd probably hold the record for \"Most Times Tricked by Anomalies\" in the Containment Units…", + "voiceChinese": "陈雨", + "voiceEnglish": "Brianna Knickerbocker", + "voiceJapanese": "鬼頭明里", + "voiceKorean": "성예원" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "My dream is to become a CSU Ace! Player Mint, ready to go!\nShe probably loves field work the most among all the Containment Units members. She even loves it on scorching hot days. She can sneak a Blizzi Ice Cream during downtime, and won’t hesitate to apply for heat allowance when she gets back to the bureau.\nThe frequency of Mint's makeup exams at the bureau perfectly matches her field mission frequency.\n\nLoyal user of Fluffy Tail Care Spray, she’s brave enough to try all the new scents. By try, she means sniffing them… Mint would never lick her own tail fur!\nHer friendship with Nanally started when both their hands reached for the last bottle of care spray in the store! The partners at Nanally's Eibon Antique Shop are all so nice! Hotori Senpai… definitely has some stories to tell!\n\nEhhhhh! Found Lacrimosa Senpai again during field work! At times like this, I should definitely contact our reliable Lieutenant… User currently unavailable? Must be in a meeting. I'm doomed! Mint can't handle either Baicang Senpai or Fadia Senpai!\n\nHa! Another day working hard toward becoming a CSU Ace! Once I get this anomaly into Temporary Containment, I can probably clock out, right?\n\nSniff sniff, Lavender is here! And that unfamiliar but warm Coco scent next to her is…" + }, + { + "name": "Colucci Family, Honorary Member", + "desc": "Mint is actually a member of the great Colucci family too… well, to be exact, an honorary member.\nAfter receiving Nanally Colucci's olive branch, Mint thought long and hard about joining, with the same seriousness she puts into preparing for makeup exams.\nFirst! Mint totally respects this genius girl!\nSecond! A family sounds really cool! Mint loves hanging out with friends (family-members-to-be)!\nMost importantly: Mint is worst at saying no to people!\nHowever, Mint ultimately declined Nanally's proposal, promising that as an honorary member of the family, she'd drop by Eibon from time to time.\nBecause… Containment Units work is super, super busy, and if Nanally suddenly called a family meeting, Mint couldn't guarantee she'd be able to rush over right away. That would make Mint a tardy family member, and she'd be breaking the family rules!\nThe most important thing about a family is the rules. That's just how it is." + }, + { + "name": "Kittens always grow up so fast", + "desc": "There is an inevitable pain that comes with becoming a teenager—its the most unforgettable memory of a child. Waking up in the middle of the night from an ache, growing taller with each stretch of the body…\nBut for Mint, this physical pain was never present.\nMaybe she was too young when her growth spurts hit; she reached her current height before she was 10. Maybe her naturally carefree nature made her unusually slow to react to the changes that come with growing up. Whatever anguish that summer’s on-and-off joint pain might have brought got left behind along with her brand new, unopened summer homework." + }, + { + "name": "Tiny and Big Kid", + "desc": "An awkward age, an awkward height. She towered so much over her peers that strangers would mistake her for a high school student several years older. It wasn't too surprising that Mint, as such a \"big kid,\" couldn't really play with her little friends.\nMint liked climbing trees to nap in the sun, a blade of grass between her teeth as she secretly watched the neighbor kids play and fight. Then, casually… or at least trying to make it look casual, she'd help get their kites unstuck from the branches.\n\"Tiny\" suddenly appeared during one of her half-asleep moments, and Mint still remembers how embarrassing she looked tumbling out of that tree.\nThe young-faced little guy called out to her: \"Hey, kid.\"" + }, + { + "name": "Kitty Crossbody Bag", + "desc": "A candy-colored waist bag gifted by \"Tiny,\" with a matching notebook inside. The pages are clean, smooth, and absolutely beautiful.\nHands in pockets, super cool \"Tiny\" gave Mint the childish, adorable gift before parting, stubbornly defending it as \"perfect for a little brat like you.\"\nShe met someone who looked like a kid, but was actually a sharp-eyed, reliable adult working at the Bureau of Anomaly Control! Tiny and Big Kid had an unforgettable adventure that summer! Tiny helped Big Kid better control her Esper Ability! Tiny is Big Kid's most important friend! Tiny and Big Kid will meet again in the future!\nLittle Mint achieved her dream at summer's end: join BAC and reunite with \"Tiny\" (who'll be \"Tiny Senpai\" by then).\nLike an ice-cold cola that instantly cools down a stuffy, sweltering summer… her scent awaits in the not-so-distant future." + }, + { + "name": "Taste of Everything", + "desc": "The tempting beef tallow base of Panda Hotpot… The sweet and tangy Blizzi Berrie Ice Cream… The bitter yet rich aroma of coffee poured full by Ms. Fei…\nFamiliar, beloved daily moments write themselves in bold strokes engraved in memory through their scents.\nRelax, take a deep breath… feel this moment, the flavors of life flowing gently on the breeze." + } + ], + "melee": [ + { + "id": "GA_Mint019_Melee", + "name": "Perfect Containment", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Perfect Containment</>", + "<Title>Basic Attack: Justice from Above</>", + "<Title>Critical Riposte: Caramel Crisp</>" + ], + "desc": [ + "Wields her weapon and performs up to <NumGreen>5</> consecutive attacks, dealing <Ling>Anima DMG</>.", + "Wields her weapon in the air and plunges, dealing <NumGreen>1</> instance of <Ling>Anima DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Perfect Containment after a Critical Dodge. Leaps up to dodge an attack, seizes the enemy's opening, and swiftly swings her weapon, dealing <NumGreen>1</> instance of <Ling>Anima DMG</> to an area and reducing Break." + ], + "desc_short": [ + "Deals <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</>." + ], + "context": [ + "Hold Basic Attack to make Mint dance and spin, forming a tornado that continuously drains Stamina and deals continuous <Ling>Anima DMG</> to surrounding enemies.", + "<Italic>\"First place in the Containment Simulation Exam: Mint, from CSU-2.\"</>" + ], + "icon": "/Game/UI/UI_Icon/Skill/Mint_Melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Mint_Melee1_Damage_New", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26 + ], + [ + 23, + 24, + 26, + 29, + 31, + 33, + 36, + 39, + 42, + 46, + 49, + 53, + 58 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_Melee3_Damage_New", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_Melee4_Damage_New", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 61, + 66 + ], + [ + 34, + 36, + 39, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_Melee6_Damage_New", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42, + 46 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_Melee7_Damage_New", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59, + 64 + ], + [ + 52, + 56, + 61, + 65, + 71, + 76, + 83, + 89, + 96, + 104, + 112, + 121, + 131 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_AirAttack1_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 65, + 70, + 75, + 81, + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151, + 163 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 174, + 187, + 202, + 219, + 236, + 255, + 276, + 298, + 322, + 347, + 375, + 405, + 438 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_Evade1_Damage", + "name": "Jump DMG Ratio", + "icon": "", + "value_name": "{0}%*3+{1}%", + "values": [ + [ + 28, + 30, + 33, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 61, + 66, + 71 + ], + [ + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100, + 108, + 117 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_Evade5_Damage", + "name": "Hold Basic Attack DMG Ratio", + "icon": "", + "value_name": "Each instance {0}%", + "values": [ + [ + 13, + 14, + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33 + ] + ] + }, + { + "name": "Hold Stamina Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38, + 38 + ] + ] + }, + { + "name": "Hold Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Mint019_Skill", + "name": "Ultimate: Super Claws", + "type_name": "Redirect Skill", + "desc": "Time to cool things down! Dashes forward, then returns to her original position, dealing <NumGreen>2</> instances of AoE <Ling>Anima DMG</> to enemies along the path.", + "desc_short": "Deals <Ling>Anima DMG</>.", + "context": "<Italic>\"Ice cream is cool, mint is cool, so mint ice cream from Blizzi means double the happiness! Ooha… I'm already shivering just thinking about it!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Mint_Skill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Mint_Skill1_Damage_New", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%*2", + "values": [ + [ + 90, + 97, + 105, + 113, + 122, + 132, + 142, + 154, + 166, + 179, + 194, + 209, + 226 + ] + ] + }, + { + "id_stats": "GA_Mint019_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Mint019_UltraSkill", + "name": "Ultimate: Thunderous Whirlwind Slash", + "type_name": "Ultimate", + "desc": "Are you ready! Channels the surrounding wind into her dual blades, transforming them into wind blades that deal multiple instances of <Ling>Anima DMG</> to an area. Lands with a final hit that deals massive <Ling>Anima DMG</> to an area.", + "desc_short": "Deals <Ling>Anima DMG</>.", + "context": "<Italic>The full name is \"Mint's Ultimate: Super Duper Ultra 360 Whirlwind Slash\", but I had to shorten it to what it is now because people wouldn't stop laughing about it.</>", + "icon": "/Game/UI/UI_Icon/Skill/Mint_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Mint_UtraSkill1_Damage_New", + "name": "Impact DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 132, + 143, + 154, + 167, + 180, + 194, + 210, + 227, + 245, + 265, + 286, + 309, + 333 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_UtraSkill2_Damage_New", + "name": "Claw Combo Ratio", + "icon": "", + "value_name": "{0}%*5", + "values": [ + [ + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100, + 108, + 117, + 126, + 137, + 148 + ] + ] + }, + { + "id_stats": "GE_Player_Mint_UtraSkill7_Damage_New", + "name": "Slash Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 373, + 403, + 435, + 470, + 508, + 548, + 592, + 640, + 691, + 746, + 806, + 870, + 940 + ] + ] + }, + { + "id_stats": "GA_Mint_UtraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Mint_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Mint019_QTE", + "name": "Ultimate: Invincible Tornado Slash", + "type_name": "Support Skill", + "desc": "Perfect finishing work from an elite member! Charges and leaps into the air, performing a penetrating attack on enemies, dealing <NumGreen>1</> instance of <Ling>Anima DMG</> to an area.", + "desc_short": "Deals <Ling>Anima DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/Mint_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Mint_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Mint_Passive_1", + "name": "Transform! Super Mint!", + "type_name": "Passive Skill", + "desc": "<TextHLT>Blossom Enhancement</>: Expands Vita Pistils' damage area on hit.", + "context": "<Italic>\"Watch closely now! I'm not the same as before! You're now face-to-face with an elite operative!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Mint_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Mint_Passive_2", + "name": "Bingo! We're Done Here!", + "type_name": "Passive Skill", + "desc": "While Mint is on the field, her DEF is increased by <NumGreen>20%</> and her resistance to Interruptions is increased by <NumGreen>30%</>.", + "context": "<Italic>There's always that extra burst of energy when work's almost done, especially when putting out new arrivals…</>\r\n<Italic>\"Five minutes till close! Line up nicely and get nullified!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Mint_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_melt_01", + "name": "Mint Tornado", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_bhljf", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Mint increases dish prices by an additional <Green2>0.12</> Fons." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Mint reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, tips increase with each combo. Up to <Green2>5</> times per combo." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Mint reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Mint increases dish prices by an additional <Green2>0.18</> Fons." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Task Force Operation", + "desc": "Resets the cooldown of Ultimate: Super Claws when Caramel Crisp hits an enemy. Triggers once every <NumGreen>3s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1019_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Re-examination", + "desc": "Redirect Skill: Ultimate: Super Claws damage increases by <NumGreen>40%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1019_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Attendance Bonus", + "desc": "When any character triggers Blossom or Hexed against an enemy, Mint's ATK is increased by <NumGreen>15%</> for <NumGreen>15s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1019_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Lunch Break", + "desc": "Increases Mint's Crit Chance by <NumGreen>12%</> when dealing damage to the last enemy on the field.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1019_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "First Instinct", + "desc": "After casting Redirect Skill: Ultimate: Super Claws, Mint's CRIT DMG increases by <NumGreen>25%</> for <NumGreen>6s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1019_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Elite Member", + "desc": "Mint deals <NumGreen>15%</> increased damage to targets below <NumGreen>40%</> HP.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1019_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Minty Bubble Tea", + "desc": "Increases the skill level of Perfect Containment, Ultimate: Super Claws, and Ultimate: Thunderous Whirlwind Slash by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Fluffy Mousse", + "desc": "Grants an additional <NumGreen>2</> Cycle Energy after successfully casting Ultimate: Super Claws.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1019/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + -1, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "value": 7.5 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_017", + "amount": 100 + }, + { + "item_id": "Food_033", + "amount": 100 + }, + { + "item_id": "Food_063", + "amount": 100 + }, + { + "item_id": "Flower0010", + "amount": 200 + }, + { + "item_id": "SmallPoster006", + "amount": 200 + }, + { + "item_id": "Figure_eri_01_001", + "amount": 400 + }, + { + "item_id": "Figure_eri_01_002", + "amount": 400 + }, + { + "item_id": "Furniture_Gacha_eri_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1019" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1019" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial", + "Furniture_draw_0036_KV_solo" + ], + "amount": [ + 20, + 5, + 1 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Friendship_3_1019" + ], + "amount": [ + 20, + 20000, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1019", + "Likeprice_1019_0" + ], + "amount": [ + 20000, + 1, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1019", + "Friendship_4_1019" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1019" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1019", + "Fashion_character_1019_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Hey there Coco, Mint's the name, and I'm your go-to gal from CSU-2. Need a hand? Just call!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_meet_001" + }, + { + "name": "Chat: Report Card", + "desc": "Did I fail again? Waah… They told me I'd pass if I wore this amulet…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_chat_001" + }, + { + "name": "Chat: Ice Cream", + "desc": "Blizzi rolled out a new ice cream! Can't wait to give it a whirl after the mission!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_chat_002" + }, + { + "name": "Chat: Information", + "desc": "The briefing for this containment op has been sent via email… Uwa… so many pages…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_chat_003" + }, + { + "name": "Sunny", + "desc": "Mmm, what a day! Perfect for some fieldwork… I mean, a totally legit patrol. Not slacking, promise!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_weather_001" + }, + { + "name": "Rainy", + "desc": "Ugh… Rain makes my tail clumpy…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_weather_002" + }, + { + "name": "Cold", + "desc": "With this weather, I'm gonna be a walking, talking hand warmer for the senpai…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_weather_003" + }, + { + "name": "Hot", + "desc": "It's so hot… I'm filing for a heat bonus when I get back!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning! Sss—great, Coco Power! Full charge!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "If you can't decide what to eat, join me for Budoriya's Dancing Takoyaki! But remind me to blow on them first.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Hethereau's nightlife is a whole new world! Hehe, I will be your tour guide!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_greet_003" + }, + { + "name": "Good Night", + "desc": "Eh, this late already? But I'm wide awake!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_greet_004" + }, + { + "name": "Hobbies", + "desc": "What do I like to do? Shopping! Well… that doesn't sound quite right. Eh, never mind! I love window shopping and discovering new places. It's even better if the shopkeeper and fellow shoppers chat with me! Hehe… wanna come along next time? You'll find lots of interesting things!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_hobby_001" + }, + { + "name": "Worries", + "desc": "Failed another exam… If this continues, my pay's at risk! I did memorize all the rules, but the exam's dense text always blanks my mind!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_vexation_001" + }, + { + "name": "Topic: Anomalies", + "desc": "Ever think about that frame we nullified together? Its Nexus still gives me the wows. It's like it just needed a little appreciation to leave it all behind… Makes you wonder if those quirky anomalies out there are just looking for something… surprisingly simple.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_talk_001" + }, + { + "name": "Topic: Gourmet Food", + "desc": "Hungry and indecisive? You've hit the jackpot with me! I'm your ultimate guide to Hethereau's yummiest bites, from network-famous spots to secret street eats. Fancy places? Don't know much yet… but just you wait! I'm on my way up in the BAC, and soon, I'll be the foodie queen of the town!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_talk_002" + }, + { + "name": "Topic: Luck Beyond Exams", + "desc": "Here, you can have this soda! Just got myself a bonus bottle! My luck's been off the charts lately—scored a Budoriya mega-deal meal voucher once! Why isn't my exam luck so hot? Well, the senpai swear by the Luck Conservation Law…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "Caught my team chatting with Lavender, calling me \"the summer breeze on a date\"—messy hair but a smile-maker, a real paradox. What do you think, Coco? That's a compliment, right?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_self_001" + }, + { + "name": "About Myself: Nekojita", + "desc": "Whenever I get ramen or takoyaki, I always tell myself, \"Cool it before you eat!\" But then, someone strikes up a conversation, and poof! I forget and—ouch—burnt again! Waah… Even you get a giggle out of it, Coco…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_self_002" + }, + { + "name": "About Myself: Friends", + "desc": "When I'm with my buddies, their cozy vibes are like a power-up! No matter how wiped I am, one big whiff of that friend-fueled warmth like this… agh… and bam! I'm all zippy again—just like that!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_self_003" + }, + { + "name": "About Nelly", + "desc": "Lavender is AMAZING—keeping the director's agenda in perfect order. And she's always so warm when she sees me, even with her busy schedule! Of course, it would be better if she didn't always \"happen to pass by\" when I'm late!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_001" + }, + { + "name": "About Hotori", + "desc": "Hotori Senpai? I… I don't know anything! Waah… It's not that I'm disloyal, I just don't want to be thrown out of Eibon by the ear next time… The hardest things in this world are passing exams and lying to her! She sees through everything!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_002" + }, + { + "name": "About Alphard", + "desc": "The director is really scary! Just a whiff of her scent, and my tail's fur stands on end! If our eyes meet… Oh! So scary! I'd rather do a week of fieldwork in the summer than go to her office!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_003" + }, + { + "name": "About Taygedo", + "desc": "Taygedo is my most reliable ally. We've promised to keep each other accountable on Superman Diary and race to the top of the leaderboard! Gotta keep working out if you want to get stronger, right? Oh, that reminds me of our epic fifty-lap night run last time… what emergency delayed us again?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_004" + }, + { + "name": "About Nanally", + "desc": "Nanally took on a super tough commission, sneaking into an extremely dangerous Anomalous Realm with Sakiri and Edgar! She said it was a heart-stopping, perilous adventure! Thankfully, her Colucci Ultimate Death Shadow Nether Punch saved the day! Haven't seen her for a while after that. Heard Hotori senpai grounded her… Ah, it's hard for geniuses to be recognized in this world!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_005" + }, + { + "name": "About Adler", + "desc": "Mr. Adler? Reliable and reassuring! Getting his help feels like a colleague handing you a brand-new pencil just when you realize you forgot yours in an exam. What's that scent called again? Mr. Adler told me before… Oh yeah, cedar!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_006" + }, + { + "name": "About Lacrimosa", + "desc": "Guess who's Strawberry Milk? Hehe, bet you can't tell—it's our one-and-only Lacrimosa Senpai! Surprised? Why isn't she tomato-flavored? Well, no reason. And don't you think a dreamy senpai goes well with strawberry milk?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_007" + }, + { + "name": "About Eibon Antique Shop", + "desc": "Eibon's a lively bunch, but it's one big cozy family at heart! I'm sure you'll find Eibon to be an awesome home!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_008" + }, + { + "name": "About ETD", + "desc": "\"Each person an army.\" Isn't that thrilling? ETD is not just for eccentrics. They're cool, quirky people, but that doesn't mean that they can't be nice!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_009" + }, + { + "name": "About Bureau of Anomaly Control", + "desc": "Chatty downtime with colleagues is the best! We deal with super important things at the Bureau of Anomaly Control, but we're all human—fretting over mischievous kids or groaning about bills. But it's the little joys, like an extra day off or surprise milk tea from the group leader, that make our day!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_010" + }, + { + "name": "About CSU", + "desc": "Starting in the Containment Unit was a rollercoaster. I got in trouble a lot, but the veterans were there for me, laughing at my tears but staying late to help me. I'm aiming to be the reliable and cheerful heart of the team, just as solid as any ETD Elite!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_about_011" + }, + { + "name": "Character Ascension I", + "desc": "Bam! The new and improved Mint!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "I can hear the wind's whispers more clearly now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "That's Mint for ya! Ace of the CSU!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Coco knows Mint best!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Coco, I love it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Wow, thank you Coco!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I need to put my tail in its place… It's so happy, it won't stop wagging!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Don't doubt me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Get blown away!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Stand firm!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Watch out, don't blink!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Here comes the whirlwind!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Mint's Ultimate: Super Duper Ultra 360 Whirlwind Slash!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_aoe_UI_003" + }, + { + "name": "Ultimate IV", + "desc": "Can you keep up with the wind?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_aoe_UI_004" + }, + { + "name": "Containment I", + "desc": "Alright, let's put this thing in… woah! Phew! That would've ruined my whole day's work! Gotta be careful…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_containment_001" + }, + { + "name": "Containment II", + "desc": "Alright, let's put this thing in… whoa! I can't drop that! Gonna ruin my performance bonus!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_containment_002" + }, + { + "name": "Nullification I", + "desc": "Alright, one step closer to becoming a reliable senpai!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Compared to exams, this is just a piece of cake.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Eh, it's nothing big. Easy peasy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Heh, as lucky as ever!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Hmm? Did I just pick up something incredible?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Thank the winds for guidance!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "So much stuff, my pockets are bursting!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Mm-hmm! Another lucky day for me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Ugh… I'm getting tired…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_hp_001" + }, + { + "name": "Low Health II", + "desc": "Yikes… things are getting serious!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_hp_002" + }, + { + "name": "Low Health III", + "desc": "Huh? Why am I seeing stars?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_hp_003" + }, + { + "name": "Heal I", + "desc": "Phew…! I'm alive!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_fh_001" + }, + { + "name": "Heal II", + "desc": "Mint, back in action!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_fh_002" + }, + { + "name": "Down I", + "desc": "If only I was… a little faster…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_dead_001" + }, + { + "name": "Down II", + "desc": "Has the wind… stopped…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_dead_002" + }, + { + "name": "Down III", + "desc": "Sorry… I held everyone back again…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_dead_003" + }, + { + "name": "Takedown I", + "desc": "Underestimating me comes at a price.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_kill_001" + }, + { + "name": "Takedown II", + "desc": "Your scent is kind of unpleasant.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_kill_002" + }, + { + "name": "Damaged I", + "desc": "Tch… a minor mistake.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_struck_001" + }, + { + "name": "Damaged II", + "desc": "No next time!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Ouch!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "…Focus, focus…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Alright, the CSU Ace is making an entrance!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Heh, let's do this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Here it is!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_QTE" + }, + { + "name": "Entry Attack II", + "desc": "Look out!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Want to cool off?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_QTE_003" + }, + { + "name": "Glide I", + "desc": "Woohoo!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_Fly_001" + }, + { + "name": "Glide II", + "desc": "Riding the wind!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_Fly_002" + }, + { + "name": "Switch I", + "desc": "I'm here to help!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_Switch_001" + }, + { + "name": "Switch II", + "desc": "I got this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_Switch_002" + }, + { + "name": "Switch III", + "desc": "Let's go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_Switch_003" + }, + { + "name": "Special Switch - Zero", + "desc": "I'm here, Coco!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_001" + }, + { + "name": "Special Switch - Lacrimosa", + "desc": "Player Mint, taking over from Lacrimosa Senpai!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_002" + }, + { + "name": "Special Switch - Baicang", + "desc": "I won't let Baicang Senpai down!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_003" + }, + { + "name": "Special Switch - Skia", + "desc": "I'll do my best, Skia Senpai!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_004" + }, + { + "name": "Special Switch - Fadia", + "desc": "Fadia Senpai, I'll do my best to enjoy the fight like you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_005" + }, + { + "name": "Special Switch - Nanally", + "desc": "Honorary Member of the Coluccis is here to help!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_006" + }, + { + "name": "Special Switch: Iroi", + "desc": "Teana, let Mint senpai take over!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_yly_001" + }, + { + "name": "Special Switch - Shinku", + "desc": "Taya, I'm here to help!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_SSC_zh_001" + }, + { + "name": "Teammate Down - Zero", + "desc": "Coco! You're pushing yourself too hard!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_TeammateDown_001" + }, + { + "name": "Teammate Down - Lacrimosa", + "desc": "Lacrimosa Senpai, you need to take a break!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_TeammateDown_002" + }, + { + "name": "Teammate Down - Fadia", + "desc": "Fadia Senpai! That c-crazy obsession… maybe dial back a little?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_TeammateDown_003" + }, + { + "name": "Teammate Down - Nanally", + "desc": "You're the one who hurt the Colucci boss! Mint won't let you get away with this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_TeammateDown_004" + }, + { + "name": "Teammate Down - Iroi", + "desc": "Teana, don't force it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_TeammateDown_005" + }, + { + "name": "Teammate Down - Shinku", + "desc": "Taya, you're overdoing it again!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_TeammateDown_006" + }, + { + "name": "Parry I", + "desc": "Gotcha!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_Parry_001" + }, + { + "name": "Parry II", + "desc": "Watch this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Whoa! Can't touch this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Swifter than the breeze!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC001/Play_Vo_Char_NPC001_DodgeCombo_002" + } + ] + } + }, + { + "id": "1020", + "name": "Haniel", + "description": "My dream is to become a beautiful high school girl who saves the world!", + "element": [ + { + "element_id": "Psyche", + "name": "Psyche" + } + ], + "rarity": 4, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_020", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_020", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_020_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_haniya", + "tags": { + "char_tags": [ + { + "name": "Buff", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_fuzhu01" + }, + { + "name": "DMG Boost", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zengyi" + } + ], + "arcs_tags": { + "type_id": "1", + "name": "Solid", + "icon": "/Game/UI/UI/player/YH_UI_icon_solid" + } + }, + "reaction": [ + { + "name": "Nova", + "desc": "Inflicts Nova on the target for <NumGreen>5s</> after triggering Esper Cycle. When the effect ends, the target takes massive <bule>Mental Damage</>." + }, + { + "name": "Stain", + "desc": "Increases the target's <bule>Psyche and Lakshana DMG</> taken by <NumGreen>20%</> for <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1020_0", + "characterId": "1020", + "name": "Agent in Training", + "desc": "A support T-shirt for \"Agent Gen Z - Red.\" Just wearing it should definitely attract fellow fans… right?", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_020", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_020_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_haniya", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_naniya", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1130, + 1220, + 1311, + 1401, + 1492, + 1582, + 1672, + 1763, + 1853, + 1944, + 2034, + 2124, + 2215, + 2305, + 2396, + 2486, + 2576, + 2667, + 2757, + 2848, + 2938, + 3028, + 3119, + 3209, + 3300, + 3390, + 3480, + 3571, + 3661, + 3752, + 3842, + 3932, + 4023, + 4113, + 4204, + 4294, + 4384, + 4475, + 4565, + 4656, + 4746, + 4836, + 4927, + 5017, + 5108, + 5198, + 5288, + 5379, + 5469, + 5560, + 5650, + 5740, + 5831, + 5921, + 6012, + 6102, + 6192, + 6283, + 6373, + 6464, + 6554, + 6644, + 6735, + 6825, + 6916, + 7006, + 7096, + 7187, + 7277, + 7368, + 7458, + 7548, + 7639, + 7729, + 7820, + 7910, + 8000, + 8091, + 8181, + 8272 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 62, + 65, + 68, + 71, + 74, + 78, + 81, + 84, + 87, + 90, + 93, + 96, + 99, + 102, + 105, + 109, + 112, + 115, + 118, + 121, + 124, + 127, + 130, + 133, + 136, + 140, + 143, + 146, + 149, + 152, + 155, + 158, + 161, + 164, + 167, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 202, + 205, + 208, + 211, + 214, + 217, + 220, + 223, + 226, + 229, + 233, + 236, + 239, + 242, + 245, + 248, + 251, + 254, + 257, + 260, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 295, + 298, + 301, + 304, + 307 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 70, + 76, + 81, + 87, + 92, + 98, + 104, + 109, + 115, + 120, + 126, + 132, + 137, + 143, + 148, + 154, + 160, + 165, + 171, + 176, + 182, + 188, + 193, + 199, + 204, + 210, + 216, + 221, + 227, + 232, + 238, + 244, + 249, + 255, + 260, + 266, + 272, + 277, + 283, + 288, + 294, + 300, + 305, + 311, + 316, + 322, + 328, + 333, + 339, + 344, + 350, + 356, + 361, + 367, + 372, + 378, + 384, + 389, + 395, + 400, + 406, + 412, + 417, + 423, + 428, + 434, + 440, + 445, + 451, + 456, + 462, + 468, + 473, + 479, + 484, + 490, + 496, + 501, + 507, + 512 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Sterry Express Staff", + "description": "Flowing water has no form, drifting wind leaves no trace, and no detail of an Anomaly Commission should ever be overlooked. She looks like an ordinary high school girl, but in reality, she's an elite courier who traverses the shadows… and is the record holder for fastest delivery at Sterry Express.\n\"My name's Haniel! Hethereau’s goddess of headsets… Hehe, just call me whenever you need me!\"", + "birthday": "March 27", + "homePlace": "Sterry Express", + "abilityName": "Amazing Grace", + "introduction": "My dream is to become a beautiful high school girl who saves the world!", + "voiceChinese": "苏子芜", + "voiceEnglish": "Alexis Tipton", + "voiceJapanese": "石見舞菜香", + "voiceKorean": "김가령" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Haniel. Public Bagel Account: @Haniel_SterryExpress. Private Account: @genesectparanormaldeptace. Current main alt: @fancontentmaster. The public account is for plugging Sterry Express and managing the brand image of Sterry Express—\"If the money's good, we deliver anything!\" (Jiuyuan's words). The private account is Haniel's main social hub: fics, art, music, cosplay sets… In the scene, she's a god-tier creator with an endless output. Her only flaw? Her posting schedule is a disaster! Her fans live in permanent agony, screaming: \"It's so good, I'll take whatever crumbs I can get!\" As for the alt, on days she's too lazy to post, Haniel just surfs Bagel incognito on various throwaway accounts. The second her cover is blown, she jumps ship to the next. She's sworn to defend the sacred right to consume fan content in peace.\r\n\r\nEver delivered a package before? Every Sterry Express courier has their own delivery ritual. For Haniel, the moment she gets the delivery slip, it's like a quest notification has dropped straight into her hands——\r\nToday's Quest: Deliver Package (0/1)\r\nPackage Integrity: 100%\r\nTime Left: 00:59:59\r\n3-Star Rating:\r\nNo-Damage Delivery (0/1)\r\nOn-Time Delivery (0/1)\r\nService with a Smile (0/1)\r\n\r\nWhen Haniel was little, she had a ton of so-called \"hobbies\": violin, horseback riding, chess… Just like every other kid in her circle, she went through the usual \"elite education\" routine. She didn't hate any of it, but that didn't mean she liked it either. It all felt like a drizzly, soggy day where the world's colors are washed out and even birds feathers get stuck together.\r\nHaniel likes sunny days better. So, before her nightly bedtime story, little Haniel sat down with her mother for a real conversation on equal footing. She laid out what she wanted and what confused her, asking the person closest to her for help. Her mom gently stroked her hair and apologized, saying she'd failed to notice Haniel's feelings in time.\r\nFinding your true \"hobby,\" the thing that's really yours, is hard. Luckily, Haniel was one of the fortunate ones." + }, + { + "name": "\"Gen Z\" Anniversary Edition Headset", + "desc": "The path to becoming an Elite Courier isn't always smooth sailing.\nDuring her 16th delivery quest, Haniel accidentally lost a package. Even though it was found three hours later and Owner Jiuyuan didn't blame her for anything, Haniel still felt really guilty. Not wanting to worry her family too much, Haniel acted normal at the dinner table, casually chatting about all sorts of topics she was interested in. Of course, brave Haniel wouldn't let negative feelings bother her for long. After a good night's sleep, she was back to her usual self… but before leaving the house, Haniel received a gift. The headset she had mentioned at dinner the night before was now sitting quietly by her bedroom door.\n\"Haniel will definitely become the best courier ever,\" read the note on the gift box." + }, + { + "name": "Old Journal", + "desc": "Yellowed stickers and childish handwriting… this is the secret Haniel has hidden in the deepest part of her bookshelf.\n\"The royal hounds are nothing but my steeds. In ten minutes, your crimes will be exposed!\"\n\"Only those who risk everything for victory have the right to stand on the battlefield!\"\n\"You bastards without hope or dreams, I'll keep my back straight and live on until my body is destroyed!\"\n\"The destination doesn't matter at all, as long as I keep moving forward, as long as I don't stop…\"\n\"My revenge… this is where the curtain truly rises.\"\nAfter all, who doesn't have a notebook stuffed full of childhood memories?" + }, + { + "name": "Custom Guitar Pick", + "desc": "After finishing binge-watching \"Notes of the Future\" at 3:43 AM, Haniel ordered a guitar while her eyes were still red from crying. This time, she would rewrite the band's ending herself.\nUnfortunately, her elite education included violin, viola, and cello, but she had never been taught how to play guitar. None of that mattered though. Brave Haniel wasn't afraid of any challenge!\nPicture this: After school, Haniel rides her bike alone to the park at sunset, a gentle breeze brushing the loose strands by her temples. By the fountain, the sentimental, shy girl finally finds a quiet corner where no one will notice. She takes a deep breath and pulls out a guitar she got from her father, the pick gently caressing the strings as beautiful melodies flow from the girl's fingertips. Leaves fall onto the water's surface, and when the performance ends, another girl jumps out from the nearby bushes with stars in her eyes, saying \"Would you like to start a band with me?\"\nSo Haniel sat in the park with her guitar for three whole months, with only cats as her audience… though cat audiences are pretty good too." + }, + { + "name": "Sticky Note with Chili Oil Stains", + "desc": "How to Brew the Perfect Cup of Black Tea:\nMaterials needed: Tea leaves (select OP-grade loose leaf, not tea bags), soft water (no mineral water), fresh pasteurized milk, a bit of white sugar, and an elegant tea set.\nSteps: 1. Boil water, bring the soft water to a boil\n2. Warm the pot for one minute\n3. Ration the tea leaves (one teaspoon of tea leaves per cup)\n4. Steep the tea leaves for three minutes\n5. It's best to drink tea from ceramic cups\n6. Add the milk to the cup first, then slowly pour in the tea\n7. Add sugar according to personal preference\n8. The best drinking temperature is between 60–65 degrees Celsius\n### Remember: Milk first, then tea\nA line of messy handwriting: Tea first then milk tastes good too" + }, + { + "name": "Paw Bookmark", + "desc": "Haniel's books are always filled with bookmarks, each stamped with little animal paw prints. Whenever Haniel befriends small animals in the park, she makes a special bookmark for them, stamping their paws as keepsakes. These little travelers are always on the move. Who knows when they'll meet again?\nThere's always one slightly worn bookmark in Haniel's books. It’s stamped with a black, somewhat incomplete kitten paw print, and the markings match the black and white bookmark. Haniel never became friends with this one… the cat was far too cautious. While the other cats happily shared the snacks Haniel brought, this one would always watch quietly from a distance.\nIt still sleeps peacefully on the same little hillside. Haniel sometimes goes there to play guitar, even though she sounds terrible." + } + ], + "melee": [ + { + "id": "GA_Haniel_Melee", + "name": "Genesse Technique", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Genesse Technique</>", + "<Title>Basic Attack: Paranormal Cannon</>", + "<Title>Basic Attack: Paranormal Entrance</>", + "<Title>Critical Riposte: Ace Sweep</>" + ], + "desc": [ + "Fires magic projectiles and performs up to <NumGreen>5</> consecutive attacks, dealing <Hun>Psyche DMG</>.", + "Hold Basic Attack during the 1st hit to charge, then fire <NumGreen>a</> charged cannon forward.", + "Press Basic Attack while airborne to plunge, dealing <NumGreen>1</> instance of <Hun>Psyche DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Genesse Technique after a Critical Dodge. Being this slow will get us customer complaints, you know? Dodges the attack and fires a missile, dealing <NumGreen>1</> instance of <Hun>Psyche DMG</>, and reducing Break." + ], + "desc_short": [ + "Deals <Hun>Psyche DMG</>.", + "Deals <Hun>Psyche DMG</> and ricochets up to <NumGreen>4</> times.", + "Deals <Hun>Psyche DMG</>.", + "Deals <NumGreen>1</> instance of <Hun>Psyche DMG</>." + ], + "context": "<Italic>The difference between magic tricks and real magic? As long as you believe, it exists… Like conjuring orbs with your bare hands?</>", + "icon": "/Game/UI/UI_Icon/Skill/Haniel_Melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Haniel_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97, + 105 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 58, + 62, + 67, + 73, + 79, + 85, + 92, + 99, + 107, + 116, + 125, + 135, + 146 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Melee4_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}% *4", + "values": [ + [ + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97, + 105, + 113, + 123, + 133 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Airattack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 82, + 88, + 95, + 103, + 111, + 120, + 130, + 140, + 151, + 163, + 177, + 191, + 206 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Branch_Damage1", + "name": "Branch DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 36, + 38, + 42, + 45, + 49, + 52, + 57, + 61, + 66, + 72, + 77, + 83, + 90 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel020_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 105, + 113, + 122, + 132, + 143, + 154, + 166, + 180, + 194, + 210, + 227, + 245, + 264 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Haniel_Skill", + "name": "Silent Moonlit Forest Guardian", + "type_name": "Redirect Skill", + "desc_name": "Silent Moonlit Forest Guardian", + "desc": "\"O owl of the quiet, moonlit forest depths, answer my call!\" Throws her portable speaker Hootie, dealing <Hun>Psyche DMG</> to an area.\r\nGrants the Team an ATK bonus based on Haniel's Base ATK while Hootie is active.\r\nGrants Hootie <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&HanielSkill\">Four-Part Harmony</> when the current character attacks, up to <NumGreen>1</> stack every <NumGreen>0.5s</>. Accumulating <NumGreen>4</> stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HanielSkill\">Four-Part Harmony</> triggers <hot textstyle=\"TextEXPL\" param=\"nouns&HanielUltraSkill\">Ensemble</>, dealing <Hun>Psyche DMG</> to enemies in an area around Hootie.\r\nOnly <NumGreen>1</> Hootie can exist at a time. Casting again refreshes Hootie's duration. Hootie remains when switching characters. ", + "desc_short": "Deploys Hootie to remain on the field and provide buffs, while dealing <Hun>Psyche DMG</> with attacks.", + "context": "<Italic>O owl of the quiet, moonlit forest depths, I, Haniel, hereby forge a contract with you! …Come on, Hootie, work with me here.</>", + "icon": "/Game/UI/UI_Icon/Skill/Haniel_Skill", + "additional_desc": [ + { + "name": "Four-Part Harmony", + "desc": "While Hootie is active, grants Hootie <NumGreen>1</> stack when the current character attacks, with a maximum of <NumGreen>1</> stack gained every <NumGreen>0.5s</>, up to <NumGreen>4</> stacks." + }, + { + "name": "Ensemble", + "desc": "Triggers after accumulating <NumGreen>4</> stacks of <TextEXPL>Four-Part Harmony</>, dealing AoE <Hun>Psyche DMG</> to enemies within range." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Haniel_Skill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Skill2_Damage", + "name": "Spread DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ] + ] + }, + { + "name": "ATK Bonus Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22 + ] + ] + }, + { + "name": "Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + }, + { + "id_stats": "GA_Haniel_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Haniel_UltraSkill", + "name": "A Melody Named Haniel", + "type_name": "Ultimate", + "desc": "Genesse Girls' Academy Paranormal Department! Assuming control! Releases an enhancement field centered on herself and gaining the Paranormal Ace effect for a period of time.\r\nGrants the Team an ATK bonus based on Haniel's Base ATK.\r\nTriggering <hot textstyle=\"TextEXPL\" param=\"nouns&HanielUltraSkill\">Ensemble</> simultaneously triggers 1 additional Ensemble - Symphony effect around the character with increased DMG and range. Ensemble - Symphony does not grant <hot textstyle=\"TextEXPL\" param=\"nouns&HanielPassive2\">Plot Armor</> for Haniel. When triggering <hot textstyle=\"TextEXPL\" param=\"nouns&HanielUltraSkill\">Ensemble</>, the current active character's next attack deals additional damage for <NumGreen>3s</>. Effect does not stack.\r\nWhile Paranormal Ace is active, Hootie's duration timer is paused until the end of the effect.", + "desc_short": "Haniel enters Paranormal Ace state, enhancing Hootie's effects and boosting her own abilities.", + "context": "<Italic>You won't find Genesse Girls' Academy on any map of Hethereau, and naturally you won't find the Paranormal Department either. This story begins with Haniel's first serialized novel…</>", + "icon": "/Game/UI/UI_Icon/Skill/Haniel_UltraSkill", + "additional_desc": [ + { + "name": "Ensemble", + "desc": "Triggers after accumulating <NumGreen>4</> stacks of <TextEXPL>Four-Part Harmony</>, dealing AoE <Hun>Psyche DMG</> to enemies within range." + }, + { + "name": "Plot Armor", + "desc": "Grants Haniel <NumGreen>1</> stack of <TextEXPL>Plot Armor</> when the current character triggers <TextEXPL>Ensemble</>, increasing the ricochet cap of Paranormal Cannon. Grants <NumGreen>1</> stack of <TextEXPL>Plot Armor</> <NumGreen>per</> <TextEXPL>Ensemble</> trigger.Grants <NumGreen>2</> stacks of <TextEXPL>Plot Armor</> <NumGreen>per</> <TextEXPL>Ensemble</> trigger while Haniel is in Paranormal Ace state. Can accumulate up to <NumGreen>4</> stacks of <TextEXPL>Plot Armor</>." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Haniel_Ultraskill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 300, + 324, + 349, + 377, + 408, + 440, + 476, + 514, + 555, + 599, + 647, + 699, + 755 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_Ultraskill2_Damage", + "name": "Spread DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 69, + 75 + ] + ] + }, + { + "id_stats": "GE_Player_Haniel_UltraSkill_Extra_Damage", + "name": "Enhanced Attack DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 69, + 75 + ] + ] + }, + { + "name": "ATK Bonus Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22 + ] + ] + }, + { + "name": "Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "id_stats": "GA_Haniel_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Haniel_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Haniel_QTE", + "name": "Easter Egg Time", + "type_name": "Support Skill", + "desc": "Don't be so boring! How about a little easter egg? Fires <NumGreen>1</> magic projectile at the enemy, dealing <NumGreen>1</> instance of <Hun>Psyche DMG</>.", + "desc_short": "Deals <Hun>Psyche DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/Haniel_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Haniel_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Haniel_Passive_1", + "name": "It's Friendship!", + "type_name": "Passive Skill", + "desc": "<TextHLT>Nova Enhancement</>: Allows all allies to drain ATK from the target when Nova ends. The target loses ATK equal to 4% of Haniel's Base ATK, and each ally gains ATK equal to 8% of Haniel's Base ATK. The total drain is capped at 16% of Haniel's Base ATK, and the target cannot lose more than 20% of their initial ATK. Restores both parties' stats upon exiting combat.", + "context": "<Italic>For Haniel, she'd rather hear lively stories about companions than lonely tales of heroism. Even a bunch of hot-headed fools would be fine.</>", + "icon": "/Game/UI/UI_Icon/Skill/Haniel_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Haniel_Passive_2", + "name": "It's Bond!", + "type_name": "Passive Skill", + "desc": "Grants Haniel <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&HanielPassive2\">Plot Armor</> when the current character triggers <hot textstyle=\"TextEXPL\" param=\"nouns&HanielUltraSkill\">Ensemble</>, increasing the ricochet cap of Paranormal Cannon. Grants <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&HanielPassive2\">Plot Armor</> <NumGreen>per</> <hot textstyle=\"TextEXPL\" param=\"nouns&HanielUltraSkill\">Ensemble</> trigger.\r\nGrants <NumGreen>2</> stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HanielPassive2\">Plot Armor</> <NumGreen>per</> <hot textstyle=\"TextEXPL\" param=\"nouns&HanielUltraSkill\">Ensemble</> trigger while Haniel is in Paranormal Ace state.\r\nCan accumulate up to <NumGreen>4</> stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HanielPassive2\">Plot Armor</>.", + "context": "<Italic>Sports anime makes you want to play sports. Band anime makes you want to learn an instrument. Battle anime… well, I wouldn't recommend trying that.</>", + "icon": "/Game/UI/UI_Icon/Skill/Haniel_Pas2", + "additional_desc": [ + { + "name": "Ensemble", + "desc": "Triggers after accumulating <NumGreen>4</> stacks of <TextEXPL>Four-Part Harmony</>, dealing AoE <Hun>Psyche DMG</> to enemies within range." + }, + { + "name": "Plot Armor", + "desc": "Grants Haniel <NumGreen>1</> stack of <TextEXPL>Plot Armor</> when the current character triggers <TextEXPL>Ensemble</>, increasing the ricochet cap of Paranormal Cannon. Grants <NumGreen>1</> stack of <TextEXPL>Plot Armor</> <NumGreen>per</> <TextEXPL>Ensemble</> trigger.Grants <NumGreen>2</> stacks of <TextEXPL>Plot Armor</> <NumGreen>per</> <TextEXPL>Ensemble</> trigger while Haniel is in Paranormal Ace state. Can accumulate up to <NumGreen>4</> stacks of <TextEXPL>Plot Armor</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_Haniel_01", + "name": "A Pro on the Job", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_dgns", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Haniel increases dish prices by an additional <Green2>0.12</> Fons." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Haniel reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Haniel increases dish prices by an additional <Green2>0.12</> Fons." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Haniel reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Haniel increases dish prices by an additional <Green2>0.18</> Fons." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "New here! Genius transfer student reporting in!", + "desc": "Increases Plot Armor's max stacks to <NumGreen>6</> and raises Paranormal Cannon's ricochet limit to <NumGreen>6</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1020_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Legendary! The g'old back row window seat!", + "desc": "Increases Hootie's duration by <NumGreen>4s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1020_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Assemble! The hero team is formed!", + "desc": "Increases Haniel's Crit Chance by <NumGreen>20%</> while in Paranormal Ace state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1020_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Seaside! Beach episode!", + "desc": "While in Paranormal Ace state, if Haniel triggers <hot textstyle=\"TextEXPL\" param=\"nouns&HanielUltraSkill\">Ensemble</>, her next attack's additional DMG increases by <NumGreen>100%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1020_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Ensemble", + "desc": "Triggers after accumulating <NumGreen>4</> stacks of <TextEXPL>Four-Part Harmony</>, dealing AoE <Hun>Psyche DMG</> to enemies within range." + } + ] + }, + { + "name": "Crisis! Shattering trust!", + "desc": "Increases Haniel's <Hun>Psyche DMG</> by <NumGreen>30%</> while in Paranormal Ace state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1020_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Finale! For the coming dawn!", + "desc": "Reduces Hootie's CD by <NumGreen>4s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1020_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Prequel", + "desc": "Increases the skill level of Genesse Technique, Silent Moonlit Forest Guardian, and A Melody Named Haniel by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Sequel", + "desc": "Increases the team's Crit DMG by <NumGreen>12%</> while in the Paranormal Ace state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1020/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_005", + "amount": 100 + }, + { + "item_id": "Food_006", + "amount": 100 + }, + { + "item_id": "Food_026", + "amount": 100 + }, + { + "item_id": "Flower0009", + "amount": 200 + }, + { + "item_id": "BigPoster001", + "amount": 200 + }, + { + "item_id": "BigPoster003", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_eri_002", + "amount": 200 + }, + { + "item_id": "Figure_eri_01_001", + "amount": 400 + }, + { + "item_id": "Figure_eri_01_002", + "amount": 400 + }, + { + "item_id": "Furniture_Gacha_eri_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1020" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1020" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1020" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1020" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1020" + ], + "amount": [ + 50000, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Hey there! I'm Haniel Cresswell, but you can just call me Haniel. If you need anything, shout my name! I swear on the name of \"E.A.R\"—if it's your voice, I'll always hear it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_meet_001" + }, + { + "name": "Chat: Limited Sales", + "desc": "Alarm—check! Wi-Fi—check! This time I'm definitely getting that limited drop!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_chat_001" + }, + { + "name": "Chat: Spells", + "desc": "Hahuie! Shulahula! Supercharged Shockwave Ultra Blaster—by the name of Haniel, I summon you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_chat_002" + }, + { + "name": "Chat: Cat Food", + "desc": "Gotta bring some new flavors of cat food when I visit the kittens this weekend.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_chat_003" + }, + { + "name": "Sunny", + "desc": "Such a nice sunny day. Perfect for a nap… or just about anything.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_weather_001" + }, + { + "name": "Rainy", + "desc": "How about some chill beats? Ugh, hope the headphones don't short again.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_weather_002" + }, + { + "name": "Cold", + "desc": "It's freezing! Time for hotpot! Extra spicy, of course!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_weather_003" + }, + { + "name": "Hot", + "desc": "Calm, calm, calm… Phew… Haniel's 72nd attempt at meditation… failed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning! A brand new day starts now!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Afternoon! Got lunch plans? Want a rec?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Evening! I'm heading out for a stroll. Wanna come?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_greet_003" + }, + { + "name": "Good Night", + "desc": "Late night's the best time to catch up on anime. Don't worry, just one episode before bed! Probably…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_greet_004" + }, + { + "name": "Hobbies", + "desc": "My goal? Collect every limited-edition collab headset! The new ones I can snag at launch, but for vintage ones, it's all about patience. Sure, even the best-kept old headsets can't beat cheap modern ones in sound quality—but classic OSTs deserve that analog crackle. I'll show you my collection sometime.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_hobby_001" + }, + { + "name": "Worries", + "desc": "Big worries? Not really. Small ones? Tough homework, noisy Illica, vague delivery addresses, picky customers… nothing a good meal and sleep can't fix. Haniel's always back at full power the next day!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_vexation_001" + }, + { + "name": "Topic: Anomalies", + "desc": "The elders said there was a time when humans, Espers, and anomalies were always at odds. But by the time I was born, anomalies felt more like family—pets, even. Sure, not everything's perfect, but most anomalies are super cute!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_talk_001" + }, + { + "name": "Topic: Manners", + "desc": "Knives on the left, forks on the right, and no slurping your soup? If you can't enjoy food freely, what's the point? Like spicy sticks—put 'em on a gilded plate with violin music… still won't beat eating 'em straight from the bag.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_talk_002" + }, + { + "name": "Topic: Fellow Enthusiasts", + "desc": "It's wild how people connect—just sharing love for a character can make two strangers close friends. There are things I can't even tell my real-life friends that I'll share with someone online in a heartbeat. I've got one really special online friend… I hope we meet offline someday.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_talk_003" + }, + { + "name": "About Myself: Vest", + "desc": "The worst thing about following a series? Hiatus notices. You want to lock the author in a room till they finish! But then when it's my turn to write… heh. That's what alt accounts are for! I'm not skipping updates—I'm… looking for inspiration!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_self_001" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "I used to envy Espers. Like the heroes in anime—chosen ones, saving the world. But when it was my turn, I realized: I don't want to be the protagonist. I want the power to protect others. If I'd been a little stronger back then… maybe it would've survived like the other kittens. But I'm not telling you this to make you sad. Let's go visit together sometime. It's a really pretty place.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_self_002" + }, + { + "name": "About Myself: Freedom", + "desc": "\"Some birds are meant for cages—their feathers fluff up from fine feed and water. But some birds can't be caged. Their wings only shine in the open sky.\" Me? I want a warm home and freedom. Maybe that's greedy, but I'm happy with my life.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_self_003" + }, + { + "name": "About Jiuyuan", + "desc": "Working at Sterry Express doesn't get in the way of school, pays well, and comes with a world-saving mission! Jiuyuan's also super generous with bonuses—what's not to love? I, Haniel, will become Sterry's top courier! If only Jiuyuan wouldn't get so mad—stress causes wrinkles, y'know… cough.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_about_001" + }, + { + "name": "About Jenson", + "desc": "The first time I met Jenson, I thought—\"Wow, this guy is so cool!\" Like a dependable anime adult! Ask him anything, he's got an answer! No way he's just a normal shopkeep—bet he's hiding some secret identity. That's how it goes in shows!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_about_002" + }, + { + "name": "About Illica", + "desc": "Ugh, that noisy Silly! If I'd known we'd reunite at Sterry, I wouldn't have written so much in his yearbook… But hey, he wrote a bunch in mine too. Even gave me a headset I'd wanted for ages as a grad gift. So… I'll let it slide.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_about_003" + }, + { + "name": "About Hathor", + "desc": "I really wanna try Hathor's motorcycle. Must feel amazing to ride! People say she seems cold—but that's only 'cause they don't know her. With me around, even Esper Ability blowups are no big deal! Go Haniel! No fear!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_about_004" + }, + { + "name": "About Sterry Express", + "desc": "I saved Hathor when her Esper powers backfired. Jiuyuan brought me into Sterry after that. Then I met Jenson, and Illica showed up again… It's like the start of \"The Haniel Chronicles\"… no, wait, maybe \"Courier X Stelry\"? \"Masked Courier\"? We'll work on it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_about_005" + }, + { + "name": "About Eibon Antique Shop", + "desc": "Hidden relic shop on a shady street vs. undercover express company in plain sight—this arc needs a movie adaptation!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_about_006" + }, + { + "name": "Character Ascension I", + "desc": "So THIS is… power?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Ready to save the world?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "My feathers look nicer now!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Psst, do you hear that…? Haniel's affection, up, up, up!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Wow, how did you know I liked this? Can you appraise preferences too? So cool!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Is this for me? Thanks, thanks, thanks, thanks, thanks!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Next time when I get a request from Eibon, I'll mark it urgent for free!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Whoots wave!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "How about some variation?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Don't be such a bore!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_skill_003" + }, + { + "name": "Ultimate I", + "desc": "My turn!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Now it's my time to shine!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Leave the accompaniment to me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Punch out! Another job smoothly… uhh… smoothly done!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_containment_001" + }, + { + "name": "Containment II", + "desc": "No worries! My packing skills are top-notch… Whoa… uhhh… whew, it's fine, nothing's wrong.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_containment_002" + }, + { + "name": "Nullification I", + "desc": "Remember to give a five-star review!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_anomaly_001" + }, + { + "name": "Nullification II", + "desc": "That's a wrap!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_anomaly_002" + }, + { + "name": "Unexpected Gains I", + "desc": "This doesn't need to be signed for, right?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Oh? A hidden reward?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Can this luck carry over to my next gacha pull?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Let's see what goodies we've got!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Mmm! This deserves a celebratory Bagel post!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "I knew I'd be lucky today!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_windfall_006" + }, + { + "name": "Low Health I", + "desc": "I'm so tired…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_hp_001" + }, + { + "name": "Low Health II", + "desc": "Battery running low…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_hp_002" + }, + { + "name": "Low Health III", + "desc": "Need a supply drop ASAP!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_hp_003" + }, + { + "name": "Heal I", + "desc": "Perfect condition!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_fh_001" + }, + { + "name": "Heal II", + "desc": "The invincible Haniel is back!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_fh_002" + }, + { + "name": "Down I", + "desc": "It's not supposed to end like this…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_dead_001" + }, + { + "name": "Down II", + "desc": "Can I get a New Game Plus…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_dead_002" + }, + { + "name": "Down III", + "desc": "Sorry, it's up to y'all now…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_dead_003" + }, + { + "name": "Takedown I", + "desc": "Piece of cake!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_kill_001" + }, + { + "name": "Takedown II", + "desc": "Behold the power of the ace!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_kill_002" + }, + { + "name": "Damaged I", + "desc": "Ouch!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_struck_001" + }, + { + "name": "Damaged II", + "desc": "Minor slip-up!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "That hurts!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "The package isn't damaged, is it?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "It's expensive to hire an Elite Courier, you know!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_deploy_001" + }, + { + "name": "Deploy II", + "desc": "I hear someone yearning for Haniel!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Perfect throw!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Where are you looking at?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Strike three, you're out!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_QTE_003" + }, + { + "name": "Glide I", + "desc": "Whoosh! Hyah! Rise!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_Fly_001" + }, + { + "name": "Glide II", + "desc": "Get ready! Time for a stunning entrance!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_Fly_002" + }, + { + "name": "Switch I", + "desc": "Ready to save the day!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_Switch_001" + }, + { + "name": "Switch II", + "desc": "Time to switch up the beat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_Switch_002" + }, + { + "name": "Switch III", + "desc": "I heard your calling!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_Switch_003" + }, + { + "name": "Special Switch - Jiuyuan", + "desc": "Jiuyuan! Leave it to me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_SSC_001" + }, + { + "name": "Special Switch - Hathor", + "desc": "Hathor! Time for my shift!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_SSC_002" + }, + { + "name": "Special Switch - Nanally", + "desc": "Let's rock! Roaring Tiger!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_SSC_003" + }, + { + "name": "Teammate Down - Jiuyuan", + "desc": "How dare you bully Jiuyuan!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_TeammateDown_001" + }, + { + "name": "Teammate Down - Hathor", + "desc": "Hathor! Don't try to tough it out alone!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_TeammateDown_002" + }, + { + "name": "Teammate Down - Nanally", + "desc": "We can't fall at a time like this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_TeammateDown_003" + }, + { + "name": "Parry I", + "desc": "Rhythm games are my specialty!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_Parry_001" + }, + { + "name": "Parry II", + "desc": "Catch the beat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Hehe, I maxed out my dodge stat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Uh-uh, too slow!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC014/Play_Vo_Char_NPC014_DodgeCombo_002" + } + ] + } + }, + { + "id": "1021", + "name": "Edgar", + "description": "Eibon Antique Shop Member", + "element": [ + { + "element_id": "Cosmos", + "name": "Cosmos" + } + ], + "rarity": 4, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_021", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_021_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_021_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_aidejia", + "tags": { + "char_tags": [ + { + "name": "Survival", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag02" + }, + { + "name": "Healing", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhiliao" + } + ], + "arcs_tags": { + "type_id": "2", + "name": "Liquid", + "icon": "/Game/UI/UI/player/YH_UI_icon_liquid" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1021_0", + "characterId": "1021", + "name": "All-Seeing", + "desc": "The wide collar can cover half the face, acting like a protective shell. Perfect for hiding uncertain expressions.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_021", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_021_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_aidejia", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_aidejia", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1350, + 1458, + 1566, + 1674, + 1782, + 1890, + 1998, + 2106, + 2214, + 2322, + 2430, + 2538, + 2646, + 2754, + 2862, + 2970, + 3078, + 3186, + 3294, + 3402, + 3510, + 3618, + 3726, + 3834, + 3942, + 4050, + 4158, + 4266, + 4374, + 4482, + 4590, + 4698, + 4806, + 4914, + 5022, + 5130, + 5238, + 5346, + 5454, + 5562, + 5670, + 5778, + 5886, + 5994, + 6102, + 6210, + 6318, + 6426, + 6534, + 6642, + 6750, + 6858, + 6966, + 7074, + 7182, + 7290, + 7398, + 7506, + 7614, + 7722, + 7830, + 7938, + 8046, + 8154, + 8262, + 8370, + 8478, + 8586, + 8694, + 8802, + 8910, + 9018, + 9126, + 9234, + 9342, + 9450, + 9558, + 9666, + 9774, + 9882 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 53, + 56, + 58, + 61, + 64, + 66, + 69, + 72, + 74, + 77, + 80, + 82, + 85, + 87, + 90, + 93, + 95, + 98, + 101, + 103, + 106, + 109, + 111, + 114, + 117, + 119, + 122, + 125, + 127, + 130, + 133, + 135, + 138, + 140, + 143, + 146, + 148, + 151, + 154, + 156, + 159, + 162, + 164, + 167, + 170, + 172, + 175, + 178, + 180, + 183, + 186, + 188, + 191, + 193, + 196, + 199, + 201, + 204, + 207, + 209, + 212, + 215, + 217, + 220, + 223, + 225, + 228, + 231, + 233, + 236, + 239, + 241, + 244, + 246, + 249, + 252, + 254, + 257, + 260, + 262 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 68, + 73, + 79, + 84, + 90, + 95, + 101, + 106, + 112, + 117, + 122, + 128, + 133, + 139, + 144, + 150, + 155, + 160, + 166, + 171, + 177, + 182, + 188, + 193, + 199, + 204, + 209, + 215, + 220, + 226, + 231, + 237, + 242, + 248, + 253, + 258, + 264, + 269, + 275, + 280, + 286, + 291, + 296, + 302, + 307, + 313, + 318, + 324, + 329, + 335, + 340, + 345, + 351, + 356, + 362, + 367, + 373, + 378, + 384, + 389, + 394, + 400, + 405, + 411, + 416, + 422, + 427, + 432, + 438, + 443, + 449, + 454, + 460, + 465, + 471, + 476, + 481, + 487, + 492, + 498 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Eibon Staff", + "description": "Edgar's quietness often stems from either being absorbed in an intriguing problem or not knowing how to express himself. In Eibon, a place full of oddballs, Edgar is neither criticized nor ignored for being quiet.\n\"Ahem, I've decided to draft a grand plan for the Coluccis' revitalization tonight.\"\n\"Leave me out of it.\"\n\"Overruled! Sakiri, you and Edgar both have to come.\"\n\"I…\"\n\"Eh—no way.\"\nThough, sometimes Edgar's silence is because he doesn't get a chance to speak…", + "birthday": "October 7", + "homePlace": "Eibon Antique Shop", + "abilityName": "Finnegan's Vigil", + "introduction": "Thinks quick, looks like a kid. Is a kid, actually.", + "voiceChinese": "四白", + "voiceEnglish": "Casey Mongillo", + "voiceJapanese": "三瓶由布子", + "voiceKorean": "장채연" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Of the \"Eibon Anomaly Detectives,\" most say he looks the most befitting of the 'detective' mantle. Edgar neither denies nor confirms this… Probably because explaining it would be really, really troublesome.\r\nAfter all, his other titles include \"Eibon Ace Trio,\" \"Hyelp's Most Promising Rising Star,\" \"Bridge Crossings' Top 3 Anomaly Hunter,\" and countless other impressive-sounding nicknames that Nanally, Sakiri, and Taygedo (and sometimes Kiroumaru too) casually make up.\r\n\r\nDespite still being a baby-faced boy, he's remarkably mature for his age; almost old-fashioned, likely because the other two are so impulsive that Edgar is always the one left bowing and thanking people. More often than not, he's the one apologizing and paying the bills.\r\nOf course, Edgar's main responsibilities are gathering intel and planning operations. As for how many times those plans have been followed… well, as long as the results are good, who cares? Edgar has come to fully embrace this philosophy; though it doesn't stop him from carefully preparing each time and having a Plan B ready for any unexpected situations that might (or rather, definitely will) occur.\r\nTaygedo often watches the three young Hunters head out and sighs with mock profundity: \"Future Edgar will be just like Adler!\"" + }, + { + "name": "Like mother, like son.", + "desc": "They say forgetting is part of growing up. Most adults only retain hazy fragments of their childhood memories, as if viewing them through some kind of fuzzy filter that makes everything impossible to see clearly.\r\n\r\nEdgar is different. With enough effort, he can recall every single day with perfect clarity.\r\n\r\nThe day Edgar’s family discovered his esper ability went like this:\r\n\r\nEdgar was three years old. It was an ordinary evening, no different from any other. His parents had just come home from work, and they were enjoying family time around the dinner table. Light, delicious dishes accompanied by Dad's interesting little anomaly stories made for the perfect cozy atmosphere.\r\n\r\nBoth of Edgar's parents were clerks at Yggash Court. They were responsible for writing and maintaining anomaly profiles, so Dad always had endless stories to tell. The stories were little tales adapted from the publicly available anomaly profiles he wrote during work hours.\r\n\r\nBut young Edgar didn't know any of this yet. Whenever Dad got carried away telling stories at the dinner table, he'd look down to see his precious son's bright, sparkling eyes gazing up at him…\r\n\r\nBeing worshipped by his son as the \"Story King\" made all those overtime hours worth it.\r\n\r\n\"That's strange? It seems different from what Dad wrote in the files? Which one is actually true?\"\r\n\r\nSomething changed forever the moment Edgar asked this serious question. Edgar's dad would probably remember that instant for the rest of his life. But his dad quickly focused on something more crucial: how did Edgar know about the anomaly profiles he'd just filed?\r\n\r\nHad his son snuck out through the window and run all the way to Yggash Court to read the files? Did such a small child even have clearance to access those documents?\r\n\r\nOver the next half hour, Mom and Dad finally figured out what was happening: Edgar only needed to focus his imagination (both adults also had to stretch their own imaginations to picture this) to connect with various libraries around the world, including Yggash Court's archive. Edgar had probably been too curious about what Dad had written, and couldn't help thinking about his father's name… One by one, the anomaly profiles bearing Edgar's father's signature unfolded in Edgar's mind…\r\n\r\nBy the way, Edgar had discovered this ability long ago. It was probably innate, right? It's just that earlier on, he couldn't read very well, so he couldn't understand all those dense markings on the white papers…\r\n\r\nEdgar had probably already read through his father's early work files, when his writing style was still immature. His dad’s \"dark history\" was now completely exposed to his son. With this realization, Edgar's dad decided to escape to the kitchen to wash dishes, planning to study his son's esper ability more carefully later.\r\n\r\n\"This child really takes after me. On the night of our first date, I also read through all your papers from cover to cover.\"\r\n\r\nHis wife wouldn’t let him off the hook either." + }, + { + "name": "What does Edgar want to be?", + "desc": "A child prodigy; the \"golden kid;\" \"the boy kissed by the god of wisdom.\"\r\n\r\nThe day Edgar came back from Lamplight Academy, aunts, uncles, neighbors, and their children all swarmed in droves to congratulate him, nearly trampling down his family's doorstep. Whether they came out of curiosity to see what made this so-called \"neighbor's kid you should learn from\" so special, or were reluctant children dragged along by parents demanding they \"learn from his example,\" they all reached the same conclusion:\r\nHe really didn't look like anything special.\r\n\r\nMeanwhile, Edgar found himself surrounded by adults, completely overwhelmed. He just couldn't keep up with their overlapping chatter. As they talked over each other, Edgar's future became crystal clear in their minds: he'd immediately become a star researcher at Zerogon Laboratory, the rising star of Yggash Court, the new director of the Bureau of Anomaly Control. Pink Paws Bank's job offer was worth considering too. With Edgar's abilities, why would't he become a board member at PPB? Of course, when the time came, he shouldn't forget to give a helping hand to that kid living diagonally across from him whose grades barely scraped by in every subject…\r\n\r\nThe adults listing out and arranging all these bright futures for him had become completely lost in their own fantasies. It was as if Edgar were their own child, fulfilling all the dreams they, themselves, couldn't…\r\n\r\nEdgar looked around helplessly, unable to join any conversation. He was so nervous he pulled his scarf up high, wishing he could hide completely inside it. Luckily, at that very moment, his father squeezed through the crowd and patted his shoulder: \"What do you want to be when you grow up, Edgar?\"\r\n\r\nEncouraged by his father's gaze, Edgar said softly:\r\n\"I… I just want to be Edgar.\"" + }, + { + "name": "The World Beyond the Tree Hollow", + "desc": "- Point One: Edgar really likes Anomalies\n- Point Two: Edgar's mind is reasonably sharp\n- Point Three: Edgar can easily access Anomaly profiles\n\nTherefore, Edgar is well-suited to work at Yggash Court's archives like his parents, organizing documents and studying Anomaly-related topics until the day he dies.\n\nEdgar's mother had to work very hard to suppress her laughter at her son's reasoning; not because the conclusion was absurd or ridiculous—quite the opposite, actually. The logic was clear and the reasoning sound, leaving almost no room for refusal.\nBut having Edgar move into Yggash Court's tree hollow, put on thick beer-bottle glasses, and bury himself in stacks of files was still a bit… premature. Mom understood her son's wishes, but… Wouldn't it be better for Edgar to personally verify those details, rather than learning about Anomalies from other people's reports? Who knew what Anomalies might be waiting around the next corner? How many unknown Anomaly characteristics were still waiting for us to discover them?\nEdgar listened very seriously.\n\nHe'd probably inherited his mother's adventurous spirit too. What seemed like a rather silly promise was sealed with a pinky promise. Mom took Edgar's hand and, blindfolded, threw a dart at a map. Luck—or perhaps fate—decided Edgar's adventure: his first journey after graduation would take him to Hethereau.\n\nForever curious, forever seeking knowledge, forever willing to try." + }, + { + "name": "The Fateful Job Posting", + "desc": "Standing on the bustling street corner, Edgar had no idea where he was supposed to go. Though he thought for a long, long time, he remained just as lost, just as confused.\nHe gave up on route planning, maps, and navigation. Following his mother's advice, he was now \"letting the wind guide him\" through Hethereau. According to her, encounters with destiny often arrive when you least expect them.\nWith no destination and no clue which direction to take, could he really find his \"destiny\" this way? Edgar couldn't fathom such an unplanned approach; the indecision paralyzed him. Instead, he bought a small bag of feed from a street vendor and crouched by the fountain to feed the pigeons.\n\nLater, when Edgar looked back on that day, he felt he'd begun to dimly understand what his mother meant by \"fate.\"\nAs he felt the pigeons pecking at his palm, watching the sky gradually turn a warm orange as golden clouds drifted toward the still-blue horizon, a sudden gust of wind smacked him right in the face. Along with it came a recruitment poster with crooked handwriting and a drawing of some TV-headed creature.\n\n\"Eibon Antique Shop.\"\nHe stood up, looked around, and followed the street signs to Hankaku Street.\n" + }, + { + "name": "Hearts Will Find Their Way", + "desc": "They didn't share a language, but understanding Taygedo wasn't too difficult.\r\nBy combining the tone and frequency of Taygedo's \"Tayge-tayge\" sounds with his expressions and gestures, Edgar deciphered:\r\n\"Welcome, new friend!\"\r\n\r\nHe began a new chapter in his Anomaly observation diary; it naturally featured the wonderful TV-headed otter. Of course, Edgar's observation records weren't as formal as his parents'; he simply wrote down Taygedo's little habits, quirks, goals… and the many everyday activities with him.\r\nStill, this neat and tidy notebook ran out of space way sooner than Edgar had expected. An entire page was quickly covered with Taygedo's selfies, complete with a bonus paw print. One page had angry highlighter annotations: \"So it WAS you, Taygedo! I knew you stole my pudding!\" And several consecutive pages had suspicious water stains (best not to think too hard about what liquid that might be), right after the entry: \"Should I write about Kiroumaru too? I already agreed on his behalf.\"\r\n\r\nAdmittedly, Edgar wasn't very good at expressing himself, but understanding each other didn't necessarily require words, Edgar realized as he lay on the rooftop while stargazing with Nanally, Sakiri, and Taygedo.\r\n\r\n…Though language could speed up the process, Edgar added, after ages spent gesturing with Taygedo—that always ended in confusion.\r\n\r\n\r\n\r\n\r\n\r\n" + } + ], + "melee": [ + { + "id": "GA_Edgar_Melee", + "name": "Combat Practice", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Combat Practice</>", + "<Title>Basic Attack: Calculated Landing</>", + "<Title>Critical Riposte: Crisis is Opportunity</>" + ], + "desc": [ + "Applies what he learned in Lamplight Academy's physical education class to perform up to 5 consecutive attacks that deal <Guang>Cosmos DMG</>.", + "Press Basic Attack while airborne to plunge, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Combat Practice after a Critical Dodge.\r\nCharges toward the target and uses his backpack to unleash a Flow attack, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area and reducing Break." + ], + "desc_short": [ + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</>." + ], + "context": "<Italic>Edgar believes there must be a more humane way to contain them. Until that solution is found, he is forced to rely on rougher methods.</>", + "icon": "/Game/UI/UI_Icon/Skill/Edgar_Melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Edgar_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 33, + 36, + 38, + 42, + 45, + 49, + 53, + 57, + 61, + 66, + 72, + 77 + ] + ] + }, + { + "id_stats": "GE_Player_Edgar_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 62, + 67, + 73, + 79, + 85, + 92, + 99, + 107, + 116, + 125, + 135, + 146, + 157 + ] + ] + }, + { + "id_stats": "GE_Player_Edgar_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%*2", + "values": [ + [ + 39, + 42, + 45, + 49, + 53, + 57, + 61, + 66, + 72, + 78, + 84, + 90, + 98 + ] + ] + }, + { + "id_stats": "GE_Player_Edgar_Melee4_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 83, + 90, + 97, + 104, + 113, + 122, + 132, + 142, + 154, + 166, + 179, + 194, + 209 + ] + ] + }, + { + "id_stats": "GE_Player_Edgar_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 69, + 75, + 81, + 87, + 95, + 102, + 110, + 119, + 129, + 139, + 150, + 162, + 175 + ] + ] + }, + { + "id_stats": "GE_Player_Edgar_AirAttack_Damage", + "name": "Plunge Attack DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78 + ] + ] + }, + { + "id_stats": "GE_Player_Edgar_PerfectEvadeAttack_Damage", + "name": "Critical Riposte DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 104, + 112, + 121, + 131, + 141, + 152, + 165, + 178, + 192, + 207, + 224, + 242, + 261 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34, + 34 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Edgar_Skill", + "name": "Wild Current", + "type_name": "Redirect Skill", + "desc": "Hold to enter a channeling state, continuously casting Current at the target, dealing <Guang>Cosmos DMG</> and continuously healing the teammate with the lowest HP.\r\nThe CD of Redirect Skill: Wild Current increases based on the duration of use.", + "desc_short": "Deals <Guang>Cosmos DMG</>, heals the teammate with the lowest HP.", + "context": "<Italic>Healing is important work. Edgar realized that the rules he learned from games apply in real life as well.</>", + "icon": "/Game/UI/UI_Icon/Skill/Edgar_Skill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Edgar_Skill_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% *7", + "values": [ + [ + 80, + 86, + 93, + 100, + 108, + 117, + 126, + 137, + 148, + 159, + 172, + 186, + 201 + ] + ] + }, + { + "name": "Heal per Instance", + "icon": "", + "value_name": "{0}+{1}% Max HP", + "values": [ + [ + 300, + 324, + 350, + 378, + 408, + 441, + 476, + 514, + 555, + 600, + 648, + 699, + 755 + ], + [ + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3 + ] + ] + }, + { + "id_stats": "GA_Edgar_Skill", + "name": "Base CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Additional CD per Instance", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Edgar_UltraSkill", + "name": "Finnegan's Wake", + "type_name": "Ultimate", + "desc": "Immerses in his own thoughts, unleashing a labyrinthine domain for 10s. Deals 1 instance of AoE <Guang>Cosmos DMG</>. Heals the current character over the domain's duration.", + "desc_short": "Deals <Guang>Cosmos DMG</> and heals the current character continuously.", + "context": "<Italic>Always curious, always questioning. Edgar often slips into deep thought without warning. Pulling him out of his complex musings is no easy task.</>", + "icon": "/Game/UI/UI_Icon/Skill/Edgar_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Edgar_UltraSkill_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 400, + 432, + 466, + 503, + 544, + 587, + 634, + 685, + 740, + 799, + 863, + 932, + 1007 + ] + ] + }, + { + "name": "Heal Amount", + "icon": "", + "value_name": "{0}+{1}% Max HP", + "values": [ + [ + 350, + 378, + 408, + 441, + 476, + 514, + 555, + 600, + 648, + 700, + 756, + 816, + 881 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2 + ] + ] + }, + { + "name": "Healing Interval", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "id_stats": "GA_Edgar_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Edgar_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Edgar_QTE", + "name": "Weight of Knowledge", + "type_name": "Support Skill", + "desc": "This bag is really heavy. Edgar charges toward the target and swings his bag with all his might, dealing 1 instance of <Guang>Cosmos DMG</> to an area.", + "desc_short": "Deals <Guang>Cosmos DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/Edgar_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Edgar_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Edgar_Passive_1", + "name": "Gentle Edge", + "type_name": "Passive Skill", + "desc": "<TextHLT>Charge Enhancement</>: Grants 120 Ultimate Energy instantly when a character triggers Charge using a Support Skill. Disables Ultimate Energy gain from Vita Pistils when hitting Slowed targets afterward. Cooldown: 30s.", + "desc_short": "<TextHLT>Charge Enhancement</>: Grants 120 Ultimate Energy instantly when a character triggers Charge using a Support Skill. Disables Ultimate Energy gain from Vita Pistils when hitting Slowed targets afterward. Cooldown: 30s.", + "context": "<Italic>Like many geniuses, Edgar carries a quiet pride. Unlike most, his brilliance is gentle and understated, guiding him through every challenge he has faced.</>", + "icon": "/Game/UI/UI_Icon/Skill/Edgar_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Edgar_Passive_2", + "name": "Unchanging Warmth", + "type_name": "Passive Skill", + "desc": "Cast Redirect Skill Wild Current or Support Skill Weight of Knowledge to gain a Key of Truth, up to 3 keys.\r\nEach Key of Truth extends the duration of Ultimate: Finnegan's Vigil by 1s.", + "desc_short": "Cast Redirect Skill Wild Current or Support Skill Weight of Knowledge to gain a Key of Truth, up to 3 keys.\r\nEach Key of Truth extends the duration of Ultimate: Finnegan's Vigil by 1s.", + "context": "<Italic>Whenever Edgar sees the warm lights of Eibon, comfort rises in his heart. In an ever-changing world, this warmth remains a constant.</>", + "icon": "/Game/UI/UI_Icon/Skill/Edgar_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_Aidejia_01", + "name": "Knowledge in Action", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_dyzy", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Edgar increases traffic by <Green2>18</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Edgar reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Edgar increases traffic by <Green2>18</>." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Edgar reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Edgar increases traffic by <Green2>27</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Anomaly-Loving Observer", + "desc": "Grants Edgar 1 <hot textstyle=\"TextEXPL\" param=\"nouns&EdgarKey\">Key of Truth</> whenever any teammate casts a Support Skill.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1021_1", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Key of Truth", + "desc": "Obtained by casting Redirect Skill Wild Current or Support Skill Weight of Knowledge after unlocking Passive Unchanging Warmth.\r\nEach Key of Truth extends the duration of Ultimate: Finnegan's Vigil by 1s." + } + ] + }, + { + "name": "Intern Anomaly Hunter", + "desc": "Caps the max cooldown extension from Wild Current at <NumGreen>3</>s.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1021_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "One of the Eibon Detectives", + "desc": "Increases Wild Current's healing effectiveness for allies with current HP below <NumGreen>30%</> by <NumGreen>15%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1021_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Skilled Strategist", + "desc": "Wild Current DMG +<NumGreen>50%</>", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1021_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Guardian of the Antique Shop's Light", + "desc": "Edgar's Max HP +<NumGreen>20%</>", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1021_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Visitor from Planet Curiosity", + "desc": "Grants <NumGreen>15%</> DEF to all allies in the range of Finnegan's Wake.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1021_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Pursuit of Knowledge", + "desc": "Increases the skill level of Wild Current, Finnegan's Wake, and Weight of Knowledge by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Keen Insight", + "desc": "Edgar's thoughts are stirred by his allies' safety. Converts <NumGreen>3%</> of any teammate's Max HP lost into <NumGreen>1</> Charge for Finnegan's Vigil, up to <NumGreen>20</> Charges. Resets after casting Finnegan's Vigil.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1021/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_032", + "amount": 100 + }, + { + "item_id": "Food_044", + "amount": 100 + }, + { + "item_id": "Food_078", + "amount": 100 + }, + { + "item_id": "Flower0002", + "amount": 200 + }, + { + "item_id": "SmallPoster001", + "amount": 200 + }, + { + "item_id": "SmallPoster003", + "amount": 200 + }, + { + "item_id": "SmallPoster004", + "amount": 200 + }, + { + "item_id": "Furniture_draw_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_CD", + "amount": 400 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1021" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1021" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1021" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1021" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1021", + "Likeprice_1021_0" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Greetings, I'm Edgar, staff member of the Eibon Antique Shop. When there are commissions, I also work with others as an apprentice anomaly hunter.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_meet_001" + }, + { + "name": "Chat: Scarf", + "desc": "My mother hand-knitted this scarf. It's light and warm. What do I wear when it gets hot? I switch to a silk one I got from my father. It has the same pattern.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_chat_001" + }, + { + "name": "Chat: Suitcase", + "desc": "I wish it could be lighter. Is this what they call the weight of knowledge?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_chat_002" + }, + { + "name": "Chat: Anomaly", + "desc": "I like anomalies. I joined Eibon because I wanted to learn more about them. First, I can observe Taygedo up close…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_chat_003" + }, + { + "name": "Sunny", + "desc": "Let's move the plant to the yard for some sunlight.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_weather_001" + }, + { + "name": "Rainy", + "desc": "I just saw Taygedo run out without an umbrella. Is he waterproof…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_weather_002" + }, + { + "name": "Cold", + "desc": "I won't get cold with my scarf.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_weather_003" + }, + { + "name": "Hot", + "desc": "I wanna live in a fridge.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Morning. What are your plans for today? Can I tag along?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Taygedo likes to take siestas. He's probably tucked up cozy somewhere.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Another productive day. I learned a lot.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_greet_003" + }, + { + "name": "Good Night", + "desc": "When I was little, my mother told me the story of the Cloud Sheep. When a child falls asleep, Cloud Sheep fluff up the pillow to make them sleep through the night. However, Cloud Sheep sleep early, so if you stay up too late, they might already be sleeping on the moon. I hope you meet them tonight though. Good night, Appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_greet_004" + }, + { + "name": "Hobbies", + "desc": "Reading, and observing anomalies.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_hobby_001" + }, + { + "name": "Worries", + "desc": "I've been having troubles with my eyesight. Nanally said if I keep reading in dim lights, I'll end up with glasses like her…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_vexation_001" + }, + { + "name": "Topic: Frizzle", + "desc": "By the way, are Frizzles the favorite anomaly of seagulls?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_talk_001" + }, + { + "name": "Topic: Nacupeda", + "desc": "Does Nacupeda have wishes like \"I want to eat lots and lots of coins today\"?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_talk_002" + }, + { + "name": "Topic: Bonzita", + "desc": "Always forgetting, always curious…? Hmm…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_talk_003" + }, + { + "name": "Topic: Danzaburou", + "desc": "Danzaburou can shapeshift into human form to steal things. Their disguise isn't difficult to see through though: even when they transform into humans, they still wear their signature red napkins. When you're shopkeeping, pay extra attention to customers like that.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_talk_004" + }, + { + "name": "Topic: Officer Whisker", + "desc": "I heard the Whiskers are on good terms with an anomaly called the \"Justice Executioner,\" which looks like a jungle of traffic lights. The Whiskers are even using the anomaly as a base. How do they even train and rest there? I hope I could see for myself… Hmm, actually, almost no one has ever seen what the Justice Executioner looks like. Could it be an urban legend…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_talk_005" + }, + { + "name": "About Myself: Esper Ability", + "desc": "It's not some extraordinary ability, but Hotori said \"Don't get poached by those delivery guys.\" Nanally also told me \"The Colucci family can't do without you!\" Well, I'm just happy to help.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_self_001" + }, + { + "name": "About Adler", + "desc": "I want to be as organized and meticulous as Adler. I still have so much to learn.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_001" + }, + { + "name": "About Hotori", + "desc": "Hotori always says that salvaging antiques is about having a good eye. But what does that mean? No books explain this very well… Or is that just the experience of looking into antiques?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_002" + }, + { + "name": "About Sakiri", + "desc": "Kiroumaru is rather heavy… Sakiri must be very strong.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_003" + }, + { + "name": "About Kiroumaru", + "desc": "Actually, I've been wanting to peek into Kiroumaru's stomach. Kiroumaru agreed, but Sakiri doesn't want me to do it…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_004" + }, + { + "name": "About Nanally", + "desc": "The boss once said that we should hold a meeting to discuss a book called \"Family Management.\" I've already prepared some notes, but she never has time…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_005" + }, + { + "name": "About Daffodill", + "desc": "When I'm with Daffodill, even if we don't talk much, it's never awkward. Maybe… we both enjoy the peace and quiet?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_006" + }, + { + "name": "About Taygedo", + "desc": "I decided to apply after I saw Taygedo's hand-drawn recruiting flyer. Taygedo was my first friend in Hethereau.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_007" + }, + { + "name": "About Eibon Antique Shop", + "desc": "It's like a second home. Everyone is close like family.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_about_008" + }, + { + "name": "Character Ascension I", + "desc": "My knowledge grows.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Still so much to learn.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "I wanna help.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Appraiser, does your Esper Ability include mindreading?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_gift_001" + }, + { + "name": "Gift Received II", + "desc": "I like it a lot. Thanks for all the effort!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Th-Thank you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Thank you so much.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Emergency patch up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Doing what I can.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Stabilizing your condition.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Let me heal you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "It'll be fine soon.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Feeling better now?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_aoe_UI_003" + }, + { + "name": "Ultimate IV", + "desc": "Here, this should help.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_aoe_UI_004" + }, + { + "name": "Containment I", + "desc": "Hello, new friend.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_containment_001" + }, + { + "name": "Containment II", + "desc": "Hope you find a good place to go.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_containment_002" + }, + { + "name": "Nullification I", + "desc": "Must find a way to contain the next time…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "We'll see each other again… right?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Done.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "The Appraiser should see this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Hotori is going to like this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Funds for the Coluccis…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "This could help Adler.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Kiroumaru would definitely be interested.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_windfall_006" + }, + { + "name": "Low Health I", + "desc": "So tired.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_hp_001" + }, + { + "name": "Low Health II", + "desc": "My brain… can't function.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_hp_002" + }, + { + "name": "Low Health III", + "desc": "Ow… that hurts.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_hp_003" + }, + { + "name": "Heal I", + "desc": "Much better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_fh_001" + }, + { + "name": "Heal II", + "desc": "Refreshing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_fh_002" + }, + { + "name": "Down I", + "desc": "There's still much I don't know…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_dead_001" + }, + { + "name": "Down II", + "desc": "Is this all I can do?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_dead_002" + }, + { + "name": "Down III", + "desc": "How could this be…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_dead_003" + }, + { + "name": "Takedown I", + "desc": "Problem solved.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_kill_001" + }, + { + "name": "Takedown II", + "desc": "All set.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_kill_002" + }, + { + "name": "Damaged I", + "desc": "Mm.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_struck_001" + }, + { + "name": "Damaged II", + "desc": "Oh no.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "…Not the head.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "…I feel dizzy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "I'll do my best.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_deploy_001" + }, + { + "name": "Deploy II", + "desc": "I'll give it my all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Found an opening.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "A weak spot.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Perfect timing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_QTE_003" + }, + { + "name": "Glide I", + "desc": "The view from up here…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_Fly_001" + }, + { + "name": "Glide II", + "desc": "Phew, let's land soon.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_Fly_002" + }, + { + "name": "Switch I", + "desc": "Here I come.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_Switch_001" + }, + { + "name": "Switch II", + "desc": "I'm here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_Switch_002" + }, + { + "name": "Switch III", + "desc": "Let's go.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_Switch_003" + }, + { + "name": "Special Switch - Zero", + "desc": "I'll do my best, Appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_SSC_001" + }, + { + "name": "Special Switch - Nanally", + "desc": "Let's fight as a family.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_SSC_002" + }, + { + "name": "Special Switch - Sakiri", + "desc": "Sakiri, let Kiroumaru digest his food.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_SSC_003" + }, + { + "name": "Special Switch - Hotori", + "desc": "Hotori, I won't let you down.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_SSC_004" + }, + { + "name": "Special Switch - Adler", + "desc": "Adler, I still have much to learn from you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_SSC_005" + }, + { + "name": "Special Switch - Daffodill", + "desc": "Daffodill, I'll try to do as you taught.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_SSC_006" + }, + { + "name": "Teammate Down - Zero", + "desc": "Appraiser, are you okay?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_TeammateDown_001" + }, + { + "name": "Teammate Down - Nanally", + "desc": "Nanally, get some rest.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_TeammateDown_002" + }, + { + "name": "Teammate Down - Sakiri", + "desc": "Sakiri, this isn't the time to act tough.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_TeammateDown_003" + }, + { + "name": "Teammate Down - Hotori", + "desc": "Hotori…? How could this…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_TeammateDown_004" + }, + { + "name": "Teammate Down - Adler", + "desc": "Adler! No…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_TeammateDown_005" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "Ugh, Daffodill…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_TeammateDown_006" + }, + { + "name": "Parry I", + "desc": "The right time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_Parry_001" + }, + { + "name": "Parry II", + "desc": "Now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Dodged it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "I should keep my distance.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC012/Play_Vo_Char_NPC012_DodgeCombo_002" + } + ] + } + }, + { + "id": "1023", + "name": "Baicang", + "description": "The widely recognized \"least captain-like captain\" from ETD-4.", + "element": [ + { + "element_id": "Incantation", + "name": "Incantation" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_028", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_028x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_028_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_baizhang", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + }, + { + "name": "DoT", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_chixu" + } + ], + "arcs_tags": { + "type_id": "5", + "name": "Condensate", + "icon": "/Game/UI/UI/player/YH_UI_icon_boson" + } + }, + "reaction": [ + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Scorch", + "desc": "Upon triggering Esper Cycle, inflicts Scorch on the target for <NumGreen>15s</>, dealing DoT." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1023_0", + "characterId": "1023", + "name": "On Duty", + "desc": "Custom uniforms crafted by the Bureau of Anomaly Control for every Enforcement Tactical Division member—yet only Captain Baicang actually wears one.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_028", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_028_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_baizang", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_baizang", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1370, + 1480, + 1589, + 1699, + 1808, + 1918, + 2028, + 2137, + 2247, + 2356, + 2466, + 2576, + 2685, + 2795, + 2904, + 3014, + 3124, + 3233, + 3343, + 3452, + 3562, + 3672, + 3781, + 3891, + 4000, + 4110, + 4220, + 4329, + 4439, + 4548, + 4658, + 4768, + 4877, + 4987, + 5096, + 5206, + 5316, + 5425, + 5535, + 5644, + 5754, + 5864, + 5973, + 6083, + 6192, + 6302, + 6412, + 6521, + 6631, + 6740, + 6850, + 6960, + 7069, + 7179, + 7288, + 7398, + 7508, + 7617, + 7727, + 7836, + 7946, + 8056, + 8165, + 8275, + 8384, + 8494, + 8604, + 8713, + 8823, + 8932, + 9042, + 9152, + 9261, + 9371, + 9480, + 9590, + 9700, + 9809, + 9919, + 10028 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 81, + 85, + 89, + 93, + 97, + 101, + 105, + 109, + 113, + 117, + 122, + 126, + 130, + 134, + 138, + 142, + 146, + 150, + 154, + 158, + 162, + 166, + 170, + 174, + 178, + 182, + 186, + 190, + 194, + 198, + 203, + 207, + 211, + 215, + 219, + 223, + 227, + 231, + 235, + 239, + 243, + 247, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 365, + 369, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 66, + 71, + 77, + 82, + 87, + 92, + 98, + 103, + 108, + 114, + 119, + 124, + 129, + 135, + 140, + 145, + 150, + 156, + 161, + 166, + 172, + 177, + 182, + 187, + 193, + 198, + 203, + 209, + 214, + 219, + 224, + 230, + 235, + 240, + 246, + 251, + 256, + 261, + 267, + 272, + 277, + 282, + 288, + 293, + 298, + 304, + 309, + 314, + 319, + 325, + 330, + 335, + 341, + 346, + 351, + 356, + 362, + 367, + 372, + 378, + 383, + 388, + 393, + 399, + 404, + 409, + 414, + 420, + 425, + 430, + 436, + 441, + 446, + 451, + 457, + 462, + 467, + 473, + 478, + 483 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Captain of ETD-4", + "description": "\"The chillin' Captain Baicang\" is known as the most easily encountered captain of ETD. They say you could run into him in any corner of Hethereau, almost like an NPC you encounter randomly. If you approach him, he'll likely say: \"On duty. Do not disturb.\"\nCaptain Baicang will then promptly disappear, perhaps genuinely busy with official duties. Such a workaholic…", + "birthday": "November 23", + "homePlace": "Bureau of Anomaly Control, ETD-4", + "abilityName": "Verdict and Autumn", + "introduction": "The widely recognized \"least captain-like captain\" from ETD-4.", + "voiceChinese": "桑毓泽", + "voiceEnglish": "Griffin Burns", + "voiceJapanese": "中村悠一", + "voiceKorean": "심규혁" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Captain of ETD-4 at the Bureau of Anomaly Control. Baicang—carefree, irreverant, blunt to a fault, master of dodging work, and a walking troublemaker.\r\nIn a certain hidden internal Bagel forum in the Bureau, a heated discussion unfolds: \"Who's the least captain-like captain among ETD?\"\r\n\"Am I the only one who thinks Captain Baicang from Squad 4 has a twisted sense of humor???\"\r\n\"You're not alone. Every night, before I fall alseep, I realize the pranks he pulled on me at work. You have no idea how much that disrupts my sleep.\"\r\n\"Same here. And when you confront him about it, he just gives you this smiling face… ugh, makes me want to clench my fists even tighter.\"\r\n…\r\nIt's actually pretty funny.\r\nWith zero remorse for his antics, Baicang swoops in to gleefully like and save every comment.\r\n\r\nRumors about Squad 4's captain are mixed.\r\nFor instance, \"Watch out for that long silver-white braid, for it's the Reaper's banner.\" \"He seems to like hiding behind his team members and playing weak, but he's actually analyzing his opponents' strength and countermeasures.\" \"He's reliable when it counts, very capable, and doesn't abuse his power.\" \"He loves all kinds of pasta, especially Italian, but when he cooks it himself he breaks the noodles in half before putting them in the pot (absolutely tasteless).\" All these rumors are basically true, confirmed with love from his closest team members.\r\n\r\nBeyond that, things lurk in his past that they cannot see.\r\n\r\nFrom an unwanted branch family child to voluntarily entering the main house for Esper Ability development, the young man gradually slipped toward what he thought was a beautiful \"abyss.\" He learned early the weight of life: Light as a feather. Something he could blow away just by speaking. For a long time he stopped saying anything at all, perhaps to atone, perhaps simply from fear. He was like a lone young leaf that had lost its way, spinning as it fell, until finally caught by someone important… that was when he found his home.\r\n\r\nAre words curses or prayers? He can easily extinguish life, yet cannot preserve anything. Thus, he can only keep moving forward.\r\nFrom summer to winter, from spring to fall, the veins of fall leaves turn yellow, still clinging to the branches before finally falling.\r\nIn the system of the Five Colors, white is associated with Gui Cang and the season of autumn, giving rise to the name White Cang or Baicang." + }, + { + "name": "Branch Family Heir", + "desc": "Branch families aren't well-liked.\nFrom childhood, Baicang learned to bow his head obediently and show weakness at just the right moments. But was that really enough? He didn't want to bend over anymore; he didn't want to be mocked by the main family's children. He could hear beneath the deathly silence in his relatives' laments and longing for power. His mother's health was poor, but whenever her joints ached, she would simply furrow her brow quietly. The only thing he could do was use his weak Esper Ability to change the topmost layer of skin around her joints, making it softer and warmer.\n\"If only I could become stronger. Then I could protect everyone.\"\nAfter learning the only way to become stronger, the small boy made up his mind, quickly packed his belongings, and moved into the main house." + }, + { + "name": "Curses and Prayers", + "desc": "Life fades away so lightly under his words, like a dream. Is he also a prisoner in that dream? Blindly clinging to the ideal of strength, he was once forced to take life, to repeat this agonizing behavior. He could see his own face reflected in their pupils… Why did that young man bear such a sad, confused expression?\nFor a long time after, he stopped speaking entirely. Words were curses—he was certain of that.\nIt wasn't until he met his teacher that he realized that even without Esper Abilities, words still held power. Sometimes, a single short sentence could untangle a person's lifelong demons and troubles.\n\"Where will the abyss lead? You only know by jumping in.\"\nSo he put away his fear and jumped into the chasm that exists between curses and prayers." + }, + { + "name": "Rebirth", + "desc": "Like a newborn baby, at first he could only say a few words, then sentences.\nCompletely opposite to his gradual descent into silence from years before, he again began to cry, laugh, and shout. He reveled in feeling the vibrations in his throat as much as possible.\nHe would carve himself with sound. Words were his clinging curses, blessings, and power, as well as the destiny he had to bear.\nWhen he finally regained mastery over words, he achieved true rebirth." + }, + { + "name": "To This Moonlight", + "desc": "The Bureau's afternoon tea is pretty good overall, but the new rice dumplings could use some improvement. He can speak properly now; maybe he even talks too much. After giving it some thought, he blames his teacher for that. Things with his teammates seem different lately, and sometimes he gets the feeling that he's actually understood. He hasn't seen that hunter partner in a while, and wonders how he's doing. About that ring, he always knew it was just psychological suggestion…\nBut in the end, he couldn't say anything at all, just like when they first met.\nFacing the grave, the \"mute child\" gently raised the drink in his hand.\nTo this moonlight, teacher." + }, + { + "name": "Finish Line", + "desc": "Sometimes, he almost thinks he's living the same life as any ordinary office worker.\nBut the nightmares always wake him up at night.\nWill he reach the end he's imagining for himself?\nUntil everything is uncovered, until tragedy stops repeating, until all mistakes are repaid… If only he could leave no regrets behind…" + } + ], + "melee": [ + { + "id": "GA_Cang_Melee", + "name": "Walk the Talk", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Walk the Talk</>", + "<Title>Basic Attack: Formless Words</>", + "<Title>Basic Attack: Unrestrained Words</>", + "<Title>Basic Attack: In the Wind</>", + "<Title>Critical Riposte: Truth Exposed</>", + "<Title>Basic Attack: Shadow Follows</>" + ], + "desc": [ + "Uses martial arts to perform up to 5 consecutive attacks, dealing <Zhou>Incantation DMG</>.", + "Hold Basic Attack to trigger Formless Words after the <NumGreen>1st</> and <NumGreen>2nd</> hits of Walk the Talk.\r\nRelease the stick and hold Dodge to trigger Formless Words during battle.\r\nFires <NumGreen>3</> incantation commands horizontally. After a brief delay, the commands detonate, with each dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area.", + "Hold Basic Attack to trigger Unrestrained Words after the <NumGreen>3rd</> hit of Walk the Talk.\r\nHold down the stick and hold Dodge to trigger Unrestrained Words during battle.\r\nFires <NumGreen>3</> incantation commands vertically. After a brief delay, the commands detonate, with each dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area.", + "Leaps in the wind and strikes, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when casting Walk the Talk after a Critical Dodge. Performs a knee strike on the target, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area, reducing their Break. Generates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangZhu\">Bless</> on the target when hit.", + "Generates a Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangZhu\">Bless</> on the enemy for every <NumGreen>3</> Walk the Talk hits. This word lasts for <NumGreen>15s</>, and a maximum of <NumGreen>3</> can be generated.\r\nConsumes <NumGreen>3%</> of Baicang's current HP whenever any Power Word is summoned. When Baicang's HP is below <NumGreen>50%</>, the amount consumed is halved." + ], + "desc_short": [ + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>.", + "Generates Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangZhu\">Bless</> while consuming Baicang's HP." + ], + "context": "<Italic>Just some really basic moves. Day after day of training under family discipline since childhood, the young boy's arms have become strong and broad.</>", + "icon": "/Game/UI/UI_Icon/Skill/Cang_Melee", + "additional_desc": [ + { + "name": "Bless", + "desc": "Triggers after 3 Basic Attack hits.\r\nDeals damage and restores Baicang's HP when activated during Judgment of Autumn." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Cang_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 47, + 51, + 55, + 59, + 64, + 69, + 75, + 81, + 87, + 95, + 102, + 110, + 119 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 119, + 128, + 138, + 149, + 161, + 174, + 188, + 203, + 220, + 237, + 256, + 277, + 299 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Melee4_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%*3", + "values": [ + [ + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 43, + 46, + 50, + 54, + 58, + 63 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 86, + 93, + 100, + 108, + 117, + 126, + 136, + 147, + 159, + 172, + 186, + 201, + 217 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Branch1_Damage", + "name": "\"Formless Words\" Knockback DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 66, + 71, + 77, + 83, + 89, + 97, + 104, + 113, + 122, + 131, + 142, + 153, + 166 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Branch1_1_Damage", + "name": "\"Formless Words\" Explosion DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 22, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 44, + 47, + 51, + 55 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Branch2_Damage", + "name": "\"Unrestrained Words\" Knockback DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 66, + 71, + 77, + 83, + 89, + 97, + 104, + 113, + 122, + 131, + 142, + 153, + 166 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_Branch2_1_Damage", + "name": "\"Unrestrained Words\" Explosion DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 22, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 44, + 47, + 51, + 55 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_AirAttack_Damage", + "name": "\"In the Wind\" DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97, + 105 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_PerfectEvadeAttack_Damage", + "name": "\"Truth Exposed\" DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 144, + 155, + 168, + 181, + 195, + 211, + 228, + 246, + 266, + 287, + 310, + 335, + 362 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Cang_Skill", + "name": "Generous Guidance", + "type_name": "Redirect Skill", + "desc_name": [ + "<Title>Heart of Heaven and Earth</>", + "<Title>Silenced Thought</>", + "<Title>Such Crime</>" + ], + "desc": [ + "Words and text emerge from the ley lines, converge at the target location, and unleash an attack.", + "Press Redirect Skill after triggering a dodge.\r\nAttacks a single target, dealing <Zhou>Incantation DMG</> to them on hit. Generates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</> on the target when attacks hit.", + "Press Redirect Skill after triggering Formless Words or Unrestrained Words.\r\nExpanded the damage range, dealing AoE <Zhou>Incantation DMG</> on hit. Generates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangLi\">Objurgate</> on the ground near the target when attacks hit." + ], + "desc_short": [ + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>. Generates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</>.", + "Deals <Zhou>Incantation DMG</> Generates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangLi\">Objurgate</>." + ], + "context": "<Italic>Every strike carries genuine intent. The voice once found, the home once briefly held, keeping memories of the departed close to heart. Smile! For now he has to power to protect.</>", + "icon": "/Game/UI/UI_Icon/Skill/Cang_Skill", + "additional_desc": [ + { + "name": "Silence", + "desc": "Triggers after Silenced Thought hits.\r\nDeals high single-target damage when activated during Judgment of Autumn." + }, + { + "name": "Objurgate", + "desc": "Triggers after Such Crime hits.\r\nDeals AoE DMG when activated during Judgment of Autumn." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Cang_Skill_Damage", + "name": "\"Heart of Heaven and Earth\" DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 120, + 129, + 140, + 151, + 163, + 176, + 190, + 205, + 222, + 239, + 259, + 279, + 302 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_SkillA_Damage", + "name": "Silenced Thought Missile DMG Ratio", + "icon": "", + "value_name": "{0}%*3", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_SkillA_Damage1", + "name": "Silenced Thought Explosion DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 120, + 129, + 140, + 151, + 163, + 176, + 190, + 205, + 222, + 239, + 259, + 279, + 302 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_SkillB_Damage", + "name": "\"Such Crime\" DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 280, + 302, + 326, + 352, + 380, + 411, + 444, + 479, + 518, + 559, + 604, + 652, + 705 + ] + ] + }, + { + "id_stats": "GA_Cang_Skill", + "name": "\"Heart of Heaven and Earth\" CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14 + ] + ] + }, + { + "id_stats": "GA_Cang_SkillA", + "name": "Silenced Thought / Such Crime Shared CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Cang_UltraSkill", + "name": "Judgment of Autumn", + "type_name": "Ultimate", + "desc": "Look up, and fall into the polar abyss. Releases a domain and enters Power Word state, dealing <Zhou>Incantation DMG</> over time to targets.\r\nExecutes the target when their HP is below <NumGreen>10%</> (Boss HP below <NumGreen>5%</>).\r\nBecomes immune to one fatal hit temporarily during Judgment of Autumn and records its value. Ends the domain automatically <NumGreen>3</>s after triggering the immunity effect and takes the recorded damage slowly over <NumGreen>10</>s after ending.\r\nDeals high single-target damage within the domain when <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</> is triggered; Deals AoE DMG when <hot textstyle=\"TextEXPL\" param=\"nouns&CangLi\">Objurgate</> is triggered; Deals damage to a single target and restores <NumGreen>5%</> of Baicang's Max HP when <hot textstyle=\"TextEXPL\" param=\"nouns&CangZhu\">Bless</> is triggered.", + "desc_short": "Deals <Zhou>Incantation DMG</>.\r\nExecutes low HP targets.\r\nBlocks one fatal hit.\r\nTriggers Power Words <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</>, <hot textstyle=\"TextEXPL\" param=\"nouns&CangLi\">Objurgate</>, and <hot textstyle=\"TextEXPL\" param=\"nouns&CangZhu\">Bless</>.", + "context": "<Italic>No one understands the power of words themselves better than Baicang. Until the very last moment, no one knows whether those waveforms taking shape in the air represent curses or blessings. Perhaps—only by glimpsing into the heart can one truly discern.</>", + "icon": "/Game/UI/UI_Icon/Skill/Cang_UltraSkill", + "additional_desc": [ + { + "name": "Silence", + "desc": "Triggers after Silenced Thought hits.\r\nDeals high single-target damage when activated during Judgment of Autumn." + }, + { + "name": "Objurgate", + "desc": "Triggers after Such Crime hits.\r\nDeals AoE DMG when activated during Judgment of Autumn." + }, + { + "name": "Bless", + "desc": "Triggers after 3 Basic Attack hits.\r\nDeals damage and restores Baicang's HP when activated during Judgment of Autumn." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Cang_UltraSkill2_Damage", + "name": "Judgment of Autumn Expansion DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 400, + 432, + 466, + 503, + 544, + 587, + 634, + 685, + 740, + 799, + 863, + 932, + 1007 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_UltraSkill_Damage", + "name": "Judgment of Autumn DoT DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100 + ] + ] + }, + { + "name": "Judgment of Autumn Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + }, + { + "name": "DoT Interval", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_WorldA_Damage", + "name": "Silence DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 300, + 324, + 349, + 377, + 408, + 440, + 476, + 514, + 555, + 599, + 647, + 699, + 755 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_WorldB_Damage", + "name": "Objurgate DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_WorldC_Damage", + "name": "Bless Explosion DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 69, + 75 + ] + ] + }, + { + "id_stats": "GE_Player_Cang_WorldC_1_Damage", + "name": "Bless Missile DMG Ratio", + "icon": "", + "value_name": "{0}%*2", + "values": [ + [ + 15, + 16, + 17, + 18, + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35, + 37 + ] + ] + }, + { + "id_stats": "GA_Cang_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Cang_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Cang_QTE", + "name": "Break Time Over", + "type_name": "Support Skill", + "desc": "Witness the power that words bestow. Charges briefly and writes incantation commands, targeting enemies and dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area. Generates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</> on target when attacks hit.", + "desc_short": "Deals <Zhou>Incantation DMG</>.\r\nGenerates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</>.", + "icon": "/Game/UI/UI_Icon/Skill/Cang_QTE", + "additional_desc": [ + { + "name": "Silence", + "desc": "Triggers after Silenced Thought hits.\r\nDeals high single-target damage when activated during Judgment of Autumn." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Cang_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Cang_Passive_1", + "name": "Moderate Mischief", + "type_name": "Passive Skill", + "desc": "<TextHLT>Scorch Enhancement</>: Inflicts another instance of Scorch with the same effect as the existing one when a Power Word is generated on a target affected by Scorch.", + "context": "<Italic>Sigh… break time's over again. Now then, let's wrap this up quickly, shall we?</>", + "icon": "/Game/UI/UI_Icon/Skill/Cang_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Cang_Passive_2", + "name": "Moderate Working", + "type_name": "Passive Skill", + "desc": "Increases Baicang's ATK by <NumGreen>20%</>.\r\nLaunches coordinate attacks with the allies when there are ETD-4 members in the Team.\r\nIn combat, switching to Baicang while Skia is in stealth to immediately attack with Baicang and generate 1 Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</> on target. Cooldown: <NumGreen>30s</>.\r\nIn combat, when Fadia's HP drops below <NumGreen>20%</>, Baicang attacks the enemy <NumGreen>1</> time, heals Fadia <NumGreen>1</> time, and generates <NumGreen>1</> Power Word <hot textstyle=\"TextEXPL\" param=\"nouns&CangJin\">Silence</> on target. Cooldown: <NumGreen>30s</>.\r\nSwitching to Baicang while Lacrimosa is in bat form can trigger <NumGreen>1</> super jump for Baicang.", + "context": "<Italic>Sure, we're all a bunch of eccentric weirdos who do our own thing, but we have our moments of perfect teamwork too. Spend enough time together, and your body starts to remember each other's habits and movements. What was that just now? Why, that was ETD-4's passionate combo, of course!</>", + "icon": "/Game/UI/UI_Icon/Skill/Cang_Pas2", + "additional_desc": [ + { + "name": "Silence", + "desc": "Triggers after Silenced Thought hits.\r\nDeals high single-target damage when activated during Judgment of Autumn." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_cang_01", + "name": "Thriving Daily", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_zzrs", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Baicang increases traffic by <Green2>18</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Baicang reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, combos persist when customers lose patience or get hit by hammers." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Baicang reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Baicang increases traffic by <Green2>27</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Yo, Captain!", + "desc": "Increases Baicang's next Skill's damage by <NumGreen>30%</> when Silence triggers during Judgment of Autumn. Effect stacks. Reduces Baicang's Skill cooldown by <NumGreen>4s</> when Objurgate triggers. Effect stacks (applies to the next use if no Skill is on cooldown).", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Soul Caller", + "desc": "Like those mountain ranges, layer upon layer. Every <NumGreen>1</> Power Word generated increases Baicang's ATK by <NumGreen>6%</>, up to <NumGreen>4</> stacks. Each stack lasts <NumGreen>10s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Curses Spoken Into Being", + "desc": "Increases Power Word generation limit to <NumGreen>4</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Or Perhaps Blessings", + "desc": "Restores an additional <NumGreen>5%</> of Max HP when any <NumGreen>1</> Power Word triggers during Judgment of Autumn.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "In Honor of Moonlight", + "desc": "It's not over yet. Increases the duration of Judgment of Autumn to <NumGreen>16s</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "White Aspect", + "desc": "Increases Baicang's CRIT Rate by <NumGreen>30%</> during Judgment of Autumn.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Earth Sequence", + "desc": "Increases the skill level of Walk the Talk, Generous Guidance, and Judgment of Autumn by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Remained", + "desc": "Captain, sometimes. Grants all allies within the domain <NumGreen>20%</> ATK and the Execution effect during Judgment of Autumn.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1023/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + -1, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "value": 7.5 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_025", + "amount": 100 + }, + { + "item_id": "Food_083", + "amount": 100 + }, + { + "item_id": "Food_093", + "amount": 100 + }, + { + "item_id": "Flower0004", + "amount": 200 + }, + { + "item_id": "Furniture_draw_004", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_MiniBlack_002", + "amount": 200 + }, + { + "item_id": "Figure_miniblack_01_001", + "amount": 400 + }, + { + "item_id": "Figure_miniblack_01_002", + "amount": 400 + }, + { + "item_id": "Furniture_Gacha_MiniBlack_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1023" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial", + "Furniture_draw_0032_KV_solo" + ], + "amount": [ + 20, + 5, + 1 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Likeprice_1023_0" + ], + "amount": [ + 20, + 20000, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1023" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1023" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1023" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1023" + ], + "amount": [ + 50000, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "We've been through life and death together, so let's skip all the formalities, shall we? Hmm… but, come to think of it, I think I've never properly introduced myself… Captain, ETD-4—The name's Baicang. Let's continue getting along well, shall we?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_meet_001" + }, + { + "name": "Chat: Relaxation", + "desc": "Being serious is a virtue, sure, but tensing up all the time is more exhausting than it ever needed to be! Here's some advice as a friend—you should loosen up once in a while!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_chat_001" + }, + { + "name": "Chat: Pranks", + "desc": "Wondering why I'm out here? Uh… as you can see, I've been locked outside by Fadia and Mosa. Sigh… How could they be so heartless to their own Captain… Hm? \"What did you do this time?\" Hey, you're being a little unfair to me, don't you think? Even you assume it's my fault? I mean, I did draw a mustache on Mosa's face while she was sleeping… but! Fadia already made us even! Yet they still locked me outside after that! That can't be a fair trial and punishment…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_chat_002" + }, + { + "name": "Chat: Invitation", + "desc": "Looks like you're having a good time in Eibon. Seems like she likes you enough. But… if you ever fancy a change of scenery, our doors at ETD are always open for you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_chat_003" + }, + { + "name": "Sunny", + "desc": "Why waste such a beautiful day cooped up in the office doing paperwork? Yup! I'll deal with that later.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_weather_001" + }, + { + "name": "Rainy", + "desc": "If you're looking to kill time, try watching roof tiles in the rain. It's quite fascinating. They shimmer differently than usual, with water droplets bouncing from different angles, creating sounds of different frequencies… almost like someone is trying to whisper something.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_weather_002" + }, + { + "name": "Cold", + "desc": "I proposed introducing \"days off for cold weather\" for my squad. Which passed unanimously… except for Skia's vote. Then, our dear Director rejected it. Ah well, if you've got any \"cold weather days off\" or \"winter breaks\" where you're from, do enjoy them on my behalf.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_weather_003" + }, + { + "name": "Hot", + "desc": "To reward myself for my diligent effort working under this scorching heat! I'm planning to take a detour and buy some ice cream from Blizzi. Shh, don't tell Skia… Hm? Hey, this isn't slacking off! But, as thanks for keeping my secret, I'll grab one for you too! So, what flavor would you like?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Morning! Such a lovely day, perfect for taking it easy… Ah, better not let them find me though. See ya.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Perfect timing. I was just about to grab some tea during my lunch break. Care to join me?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Smooth sailing 'til meal time! …Unfortunately, I've got an assignment soon… so dinner better be quick and simple.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_greet_003" + }, + { + "name": "Good Night", + "desc": "Getting sleepy? Oh… I suppose it is that time of night already. I got so caught up in our chat that I kept you here for too long without realizing. My bad, my bad.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_greet_004" + }, + { + "name": "Hobbies", + "desc": "Don't you ever wonder what kind of face people would make if they found me playing dead in the break room during lunch break? Hahaha! Actually, I'm gonna try it in a bit. Why don't you become the discoverer of my \"body\"?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_hobby_001" + }, + { + "name": "Worries", + "desc": "Care less, worry less! Hah, don't give me that look! I never said I had no worries. Let me keep some secrets to myself for now, alright?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_vexation_001" + }, + { + "name": "Topic: Communication", + "desc": "They say language is vessels of the mind, but when people want to convey something, people will always find ways to express themselves, Tower of Babel or not. Words, actions, expressions… Don't you find interpreting them fascinating? Say, look—Skia's expression right now is… uh, he found out I skipped work yesterday…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_talk_001" + }, + { + "name": "Topic: Day Off", + "desc": "Vacations are all about following your whims and making spontaneous plans! For me—sipping tea, checking out that new cake shop, trading gardening tips with the florist, catching up with old friends… Oh, and there's this beautiful forest near the cemetery at the foot of the mountain. In the evening, when the breeze flows over your skin… It feels good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_talk_002" + }, + { + "name": "Topic: Regrets", + "desc": "Sometimes I wonder, if everything that's gone loses its history and name, what remains? The ideas they had, the emotions they experienced… Where do they go? Would a late sun apologize to a withered sunflower…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "Words hold far more power than people realize. Scary, isn't it? Haha… With desire, even the most ordinary words can easily bring suffering or happiness. But, I'm sure you know how to use this power wisely.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_self_001" + }, + { + "name": "About Myself: Past", + "desc": "The past? It's rare to meet someone as curious as you. Hmm… where should I begin? How about this: Long, long ago, a young man found a creature by the sea that should only have existed in myths… What later generations would consider the earliest anomaly in Hethereau… Hm? Not the past you were looking for?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_self_002" + }, + { + "name": "About Myself: Captain", + "desc": "Titles like \"Captain\" don't really mean much anyway. Me, I'm not one for putting on airs, and my team? They aren't going to respect me more just because I have some title. If you ask me, being captain is nothing but a hassle—speaking of which, I need to come up with an excuse to make Skia attend the Bureau's meeting tomorrow morning in my place…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_self_003" + }, + { + "name": "About Alphard", + "desc": "At the rate the Director's docking my pay… Sooner or later, I'll need a loan just to come to work. Ahh… Now I'm wondering when she will actually kick me out.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_001" + }, + { + "name": "About Skia", + "desc": "Don't let Skia's scary face fool you, he takes his work very seriously. Haha, having such a reliable Lieutenant makes my job as Captain much easier. Though, it would be nice if he wasn't so strict about my little slip-ups.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_002" + }, + { + "name": "About Fadia", + "desc": "Never mess with Fadia unless you're prepared, take it from someone who knows better. Though, if you're feeling confident, by all means! Try your luck, and promise you'd let me watch! Curious about what happened to me? Heh… let's not get into that.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_003" + }, + { + "name": "About Lacrimosa", + "desc": "Mosa's incredibly talented, but she's still just a kid who doesn't know much about the world. As an adult, I should look after her. Ugh, why does she hate me so much though? It really breaks my heart…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_004" + }, + { + "name": "About Hotori", + "desc": "She sometimes reminds me of the Director—just as impossible to figure out… Though she seems different now compared to back then? Maybe she's been drinking too much?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_005" + }, + { + "name": "About Bureau of Anomaly Control", + "desc": "The Bureau wouldn't be half bad without all those fancy rules and stuffy traditionalists. Though, I guess there wouldn't be much left after removing all that, would there?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_006" + }, + { + "name": "About ETD", + "desc": "ETD is just a bunch of enigmatics doing whatever they want. They look good on the news, but working with them is nothing but headaches. Everyone showing off their special talents when they're together… it's more like a circus than a workplace. Though, I'll admit it is pretty entertaining… \"You're part of it\"? Ahaha, why, thank you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_007" + }, + { + "name": "About ETD-4", + "desc": "Squad 4's Captain is being isolated by his team members…? Who said that? That's not true! We're known throughout the Bureau as a model team with unparalleled unity… Wait, you saw Mosa, Fadia, and Skia hanging out together near the plaza for shopping and dinner? Huh? When did that happen?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_about_008" + }, + { + "name": "Character Ascension I", + "desc": "Taking a step forward now and then isn't so bad.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Looks like my lazy days are coming to an end!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Here's to another day of hard work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Aha, seems like we have the same refined taste in things!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_gift_001" + }, + { + "name": "Gift Received II", + "desc": "A gift from a friend is a treasure… I'll put it where everyone can see!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_gift_002" + }, + { + "name": "Gift Received III", + "desc": "A gift for a gift. My gift for you is… let me think about it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Psst! The Bureau won't allow its Captains to take bribes!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Yo, chit-chat's over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Perk up your ears.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Shhh—keep quiet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Spoken stains, must not be.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Words spoken aloud, must be honored.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Let's confirm it—blessing or… a curse?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Welcome to where you belong!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_containment_001" + }, + { + "name": "Containment II", + "desc": "Anddddd clock off.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_containment_002" + }, + { + "name": "Nullification I", + "desc": "Sleep tight.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "I'll just… scribble something on the mission report.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "I'll consider it my overtime pay.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Oh? Looks like fine stuff.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "In case you need it, keep it in your pocket.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Piece of cake!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "The more, the merrier.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Oh, nice stuff!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Ahh… A time-out would be really nice now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_hp_001" + }, + { + "name": "Low Health II", + "desc": "Let's get serious.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_hp_002" + }, + { + "name": "Low Health III", + "desc": "Again? Are you serious?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_hp_003" + }, + { + "name": "Heal I", + "desc": "Hmm… Ah! Much better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_fh_001" + }, + { + "name": "Heal II", + "desc": "Let's get this done quickly.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_fh_002" + }, + { + "name": "Down I", + "desc": "Not here… not anywhere else either…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_dead_001" + }, + { + "name": "Down II", + "desc": "This day… came sooner than I thought…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_dead_002" + }, + { + "name": "Down III", + "desc": "I hope… there's a welcoming ceremony for me…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_dead_003" + }, + { + "name": "Takedown I", + "desc": "Was that too hard?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_kill_001" + }, + { + "name": "Takedown II", + "desc": "Gonna clock out! Sorry!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_kill_002" + }, + { + "name": "Damaged I", + "desc": "Tsk.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_struck_001" + }, + { + "name": "Damaged II", + "desc": "Feisty, aren't you?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Not bad.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "…I got careless.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Hey, need a hand?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_deploy_002" + }, + { + "name": "Deploy II", + "desc": "Don't worry, I won't run away midfight.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Hey, don't space out on me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "I could use some exercise.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Hey, watch it. Don't hit too hard.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_QTE_003" + }, + { + "name": "Glide I", + "desc": "Well, well, talk about range.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_Fly_001" + }, + { + "name": "Glide II", + "desc": "Hey there, little bird.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_Fly_002" + }, + { + "name": "Switch I", + "desc": "Shift change.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_Switch_001" + }, + { + "name": "Switch II", + "desc": "Me? Alright then.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_Switch_002" + }, + { + "name": "Switch III", + "desc": "Friendly fire!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_Switch_003" + }, + { + "name": "Special Switch - Skia", + "desc": "I'll write the mission report… later.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_SSC_001" + }, + { + "name": "Special Switch - Fadia", + "desc": "The cat and mouse game isn't over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_SSC_002" + }, + { + "name": "Special Switch - Lacrimosa", + "desc": "Hey! Pick on someone your own size.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_SSC_003" + }, + { + "name": "Special Switch - Mint", + "desc": "Gotta put on a good show for the rookies.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_SSC_004" + }, + { + "name": "Teammate Down - Skia", + "desc": "Lieutenant down, that's it for Squad 4? Pull it together!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_TeammateDown_001" + }, + { + "name": "Teammate Down - Fadia", + "desc": "That's not the ending you wanted, right?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_TeammateDown_002" + }, + { + "name": "Teammate Down - Lacrimosa", + "desc": "Mosa, you can sleep when we get home.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_TeammateDown_003" + }, + { + "name": "Teammate Down - Mint", + "desc": "We're gonna need injury compensation.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_TeammateDown_004" + }, + { + "name": "Parry I", + "desc": "That's it?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_Parry_001" + }, + { + "name": "Parry II", + "desc": "Watch and learn.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Phew… that was close!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Flawless execution.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC006/Play_Vo_Char_NPC006_DodgeCombo_002" + } + ] + } + }, + { + "id": "1025", + "name": "Hathor", + "description": "An efficient courier who enjoys creating comprehensive task schedules and strictly executing them to completion.", + "element": [ + { + "element_id": "Lakshana", + "name": "Lakshana" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_012", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_012_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_012_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_hahuosuoer", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Burst DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_baofa" + } + ], + "arcs_tags": { + "type_id": "3", + "name": "Plasma", + "icon": "/Game/UI/UI/player/YH_UI_icon_plasma" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Stain", + "desc": "Increases the target's <bule>Psyche and Lakshana DMG</> taken by <NumGreen>20%</> for <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1025_0", + "characterId": "1025", + "name": "Two-Tone Thorns", + "desc": "A well-fitted motorcycle jacket that leaves plenty of room for wing movement.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_012", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_012_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_hasuoer", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_hasuoer", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1320, + 1426, + 1531, + 1637, + 1742, + 1848, + 1954, + 2059, + 2165, + 2270, + 2376, + 2482, + 2587, + 2693, + 2798, + 2904, + 3010, + 3115, + 3221, + 3326, + 3432, + 3538, + 3643, + 3749, + 3854, + 3960, + 4066, + 4171, + 4277, + 4382, + 4488, + 4594, + 4699, + 4805, + 4910, + 5016, + 5122, + 5227, + 5333, + 5438, + 5544, + 5650, + 5755, + 5861, + 5966, + 6072, + 6178, + 6283, + 6389, + 6494, + 6600, + 6706, + 6811, + 6917, + 7022, + 7128, + 7234, + 7339, + 7445, + 7550, + 7656, + 7762, + 7867, + 7973, + 8078, + 8184, + 8290, + 8395, + 8501, + 8606, + 8712, + 8818, + 8923, + 9029, + 9134, + 9240, + 9346, + 9451, + 9557, + 9662 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 81, + 85, + 89, + 93, + 97, + 101, + 105, + 109, + 113, + 117, + 122, + 126, + 130, + 134, + 138, + 142, + 146, + 150, + 154, + 158, + 162, + 166, + 170, + 174, + 178, + 182, + 186, + 190, + 194, + 198, + 203, + 207, + 211, + 215, + 219, + 223, + 227, + 231, + 235, + 239, + 243, + 247, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 365, + 369, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 73, + 79, + 85, + 91, + 96, + 102, + 108, + 114, + 120, + 126, + 131, + 137, + 143, + 149, + 155, + 161, + 166, + 172, + 178, + 184, + 190, + 196, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 242, + 248, + 254, + 260, + 266, + 272, + 277, + 283, + 289, + 295, + 301, + 307, + 312, + 318, + 324, + 330, + 336, + 342, + 347, + 353, + 359, + 365, + 371, + 377, + 383, + 388, + 394, + 400, + 406, + 412, + 418, + 423, + 429, + 435, + 441, + 447, + 453, + 458, + 464, + 470, + 476, + 482, + 488, + 493, + 499, + 505, + 511, + 517, + 523, + 529, + 534 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_06", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Sterry Express Staff", + "description": "For Hathor, being a \"courier\" is the perfect profession.\r\n1. Confirm time and address;\r\n2. Deliver to recipient;\r\n3. Get signature and complete. It rarely requires much conversation.\r\nThough she occasionally encounters problem clients, the solution is simple: just strike fear in their hearts.\r\nDuring her free time, Hathor prefers to stay home, sitting by the window where sunlight streams in, emotionlessly eating an entire box of chocolate-decorated cookies without drinking any water.", + "birthday": "August 29", + "homePlace": "Sterry Express", + "abilityName": "Wanderer's Pact", + "introduction": "An efficient courier who enjoys creating comprehensive task schedules and strictly executing them to completion.", + "voiceChinese": "洪海天", + "voiceEnglish": "Allegra Clark", + "voiceJapanese": "市ノ瀬加那", + "voiceKorean": "이다은" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "After a busy day, Hathor returned to Sterry. The chatter and cheer inside was somewhat inviting. The Mentor warmly introduced two new members of Sterry: Haniel and Illica. Hathor didn't have any particular thoughts about their arrival and simply nodded in acknowledgment. Following the Mentor's arrangements was something she was used to. If Hathor were to recall her feelings from meeting with Haniel and Illica, she'd probably say: Very energetic, great couriers.\r\n\r\nHowever, while interacting with them over the following few days, Hathor gradually realized that the relationships between the five of them weren't as smooth as expected. The Mentor and Jenson, who were familiar with her, could sense her true thoughts from her expressions and actions even when she said nothing, and knew she wasn't intentionally cold. The two new members didn't seem to understand, though. Perhaps due to her icy exterior, they always showed some instinctive wariness, completely different from how lively they were when facing the Mentor. Just as Hathor was repeatedly pondering how to explain to them that she simply wasn't good at socializing, a conversation with the Mentor changed everything. She was given a unique commission: spend time with Haniel and Illica, and understand the lives of modern youngsters. This was a task with a clear directive, so she didn't hesitate.\r\n\r\nHowever, when actually facing the two, taking the initiative to speak proved much more difficult than expected. Hathor had mentally rehearsed scenarios for initial conversations many times and had even prepared several backup plans for dealing with awkward silences. So, during a rare chat session, she tentatively asked about their daily hobbies. The following responses completely deviated from her expectations:\r\n\"Of course it's watching the greatest manga of this century, 'Gen Z'!\"\r\n\"Buying merch, going to events, analyzing the lore with fellow fans on Bagel, conventions, live events, and wotagei!\"\r\n\"Seasonal anime previews, fan arts, weekly new episodes… we never miss a single one!\"\r\nFaced with Haniel's enthusiastic string of recommendations, Hathor showed visible confusion: What is wotagei? What is an \"anime\"?\r\nJust as Hathor was about to interrupt and give her brain some time to process, she caught sight of Illica, who was eagerly waiting with excitement to join the conversation. She fell silent for a moment and held herself back from speaking. If they'd really like to talk about it… then listening for a while longer wouldn't hurt." + }, + { + "name": "High-Efficiency Delivery Station", + "desc": "In Sterry's early days, there were only three people. Though few in number, they had clear divisions of labor. The Mentor, well-versed in human weaknesses, frequently moved in social circles, while Jenson, with his proper speech and meticulous attention to protocol and rules, could break through negotiation deadlocks with just a few words, making him better suited for business cooperation discussions. However, from beginning to end, Hathor always maintained some reservations toward Jenson. Her sharp instincts for danger, honed through long training, whispered warnings that this man wasn't as rule-abiding as he appeared, though the Mentor's good working relationship with him indicated that Jenson could currently be trusted. As for the heavy responsibility of package delivery, it naturally fell to Hathor, who joined last.\r\nSterry's Elite Courier, the tough biker chick of few words, first choice for urgent delivery quests. Regular items, fragile goods, anomaly packages—all reached their destinations accurately, safely, and intact to the roar of her motorcycle. Some statistics claimed that her single-day record was 200 regular deliveries and 11 anomaly containers, all completed while assisting as an Anomaly Hunter contain two Class III anomalies. She was truly a tireless delivery machine: cold, ruthless, efficient.\r\nHathor herself hadn't noticed that such a pace was too demanding and had gone on too long. It wasn't until she returned one day to the shop, seeing her Mentor smiling and introducing Sterry's new members, that Hathor truly realized how exhuasted from work she was." + }, + { + "name": "Welcome Gift", + "desc": "Regalia's motorcycle key is crafted with a streamlined metal casing and delicately polished edges. The key's teeth are slightly worn, bright traces left behind from years of starting up. Such wear marks are only left when the holder is able to move with precision, cleanly, and without excess force. Hundreds, thousands of identical motions are required to achieve such perfect balance.\r\nWhen alone, Hathor sometimes turns the key once. The turn is always accompanied by a soft click. She has never liked unnecessary noise, yet this sound is one she's never tried to eliminate. It was a calm yet restless night when a welcome gift was silently handed to her through her Mentor's quiet kindness—which later became a habit rooted deep in her heart.\r\nWhat truly captivated her came later, when the engine sets the rhythm, marking missions received and quests completed." + }, + { + "name": "Elite Courier's Delivery Advice", + "desc": "\"Heavy rainfall ahead with flooding of unknown depth. In situations like this, it's best to take a detour and avoid the risk.\"\r\n\"Hethereau is in the middle of rush hour traffic, so there's a high probability of congestion at the next intersection. Fortunately, the target isn't far, so switching to delivery on foot would be more efficient.\"\r\n\"When the road surface is rough, I recommend switching to non-slip tires. When passing through gravel, you need to adjust your center of gravity promptly to maintain stability.\"\r\n\"Night deliveries require constant vigilance, so blind spots must be checked repeatedly. Only proceed once safety is confirmed.\"" + }, + { + "name": "\"Diving into an Anime World\"", + "desc": "To master anime culture, Hathor approached it with the spirit of tackling a difficult challenge: learning from Haniel and diving into \"Gen Z.\"\r\nUnlike the typical anime-watcher, Hathor wasn't a fantasy-type viewer who would arrange figurines and acrylic stands in magic circle formations, press \"summon\" on the latest Cubox Technologies tablet, then chant incantations to bless the spirit of binge-watching 24 episodes straight (none of which Haniel did).\r\nInstead, during planned time periods, she pulled out a 1,000-page notebook to record various questions that arose while watching, and after finishing each episode, she wrote a review analyzing plot highlights, viewer comment dynamics, character relationships, and more. She never skipped episodes or watched in double speed, and she categorized and filed the personal styles of the main creative team's directors, scriptwriters, and animation staff.\r\nAfter several days of study, during chats with Haniel, Hathor could accurately state which episode each character appeared in and how people on the internet reacted to the scene. When Haniel asked how she did this, Hathor explained what she meant by \"diving into an anime.\" When Haniel seemed shocked, Hathor quietly wondered to herself: Perhaps I should've tried harder…?" + }, + { + "name": "Non-Mission", + "desc": "One day after finishing her delivery quests, Hathor was riding her motorcycle as usual, speeding away down the road. Perhaps because she'd been watching too much anime lately, the massive billboard advertisement for \"Gen Z\" unusually caught Hathor's attention. The limited venue merchandise shown in the promotional image was a term Hathor had been hearing frequently recently, and it looked familiar. The items could only be purchased through limited offline channels, like exclusive conventions, shops, or cafes. As it happened, there was a shop nearby that Haniel had been talking about for ages, and somehow, Hathor felt like trying her luck.\r\nThe phrase \"trying her luck\" shouldn't appear in the vocabulary of someone accustomed to precision operations. Since getting into anime culture, Hathor had gradually begun accepting things in life that carried \"randomness\": the randomness of gacha pulls, daily fragmented discussions about new anime with her two fellow fans, the randomness of new terms popping up unexpectedly, the \"pseudo-randomness\" of whether limited venue merchandise could be obtained, and so on…\r\nToday also brought a random event: the spontaneous decision to detour to a limited merchandise shop after finishing deliveries. Next she would \"try her luck\" on limited goods, and then give an unexpected gift to the two little owls… Hathor habitually kept herself wound tight, perhaps due to muscle memory from early high-intensity deliveries, or the professional discipline of strictly following plans, plus the careful caution she'd always maintained toward her Esper after losing control.\r\nBut since she'd begun learning about \"modern youngster life\" from those two, something called \"randomness\" had started taking root in her body. Like noticing the billboard advertisement today, like suddenly detouring to a merchandise shop, like putting a gift that wasn't on her quest list into her pouch. She had never so clearly realized that she had been wound too tight for too long, so long that she'd forgotten she actually lived in a city full of human warmth and life." + } + ], + "melee": [ + { + "id": "GA_Hathor_Melee", + "name": "Rapid Delivery", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Rapid Delivery</>", + "<Title>Basic Attack: Final Dispatch</>", + "<Title>Basic Attack: To The Skies</>", + "<Title>Critical Riposte: Zero-Error Operation</>" + ], + "desc": [ + "Displays superior martial arts, performing up to <NumGreen>5</> consecutive attacks, dealing <Xiang>Lakshana DMG</>.", + "Plunges from the air, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Hold Basic Attack to trigger. Sweeps around the target at high speed to knock them up, then restrains and plunges, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area on impact. Performs Final Dispatch if the target cannot be knocked up.", + "Triggers when using Rapid Delivery after a Critical Dodge. Launches a lightning-fast counterattack, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area, reducing Break, and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> on hit (up to <NumGreen>1</> stack every <NumGreen>5s</>)." + ], + "desc_short": [ + "Deals <Xiang>Lakshana DMG</>.", + "Deals <Xiang>Lakshana DMG</>.", + "Knocks the target up and slams them down, dealing <Xiang>Lakshana DMG</>. If the target cannot be knocked up, Final Dispatch is triggered instead.", + "Triggers when using Basic Attack after a Critical Dodge. Deals <NumGreen>1</> instance of <Xiang>Lakshana DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> on hit. Cooldown: <NumGreen>5</>s." + ], + "context": "<Italic>Legend speaks of a secret art mastered only by Elite Couriers who have completed tens of thousands of flawless deliveries. With an almost instinctive striking rhythm, they tear through any obstacle blocking the delivery route, all to ensure a single successful delivery without breaking promises or trust.</>", + "icon": "/Game/UI/UI_Icon/Skill/Hathor_Melee", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Hathor_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%*4", + "values": [ + [ + 16, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40 + ], + [ + 13, + 14, + 15, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%*2", + "values": [ + [ + 13, + 14, + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Melee4_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 22, + 24, + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56 + ], + [ + 47, + 51, + 55, + 60, + 65, + 70, + 76, + 82, + 88, + 95, + 103, + 111, + 120 + ], + [ + 99, + 107, + 115, + 125, + 135, + 146, + 157, + 170, + 184, + 198, + 214, + 231, + 250 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 44, + 47, + 51, + 55, + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111 + ], + [ + 109, + 118, + 128, + 138, + 149, + 161, + 174, + 188, + 203, + 219, + 237, + 256, + 276 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 125, + 135, + 145, + 157, + 170, + 183, + 198, + 214, + 231, + 249, + 269, + 291, + 314 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Branch_Damage", + "name": "Branch DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 240, + 259, + 279, + 302, + 326, + 352, + 380, + 411, + 444, + 479, + 518, + 559, + 604 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 68, + 73, + 79, + 85, + 92, + 99, + 107, + 116, + 125, + 135, + 146, + 158, + 171 + ], + [ + 130, + 140, + 151, + 163, + 176, + 191, + 206, + 222, + 240, + 259, + 280, + 303, + 327 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Hathor_Skill", + "name": "Aerial Command", + "type_name": "Redirect Skill", + "desc_name": [ + "<Title>Redirect Skill: Aerial Command</>", + "<Title>Redirect Skill: Cyclone Strike</>" + ], + "desc": [ + "Target locked, time to wrap this up quickly. Leaps into the air and slashes the target in front with wings, gaining <NumGreen>2</> stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</>.\r\nHold to enter charge status, increasing the power of Aerial Command and inflicting targets in range with <TextEXPL>Five-Star Tracking</> effect. The charge lasts up to 5s, during which Hathor constantly deals AoE <Xiang>Lakshana DMG</> while the skill range gradually expands. The effect ends when the skill button is released, concluding the charging phase.\r\n<TextHLT>Five-Star Tracking</>\r\nLasts for 5s. Grants 3 stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> when the target attacks or hits Hathor or an ally during this time.", + "Consumes <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> to cast this skill while in <TextEXPL>Emergency Delivery</> status. Summons a motorcycle of thorns and unleashes a rapid combo on the target. Increases DEF while the skill is active." + ], + "desc_short": [ + "Casts to deal damage and grant <NumGreen>2</> stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</>.\r\nHold to enter charge status, increasing the skill power and inflicting all targets within range with <TextEXPL>Five-Star Tracking</> effect. Charge lasts up to 5s. During this time, continuously deals <Xiang>Lakshana DMG</> while the skill range gradually expands. Release the button to end the charge.\r\n<TextHLT>Five-Star Tracking</>\r\nLasts for 5s. Grants 3 stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> when the target attacks or hits Hathor or an ally during this time.", + "Consumes <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> to cast this skill while in <TextEXPL>Emergency Delivery</> status, unleashing a combo on the target. Increases DEF." + ], + "context": "<Italic>To ensure delivery within the time limit, forcibly eliminating enemies along the way is also one of the basic principles of the job.</>", + "icon": "/Game/UI/UI_Icon/Skill/Hathor_Skill1", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Hathor_Skill1_Damage", + "name": "Aerial Command Press Ratio", + "icon": "", + "value_name": "{0}%*2+{1}%", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ], + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Skill2_Damage", + "name": "Aerial Command Hold Ratio", + "icon": "", + "value_name": "{0}% *4 + {1}% + {2}% *5", + "values": [ + [ + 10, + 11, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 20, + 22, + 23, + 25 + ], + [ + 122, + 132, + 142, + 154, + 166, + 180, + 194, + 209, + 226, + 244, + 264, + 285, + 308 + ], + [ + 55, + 59, + 64, + 69, + 75, + 81, + 87, + 94, + 102, + 110, + 119, + 128, + 139 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Skill1Power_Damage", + "name": "DoT Ratio", + "icon": "", + "value_name": "Each instance {0}%", + "values": [ + [ + 55, + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 120, + 129, + 140 + ] + ] + }, + { + "name": "Max Charge Time", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5, + 4.5 + ] + ] + }, + { + "id_stats": "GA_Hathor_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Skill5_Damage", + "name": "Cyclone Strike 1st Instance Ratio", + "icon": "", + "value_name": "{0}%*7", + "values": [ + [ + 42, + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 108 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Skill6_Damage", + "name": "Cyclone Strike 2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 143, + 154, + 167, + 180, + 194, + 210, + 227, + 245, + 265, + 286, + 309, + 333, + 360 + ], + [ + 113, + 122, + 132, + 143, + 154, + 166, + 180, + 194, + 210, + 227, + 245, + 264, + 286 + ], + [ + 143, + 154, + 167, + 180, + 194, + 210, + 227, + 245, + 265, + 286, + 309, + 333, + 360 + ] + ] + }, + { + "id_stats": "GE_Player_Hathor_Skill9_Damage", + "name": "Cyclone Strike 3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 196, + 212, + 229, + 248, + 267, + 289, + 312, + 337, + 364, + 393, + 425, + 459, + 495 + ], + [ + 353, + 381, + 411, + 444, + 480, + 518, + 560, + 605, + 653, + 705, + 762, + 823, + 889 + ] + ] + }, + { + "name": "Cyclone Strike: 1st Instance Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Cyclone Strike: 2nd Instance Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11 + ] + ] + }, + { + "name": "Cyclone Strike: 3rd Instance Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Increases DEF during Cyclone Strike.", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Hathor_UltraSkill", + "name": "Rider Express", + "type_name": "Ultimate", + "desc": "Get out of the way. Summons a motorcycle made of thorns and circles around targets, charging at enemies ahead with increased speed. Launches into the air and dive-bombs the ground, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area.\r\nEnters <TextHLT>Emergency Delivery</> state for a period after skill activation and stops gaining <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</>. Upgrades Aerial Command to Cyclone Strike in this state. Increases Movement Speed and grants ATK bonus based on <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> stacks. Ends <TextHLT>Emergency Delivery</> state immediately when switching characters during this period.", + "desc_short": "Summons a motorcycle and deals <Xiang>Lakshana DMG</>.\r\nEnters <TextHLT>Emergency Delivery</> state after casting and stops gaining <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</>. Upgrades Aerial Command to Cyclone Strike in this state. Increases Movement Speed and grants ATK bonus. Removes <TextHLT>Emergency Delivery</> state immediately when switching characters.", + "context": "<Italic>\"Faster. Faster. Faster…!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Hathor_UltraSkill", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Hathor_UltraSkill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%*2+{1}%", + "values": [ + [ + 96, + 103, + 112, + 121, + 130, + 141, + 152, + 164, + 178, + 192, + 207, + 224, + 242 + ], + [ + 507, + 548, + 592, + 639, + 690, + 745, + 805, + 869, + 939, + 1014, + 1095, + 1183, + 1278 + ] + ] + }, + { + "name": "Emergency Delivery Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "id_stats": "GA_Hathor_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Hathor_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + }, + { + "name": "Movement Speed+", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Express Delivery Power ATK Bonus per Stack", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Hathor_QTE", + "name": "Impact Point Designation", + "type_name": "Support Skill", + "desc": "The time has come. Strikes from the air, kicking the target to trigger an impact, dealing <NumGreen>2</> instances of <Xiang>Lakshana DMG</> to an area.", + "desc_short": "Performs an aerial dive kick on the target, dealing <NumGreen>2</> instances of <Xiang>Lakshana DMG</>.", + "context": "<Italic>Right now.</>", + "icon": "/Game/UI/UI_Icon/Skill/Hathor_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Hathor_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 63, + 69, + 74, + 80, + 86, + 93, + 101, + 109, + 118, + 127, + 138, + 149, + 160 + ], + [ + 136, + 147, + 158, + 171, + 185, + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Hathor_Passive_1", + "name": "Delay Warning", + "type_name": "Passive Skill", + "desc": "<TextHLT>Remora Enhancement</>: Extends the target's Remora duration to 12s and increases Crit Rate by 10% when allies attacking a target affected by Remora.", + "context": "<Italic>Can't risk the delay. I'll handle it.</>", + "icon": "/Game/UI/UI_Icon/Skill/Hathor_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Hathor_Passive_2", + "name": "Efficiency Boost", + "type_name": "Passive Skill", + "desc": "Grants <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> after defeating a target.", + "context": "<Italic>I can go faster.</>", + "icon": "/Game/UI/UI_Icon/Skill/Hathor_Pas2", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Hathor_Passive_3", + "name": "Excellent Rating Lock", + "type_name": "Character Traits", + "desc": "Triggers <TextHLT>Excellent Rating Lock</> when Hathor is in the team and enemies remain nearby for more than <NumGreen>5s</>.\r\n<TextHLT>Excellent Rating Lock</>: Lasts <NumGreen>5s</> after activation. If a target under this status attacks your team during this duration, <TextHLT>Excellent Rating Lock</> is removed, and Hathor gains <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> (up to <NumGreen>6</> stacks).", + "context": "Deal with the risks in the process, so the results can be perfect.", + "icon": "/Game/UI/UI_Icon/Skill/Hathor_Pas3", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_hathor_01", + "name": "Elite Courier", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_jykdy", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases delivery points for City Delivery by <Green2>2</> per day." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Increases customer satisfaction for City Delivery by an additional <Green2>10</> points." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Increases delivery points for City Delivery by <Green2>2</> per day." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Increases customer satisfaction for City Delivery by an additional <Green2>10</> points." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Hathor can help complete <Green2>1</> City Delivery per day and directly obtain the rewards." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Elite Courier", + "desc": "Holding the Redirect Skill button for the first time in battle grants <NumGreen>6</> stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1025_1", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ] + }, + { + "name": "Thorn Dominion", + "desc": "Grants Hathor <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> when <TextEXPL>Excellent Rating Lock</> and <TextEXPL>Five-Star Tracking</> naturally expire.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1025_2", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ] + }, + { + "name": "Lost Wings", + "desc": "Hathor deals <NumGreen>15%</> increased damage to non-Boss targets.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1025_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Engine Resonance", + "desc": "Increases the Crit Chance of the next Cyclone Strike by <NumGreen>25%</> each time Cyclone Strike is successfully cast while in <TextEXPL>Emergency Delivery</> state. This effect is cleared when the current <TextEXPL>Emergency Delivery</> state ends.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1025_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Regular Sandwich", + "desc": "Increases damage against targets by <NumGreen>1%</> for <NumGreen>every</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&HathorAnger\">Express Delivery Power</> gained. This effect stacks up to <NumGreen>15%</> and is removed upon leaving combat.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1025_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Express Delivery Power", + "desc": "The energy required for Hathor to cast Cyclone Strike can be obtained through various methods. Grants Hathor 5 Ultimate Energy for each stack gained." + } + ] + }, + { + "name": "Daily Life Walkthrough", + "desc": "Increases Crit DMG by <TextEXPL>30%</> while in <NumGreen>Emergency Delivery</> state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1025_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Doubled Capacity", + "desc": "Increases the skill level of Rapid Delivery, Aerial Command, and Rider Express by 1.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Unhindered Passage", + "desc": "Ignores <NumGreen>10%</> of the target’s DEF while in <TextEXPL>Emergency Delivery</> state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1025/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_003", + "amount": 100 + }, + { + "item_id": "Food_092", + "amount": 100 + }, + { + "item_id": "Food_094", + "amount": 100 + }, + { + "item_id": "Flower0001", + "amount": 200 + }, + { + "item_id": "Furniture_draw_002", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_003", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1025" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial", + "Furniture_draw_0037_KV_solo" + ], + "amount": [ + 20, + 5, + 1 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1025" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1025" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1025" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1025" + ], + "amount": [ + 50000, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Hello. I'm Hathor, elite courier of Sterry Express. As per request, please confirm the delivery and sign your name on the Proof of Receipt. The commission fee will be settled once the receipt is confirmed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_meet_001" + }, + { + "name": "Chat: Brake Pads", + "desc": "Ceramic brake pads maintain performance under high heat, ideal for rapid-response emergencies. Semi-metal pads cool faster and are cheaper, and are the best daily driver. Sintered metal pads handle long, high-intensity braking, perfect for mountain routes. Using the right type in the right scenario minimizes delivery delays and ensures tasks are completed on time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_chat_001" + }, + { + "name": "Chat: Elite Courier", + "desc": "Primarily responsible for Class III anomaly deliveries, intel reconnaissance for high-risk jobs, and emergency response. Explosions, car chases, aerial maneuvers…? That's just Haniel exaggerating. She enjoys those movie plots. The reality is, it's just racing against chaos.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_chat_002" + }, + { + "name": "Chat: Cheek Pouches", + "desc": "Some anomaly containers require strict storage conditions—even slight temperature shifts can change their behavior. Keeping them in a Cheek Pouch stabilizes them. You could think of it like a picky pet pouch—moody and fussy, but it never fails a job.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_chat_003" + }, + { + "name": "Sunny", + "desc": "Delivery note… no sun damage risks. The weather's good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_weather_001" + }, + { + "name": "Rainy", + "desc": "Wings and vehicles don't handle rain well. Today's deliveries must start 25 minutes earlier.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_weather_002" + }, + { + "name": "Cold", + "desc": "Anti-slip tires… snow chains… all set.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_weather_003" + }, + { + "name": "Hot", + "desc": "Bike's overheating. Taking a short break.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Route confirmed. Let's go.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Take a break. Stay sharp.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Evening. No time to slack off.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_greet_003" + }, + { + "name": "Good Night", + "desc": "Get some rest. I'll take it from here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_greet_004" + }, + { + "name": "Hobbies", + "desc": "Current top priority is completing the task assigned by my mentor.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_hobby_001" + }, + { + "name": "Worries", + "desc": "Ever since my mentor told me to learn how younger generations live, Haniel's been sharing all kinds of content. Some of them are interesting, but some ideas… \"Why be serious when you can be crazy?\" or \"Stand back! My power is about to go berserk!\"… I don't get it. Having power you can't control is not a good thing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_vexation_001" + }, + { + "name": "Topic: Delivery Routes", + "desc": "Priority is based on urgency and risk level, then route overlap. Weather, road conditions, and high level anomaly activity zones are all factored in before finalizing a route.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_talk_001" + }, + { + "name": "Topic: Road Cycling", + "desc": "Outside delivery work, I sometimes ride mountain roads with no fixed plan… Just to wander. If you want scenic routes, I can send you a guide later… I'll send them in a file on Bagel.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_talk_002" + }, + { + "name": "Topic: Food", + "desc": "I don't have strong preferences for food. To me, food's just fuel. But if I must choose… sandwiches. Plenty of calories, stable structure, perfect for work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "Sometimes my ability spirals out of control and I lose consciousness. I'm considered a threat to city stability and should be restrained. My mentor was the only one who could stabilize me back then. She vouched for me and kept me close. After a lot of training, my control has improved. But if I ever lose it during a mission, and neither my mentor nor Haniel is nearby… end me. Don't hesitate.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_self_001" + }, + { + "name": "About Myself: Wings", + "desc": "After awakening my ability, it appeared on my back and I can feel it like a limb. Why only one wing…? It's not broken. Just undeveloped. Doctors said that if I learn to control it, it might just become whole at last.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_self_002" + }, + { + "name": "About Myself: Thorns", + "desc": "Based on mentor's records, each time my power flares, thorns begin to spread. I've compressed them to the smallest stable range possible—it's still not fully under control.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_self_003" + }, + { + "name": "About Jenson", + "desc": "Most of the time he just isn't there for the business. If you can't reach him, he's probably chatting in some bar.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_about_001" + }, + { + "name": "About Jiuyuan", + "desc": "Since founding Sterry, mentor's workload grew heavier. Her lights are often on deep into the night. I want to get stronger. Strong enough to lighten her burden.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_about_002" + }, + { + "name": "About Haniel", + "desc": "We met by chance. Back then, I couldn't control my powers. Haniel helped stabilize me. Later, she joined Sterry and taught me a lot about the modern youth life… Rather than teacher and student, she prefers to call us friends. Last time we met? Probably at the anime convention… She was… energetic.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_about_003" + }, + { + "name": "About Illica", + "desc": "Whatever he's doing, he's always fired up, spouting weird lines. If you know what he's been watching lately, you can kind of make sense of what he says.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_about_004" + }, + { + "name": "About Sterry Express", + "desc": "Early on, my only contact was with my mentor. She and Jenson founded Sterry. In the early days, even small delivery volumes were overwhelming. After Haniel and Illica joined, things ran smoother, and it all felt a little more… alive.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_about_005" + }, + { + "name": "Character Ascension I", + "desc": "Stay sharp.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "My control has gotten better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "It seems that hard work does pay off.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Where do you want this to be delivered? Oh, I'm the recipient?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_gift_001" + }, + { + "name": "Gift Received II", + "desc": "I've delivered gifts for a lot of people, but I haven't received many gifts for myself.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Normally, I should register this gift in the store…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I'll take good care of it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Target confirmed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Now's the time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "I'll handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Route secured.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Spin and clear.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Clear on time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Delivery complete. Same-day settled.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_containment_001" + }, + { + "name": "Containment II", + "desc": "Where's this headed?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_containment_002" + }, + { + "name": "Nullification I", + "desc": "Appreciate the support.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Thanks for the rating.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Worth keeping.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Clean pickup.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Can't have too many of these.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Making good progress.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Straying from the path isn't always wrong.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Just what we need.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_windfall_006" + }, + { + "name": "Low Health I", + "desc": "This doesn't look good…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_hp_001" + }, + { + "name": "Low Health II", + "desc": "Let's rethink the plan…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_hp_002" + }, + { + "name": "Low Health III", + "desc": "Stay calm.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_hp_003" + }, + { + "name": "Heal I", + "desc": "Right on time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_fh_001" + }, + { + "name": "Heal II", + "desc": "…I owe you one.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_fh_002" + }, + { + "name": "Down I", + "desc": "My last delivery…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_dead_001" + }, + { + "name": "Down II", + "desc": "I have failed…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_dead_002" + }, + { + "name": "Down III", + "desc": "Still not strong enough…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_dead_003" + }, + { + "name": "Takedown I", + "desc": "Good progress.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_kill_001" + }, + { + "name": "Takedown II", + "desc": "No big deal.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_kill_002" + }, + { + "name": "Damaged I", + "desc": "Keep moving.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_struck_001" + }, + { + "name": "Damaged II", + "desc": "Just getting warmed up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "I won't fall.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Careful now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Feeling good. Let's start working.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_deploy_002" + }, + { + "name": "Deploy II", + "desc": "Urgent task. I'm on it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Nowhere to run.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "No loose ends.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Right now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_QTE_003" + }, + { + "name": "Glide I", + "desc": "Perimeter clear.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_Fly_001" + }, + { + "name": "Glide II", + "desc": "Stay balanced.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_Fly_002" + }, + { + "name": "Switch I", + "desc": "I'll provide backup.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_Switch_001" + }, + { + "name": "Switch II", + "desc": "I'll handle this part.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_Switch_002" + }, + { + "name": "Switch III", + "desc": "Stick to the plan.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_Switch_003" + }, + { + "name": "Special Switch - Jiuyuan", + "desc": "Noted.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_SSC_001" + }, + { + "name": "Special Switch - Haniel", + "desc": "Don't worry, I'll handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_SSC_002" + }, + { + "name": "Teammate Down - Jiuyuan", + "desc": "I'll deal with this carefully.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_TeammateDown_001" + }, + { + "name": "Teammate Down - Haniel", + "desc": "I'll cover for you. Focus on recovery.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_TeammateDown_002" + }, + { + "name": "Parry I", + "desc": "As expected.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_Parry_001" + }, + { + "name": "Parry II", + "desc": "One moment is enough.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Come again. Same result.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Opening spotted.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC016/Play_Vo_Char_NPC016_DodgeCombo_002" + } + ] + } + }, + { + "id": "1033", + "name": "Adler", + "description": "The perfect butler who brings peace of mind to everyone at Eibon and the neighborhood.", + "element": [ + { + "element_id": "Incantation", + "name": "Incantation" + } + ], + "rarity": 4, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_015", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_015x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_015_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_adele", + "tags": { + "char_tags": [ + { + "name": "Survival", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag02" + }, + { + "name": "Shield", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_hudun" + }, + { + "name": "DoT", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_chixu" + } + ], + "arcs_tags": { + "type_id": "5", + "name": "Condensate", + "icon": "/Game/UI/UI/player/YH_UI_icon_boson" + } + }, + "reaction": [ + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Scorch", + "desc": "Upon triggering Esper Cycle, inflicts Scorch on the target for <NumGreen>15s</>, dealing DoT." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1033_0", + "characterId": "1033", + "name": "Five Aggregates", + "desc": "An outfit blending combat readiness with elegance. A butler's role: flawlessly handle every task, from security to preparing breakfast.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_015", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_015_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_adele", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_adele", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1180, + 1274, + 1369, + 1463, + 1558, + 1652, + 1746, + 1841, + 1935, + 2030, + 2124, + 2218, + 2313, + 2407, + 2502, + 2596, + 2690, + 2785, + 2879, + 2974, + 3068, + 3162, + 3257, + 3351, + 3446, + 3540, + 3634, + 3729, + 3823, + 3918, + 4012, + 4106, + 4201, + 4295, + 4390, + 4484, + 4578, + 4673, + 4767, + 4862, + 4956, + 5050, + 5145, + 5239, + 5334, + 5428, + 5522, + 5617, + 5711, + 5806, + 5900, + 5994, + 6089, + 6183, + 6278, + 6372, + 6466, + 6561, + 6655, + 6750, + 6844, + 6938, + 7033, + 7127, + 7222, + 7316, + 7410, + 7505, + 7599, + 7694, + 7788, + 7882, + 7977, + 8071, + 8166, + 8260, + 8354, + 8449, + 8543, + 8638 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 55, + 58, + 61, + 63, + 66, + 69, + 72, + 74, + 77, + 80, + 83, + 85, + 88, + 91, + 94, + 96, + 99, + 102, + 105, + 107, + 110, + 113, + 116, + 118, + 121, + 124, + 127, + 129, + 132, + 135, + 138, + 140, + 143, + 146, + 149, + 151, + 154, + 157, + 160, + 162, + 165, + 168, + 171, + 173, + 176, + 179, + 182, + 184, + 187, + 190, + 193, + 195, + 198, + 201, + 204, + 206, + 209, + 212, + 215, + 217, + 220, + 223, + 226, + 228, + 231, + 234, + 237, + 239, + 242, + 245, + 248, + 250, + 253, + 256, + 259, + 261, + 264, + 267, + 270, + 272 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 82, + 89, + 95, + 102, + 108, + 115, + 121, + 128, + 134, + 141, + 148, + 154, + 161, + 167, + 174, + 180, + 187, + 194, + 200, + 207, + 213, + 220, + 226, + 233, + 239, + 246, + 253, + 259, + 266, + 272, + 279, + 285, + 292, + 298, + 305, + 312, + 318, + 325, + 331, + 338, + 344, + 351, + 358, + 364, + 371, + 377, + 384, + 390, + 397, + 403, + 410, + 417, + 423, + 430, + 436, + 443, + 449, + 456, + 462, + 469, + 476, + 482, + 489, + 495, + 502, + 508, + 515, + 522, + 528, + 535, + 541, + 548, + 554, + 561, + 567, + 574, + 581, + 587, + 594, + 600 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Eibon Butler", + "description": "The true pillar of the Eibon Antique Shop is a humble and reliable old-fashioned gentleman. Many Anomaly Hunter organizations in Hethereau have tried to poach him, but Mr. Adler steadfastly remains Eibon's butler.\n\"Hello, welcome to Eibon Antique Shop.\"", + "birthday": "September 25", + "homePlace": "Eibon Antique Shop", + "abilityName": "Ayatana", + "introduction": "The perfect butler who brings peace of mind to everyone at Eibon and the neighborhood.", + "voiceChinese": "王宇航", + "voiceEnglish": "Jacob Craner", + "voiceJapanese": "森川智之", + "voiceKorean": "심규혁" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Adler, full name Alois V. Adler. Although no one has ever called this clearly respectable butler by his full name. At Eibon, being a butler is an incredibly difficult job. Daily duties include but are not limited to: preparing seven completely different breakfasts and getting picky kids to eat their vegetables, keeping track of and restocking the store's alcohol and hangover remedy supplies, damage control plans for unavoidable losses during commissions, maintaining a positive attitude when facing the shop's account balance…\nAll in all, any one is lucky to have a butler like him.\n\nGold medal swordsman, ten-ring archery certificate, advanced tea ceremony instructor, and Bridge Crossings Paper Plane Competition champion. Hethereau's true certification master, \"perfect\" is never just talk. Nanally once started a challenge called \"What can't the amazing Adler do?\" with the winner receiving a \"Lifetime Honorary Member\" title from the Coluccis. Nanally herself won the competition: \"Mr. Adler has definitely never caused trouble!\" Though as the Ichi-daime of the Coluccis, she probably didn't need that reward. As for whether Adler has ever caused any trouble… one would think not.\n\n\"Sorry, old man! I'll definitely watch where I put the flowerpots next time, I won't break the sixty-eighth one!\"\n\"You said the same thing when the sixty-seventh one broke.\"\n\"Taygedo (Eibon's flowerpot destruction master).” \n\"It's fine, it's just a pot. The roots weren't damaged. We'll just get a new one.\"\n\"Then I'll buy the new pot with my allowance!\"\nDuring the days when he first fell into darkness, Adler once accidentally broke a flowerpot too, one worth one year, four months, and thirteen days of \"allowance.\" Thanks to that, Adler has never accidentally broken anything since." + }, + { + "name": "An Old Story", + "desc": "\"Mr. Adler, are you cleaning the storage room again?\"\r\n\"Yes.\"\r\nAs the young man holding cleaning supplies stepped aside, the neatly dressed maid quietly thanked him, kindly reminding him to watch his steps, then hurried off. This estate housed too many people like him, so even this small act of kindness felt precious. The blind young man stood quietly at the storage room entrance until the maid's footsteps faded, then entered the room, feeling his way around while wiping dust with a soft cloth. The other servants disliked cleaning here since it was such tedious work, but Adler didn't mind. Cleaning was actually quite easy work for him—no need to talk to anyone, and the quiet environment made him feel especially relaxed. Though his blindness meant he often needed more time, fortunately this storage room didn't contain anything too fragile, so he just needed to be careful. Adler treasured this hard-won job.\r\nThe artifacts silently watched the busy young man. He didn't favor any particular piece, cleaning each one thoroughly, but whenever he wiped down that suit of armor hanging high above, he would always clean it with extra care. Adler had heard stories about this armor. It was called \"Enlightenment,\"and people told tales of the armor, with its great power and invincible previous owners. Those stories burned in his thin chest. Perhaps he too might someday… Whenever he thought this, Adler would calmly polish each scale even cleaner.\r\nThe peaceful days continued until one snowy night, when the long-silent armor began glowing softly. Deer-like creatures called \"Sunyas\" emerged from Enlightenment, treading on falling snowflakes as they gathered around the sleeping young man.\r\n\"New… master?\"\r\n\"I like him!\"\r\n\"Familiar scent.\"\r\n\"…Mhm.\"\r\n\"In this old one's opinion…\"\r\nTheir chatter didn't wake the sleeping person; they wanted to let his dream last a little longer—they would tell the young man about the good news when the snow cleared and the sun shone bright the next day." + }, + { + "name": "Sunya - Rupa", + "desc": "As the most frequently appearing Sunya, Rupa has its own special nickname at Eibon: \"Little Thing.\" It's the fifth provisional member of The Coluccis, following Taygedo, Edgar, and Sakiri. Although Little Thing doesn't understand what this means, it still loves the name. Whether it's preparing meals or cleaning up, Little Thing is Mr. Adler's best helper. As for payment for its help… just pat its head and reward it with a slice of carrot cake." + }, + { + "name": "Sunya - Vedana", + "desc": "If you had to name the Sunya closest to Eibon, it would definitely be Vedana. Vedana is a sucker for tragic manga endings, a great teammate for co-op games, and the perfect partner for scarfing down midnight snacks. Compared to other Sunyas, Vedana seems to have particularly rich emotions, but actually, Sunyas don't have distinct feelings. Vedana is just good at sensing others' emotions and mimicking them. There was a time when Vedana was quite puzzled by this. Feeling joy because of others' happiness, feeling pain because of others' suffering… where did its own emotions come from? It asked this question to Enlightenment's master. Vedana can't remember how Adler answered anymore, but it remembers that the carrot cake that day was delicious, and that feeling of joy came from itself alone." + }, + { + "name": "Sunya - Sanna", + "desc": "Most days at Eibon are pretty peaceful. Adler doesn't force the Sunyas to do anything. So on days without commissions, they have their own hobbies. Sanna loves to paint. Whenever Eibon receives antique paintings, Sanna is always the first to step forward, identifying authenticity and handling storage. One day, Adler gave Sanna a set of art supplies. From that day on, Sanna became Bagel's newest artist. They say that just one look at Sanna's paintings would make you hear sounds, smell scents, and taste flavors. Unfortunately, no Collection Hall has ever been able to own or even display one of Sanna's works.\nSanna gave its very first painting to Adler, even though it was just a piece of paper with a few hoof prints on it, imprinted like falling snow." + }, + { + "name": "Sunya - Sankhara", + "desc": "Sankhara is the second Sunya to appear in \"Enlightenment,\" and was born from the karma created by war and conflict. Each generation of Enlightenment's masters always had desires, and the fires of karma burned the armor scales day and night. The Sunya gradually fell into slumber, while Sankhara became increasingly awake, since this was the very meaning of its birth. Until the chaotic times passed and this armor became a symbol, eventually forgotten in a dim storage room. Sometimes servants or guests would pause before Enlightenment, speaking their desires to it, but after drinking such burning hatred, most wishes born in peaceful times seemed boring. Enlightenment remained silent. Sankhara sometimes wondered if it too should sleep like its \"siblings.\"\r\nFortunately, Sankhara really liked snowy days, and fortunately, just as Sankhara was preparing to enjoy one last snowfall before sleeping, it heard a wish, one far more greedy than owning an entire city: \"I have so many, many things I want to protect.\"\r\nIn any case, Enlightenment responded to that blind child, and Sankhara had no choice but to follow this new master's way of thinking. Now Sankhara's daily work is taking care of children and using its amazing speed to snag the day's discount items." + }, + { + "name": "Sunya - Vinnana", + "desc": "Vinnana rarely appears before outsiders. Most of the time, it sleeps lazily inside Enlightenment. After all, it was the first Sunya to appear by Mr. Adler's side. \"This old one doesn't have that much energy anymore,\" it always says. Whether it's truly tired from the passage of time or for some other unknown reason, only Vinnana itself knows. However, when it comes to talking about Adler, Vinnana is quite willing to say a few more words.\n\"Alois, ah… Just to see me, that child would sleep in the corridor every day without saying a word. It was this old one's kind heart, who couldn't bear to see a child suffer, that reluctantly responded to him. Who knew that child would later…\"\nWhat follows is Vinnana rambling on about hardships over the years, and those are about what it'd speak of Adler." + } + ], + "melee": [ + { + "id": "GA_Adler_Melee", + "name": "Deliverance", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Deliverance</>", + "<Title>Basic Attack: Liberation</>", + "<Title>Basic Attack: Ignorance</>", + "<Title>Critical Riposte: Revelation</>", + "<Title>Karma</>" + ], + "desc": [ + "Wields his weapon and performs up to <NumGreen>5</> consecutive attacks, dealing <Zhou>Incantation DMG</>.", + "Enters aim mode, dealing <NumGreen>1</> instance of single-target <Zhou>Incantation DMG</> to the enemy in the crosshair.", + "Plunges, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when casting Deliverance after a Critical Dodge. Dodges an attack with a quick dash, seizes the enemy's opening and swiftly swings his weapon, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area, reducing their Break.", + "Grants Adler <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&AdlerYe\">Karma</> when Deliverance or Ignorance hits an enemy.\r\nGrants Adler <NumGreen>2</> stacks of Karma when Liberation hits an enemy.\r\nMax Karma stacks: <NumGreen>20</>." + ], + "desc_short": [ + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>.", + "Grants Karma when Deliverance, Ignorance, and Liberation hit enemies.\r\n Consumes all Karma when casting Evil's Bane to increase damage." + ], + "context": "<Italic>A cane makes for quite the fitting accessory… a gentleman's weapon.</>", + "icon": "/Game/UI/UI_Icon/Skill/Adler_Melee", + "additional_desc": [ + { + "name": "Karma", + "desc": "Grants Karma when Deliverance, Ignorance, and Liberation hit enemies, up to 20 stacks.\r\nConsumes all Karma on cast to increase Evil's Bane's damage by up to 40%." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Adler_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106, + 115, + 124, + 134, + 145 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%*2", + "values": [ + [ + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_Melee4_1_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 21, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55 + ], + [ + 23, + 24, + 26, + 29, + 31, + 33, + 36, + 39, + 42, + 46, + 49, + 53, + 58 + ], + [ + 74, + 80, + 87, + 94, + 101, + 109, + 118, + 127, + 138, + 149, + 161, + 173, + 187 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 87, + 94, + 102, + 110, + 119, + 128, + 138, + 150, + 162, + 174, + 188, + 204, + 220 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_Aim_Damage", + "name": "Charge Attack DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_AirAttack_Damage", + "name": "Plunge Attack DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 36, + 38, + 42, + 45, + 49, + 52, + 57, + 61, + 66, + 72, + 77, + 83, + 90 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_PerfectEvadeAttack_Damage", + "name": "Critical Dodge Counter DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 176, + 190, + 205, + 221, + 239, + 258, + 279, + 301, + 325, + 351, + 380, + 410, + 443 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Adler_Skill", + "name": "Evil's Bane", + "type_name": "Redirect Skill", + "desc": "Need help? Summons Sunya phantoms to strike enemies, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area, then inflicting <Zhou>Incantation DMG</> over time on enemies and granting active characters a shield with Blessing.\r\nConsumes all stacks of <hot textstyle=\"TextEXPL\" param=\"nouns&AdlerYe\">Karma</> on skill cast. <NumGreen>Each</> stack consumed grants Adler <NumGreen>2%</> Skill DMG.", + "desc_short": "Deals <Zhou>Incantation DMG</>, granting active characters a shield with Blessing.", + "context": "<Italic>\"This commission… let's get to know our target first. We…\"</>\r\n<Italic>\"Coluccis! Roll out!\"</>\r\n<Italic>\"…Stay safe, I'll handle everything else.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Adler_Skill", + "additional_desc": [ + { + "name": "Karma", + "desc": "Grants Karma when Deliverance, Ignorance, and Liberation hit enemies, up to 20 stacks.\r\nConsumes all Karma on cast to increase Evil's Bane's damage by up to 40%." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Adler_Skill2_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}% DEF *3", + "values": [ + [ + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 120, + 129, + 139, + 151, + 163, + 176 + ] + ] + }, + { + "id_stats": "GE_Player_Adler_Skill_Damage", + "name": "DoT Ratio", + "icon": "", + "value_name": "{0}% DEF", + "values": [ + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ] + ] + }, + { + "name": "Shield Ratio", + "icon": "", + "value_name": "{0}+{1}% DEF", + "values": [ + [ + 1000, + 1080, + 1166, + 1260, + 1361, + 1470, + 1587, + 1714, + 1851, + 2000, + 2160, + 2332, + 2519 + ], + [ + 80, + 86, + 93, + 1, + 1.08, + 1.17, + 1.26, + 1.37, + 1.48, + 1.59, + 1.72, + 1.86, + 2.01 + ] + ] + }, + { + "name": "DoT Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "name": "DoT Interval", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "Shield Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ] + ] + }, + { + "id_stats": "GA_Adler_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Adler_UltraSkill", + "name": "Tranquility", + "type_name": "Ultimate", + "desc": "I wish not fight if possible. Summons Rupa, Vedana, Sanna, Vinnana, and Sankhara, <NumGreen>5</> Sunyas in total, to strike all enemy targets. Each target takes <NumGreen>5</> instances of <Zhou>Incantation DMG</>. When only a single enemy remains on the field, Sunyas will perform a second strike, dealing a total of <NumGreen>10</> instances of <Zhou>Incantation DMG</>.", + "desc_short": "Deals <Zhou>Incantation DMG</>.", + "context": "<Italic>The folks at Eibon like to guess the names of Adler's Sunyas. When they guess correctly, Adler rewards them with handmade desserts!</>", + "icon": "/Game/UI/UI_Icon/Skill/Adler_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Adler_UltraSkill_Damage", + "name": "Single DMG Ratio", + "icon": "", + "value_name": "{0}% DEF", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GA_Adler_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Adler_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Adler_QTE", + "name": "Pristine Reflection", + "type_name": "Support Skill", + "desc": "This fight shall not be prolonged any longer. Aims and fires <NumGreen>1</> Compressed Round at the enemy, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> to an area on hit.", + "desc_short": "Deals <Zhou>Incantation DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/Adler_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Adler_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Adler_Passive_1", + "name": "Temperance", + "type_name": "Passive Skill", + "desc": "<TextHLT>Scorch Enhancement</>: Applies one of three random debuffs whenever Scorch is inflicted on a target: -20% ATK, -10% Esper Resistance, or +10% Break Efficiency, lasting for 15s. The same effect cannot stack.", + "context": "<Italic>A meticulously pressed uniform and even hair, even in battle. The butler's first lesson is to maintain an impeccable appearance.</>", + "icon": "/Game/UI/UI_Icon/Skill/Adler_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Adler_Passive_2", + "name": "Righteous Heart", + "type_name": "Passive Skill", + "desc": "Adler DEF +<NumGreen>20%</>", + "context": "<Italic>\"Sometimes a forceful strategy is preferable to lengthy negotiations.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Adler_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_adler_01", + "name": "Coffee Master", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_kfds", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Adler increases dish prices by an additional <Green2>0.12</> Fons." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Adler reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, coffee is automatically prepared." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Adler reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Adler increases dish prices by an additional <Green2>0.18</> Fons." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Form", + "desc": "Grants Adler <NumGreen>20</> stacks of Karma when casting Tranquility.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Sensation", + "desc": "Each stack of Karma grants Adler <NumGreen>3%</> DMG Bonus.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Perception", + "desc": "Increases the Shield of Blessing by <NumGreen>20%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Formation", + "desc": "Absorbs a portion of overflow damage based on <NumGreen>50%</> of Adler's DEF when Blessing breaks.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Discernment", + "desc": "Grants Adler <NumGreen>20</> Ultimate Energy when casting Tranquility.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "All Forms Are Void", + "desc": "Extends the duration of Blessing to <NumGreen>12</>s.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1033_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Cleanse", + "desc": "Increases the skill level of Deliverance, Evil's Bane, and Tranquility by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Enlightened Guardian", + "desc": "Increases team's <Zhou>Incantation DMG</> by <NumGreen>10%</> while protected by Blessing.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1033/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "DefUp", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": true, + "value": 12 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_061", + "amount": 100 + }, + { + "item_id": "Food_095", + "amount": 100 + }, + { + "item_id": "Food_097", + "amount": 100 + }, + { + "item_id": "Flower0003", + "amount": 200 + }, + { + "item_id": "Furniture_FlowerPot_004", + "amount": 200 + }, + { + "item_id": "Furniture_draw_006", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1033" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial", + "Furniture_draw_0030_KV_solo" + ], + "amount": [ + 20, + 5, + 1 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1033" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1033" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1033" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1033", + "Likeprice_1033_0" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Welcome to Eibon. I'm Alois V. Adler, the butler. Please, call me Adler. If you need anything, let me know. I'm at your service.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_meet_001" + }, + { + "name": "Chat: Business", + "desc": "This month's revenue… is not looking too promising.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_chat_001" + }, + { + "name": "Chat: Lists", + "desc": "Booze, candy, manga, game cartridges, anti-rust oil… yup, that's everything.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_chat_002" + }, + { + "name": "Chat: Sunya", + "desc": "Thank you all for the help today.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_chat_003" + }, + { + "name": "Sunny", + "desc": "It's perfect weather for an outing. I should prepare some bento boxes for Nanally and the others.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_weather_001" + }, + { + "name": "Rainy", + "desc": "It seems weather forecasts aren't always reliable. Let's find somewhere to wait out the rain.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_weather_002" + }, + { + "name": "Cold", + "desc": "I should remind everyone to dress more warmly, and I'll prepare some cold medicine just in case.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_weather_003" + }, + { + "name": "Hot", + "desc": "One shouldn't indulge in too much cooling off in hot weather—stomach aches are rather unpleasant, after all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning. How's your rest? Come for breakfast when you're ready.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Anything you'd like to eat? I'll get cooking.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Hey, relax. It's our free time now, customers usually don't come at these hours.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_greet_003" + }, + { + "name": "Good Night", + "desc": "Getting enough sleep is essential for maintaining good health… Of course, if you'd like to chat more, I'm always here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_greet_004" + }, + { + "name": "Hobbies", + "desc": "Cooking is a discipline—from selecting ingredients to receiving feedback, each meal is a journey. I love preparing meals for everyone at Eibon, though it would be better if Sakiri were less picky.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_hobby_001" + }, + { + "name": "Worries", + "desc": "Troubles? The shop's running at a deficit, my lady bought another counterfeit antique, and Nanally's schemes bring the neighbors to our doorstep. These things give me a headache, but I worry more about everyone neglecting their well-being. As Eibon's butler, I pay extra attention to such concerns.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_vexation_001" + }, + { + "name": "Topic: Anomalies", + "desc": "Most Oddities are actually quite friendly—they just don't know how to express themselves, or perhaps their ways are different from what we're used to. If you get the chance, try communicating with them. You might just discover a completely different world.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_talk_001" + }, + { + "name": "Topic: Etiquette", + "desc": "Neat attire leaves a good impression, but true etiquette is about considering others' feelings and not imposing our habits. Forcing others to follow our principles is the greatest breach of etiquette.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_talk_002" + }, + { + "name": "Topic: Tips", + "desc": "The secret to handling everything quickly? For routine matters, I simply prepare lists in advance and follow the plan. Sometimes unexpected situations do arise—that's when patience and a bit of luck come in handy… I suppose with enough experience, you start to recognize patterns in how to handle things.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_talk_003" + }, + { + "name": "About Myself: Armor", + "desc": "This armor is called Enlightenment. It's not mine; I'm just fortunate enough to use it. Sunya resides within it, making household chores easier.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_self_001" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "It would be difficult for me to have a truly neutral stance on Esper abilities or anomalies, as I undoubtedly have vested interests with them… Most people are puzzled when they first meet me, wondering how a blind man can perceive the world around him with such clarity. I was once just an ordinary blind person, dependent on others for many things. It was the Enlightenment that gifted me with this special ability to perceive the world, and with it, a duty to protect.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_self_002" + }, + { + "name": "About Myself: Glasses", + "desc": "These glasses? Nanally bought them for me with her first earnings from commissions after joining Eibon. She was absolutely beaming when she said, \"This is how the gentleman thug dresses in movies!\" Seeing her so excited, I couldn't help but accept this unique gesture. As for her own pair, she got them to embody more of a… \"Ichi-daime boss\" vibe? Such gifts are quite in style with Nanally.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_self_003" + }, + { + "name": "About Myself: Being Perfect", + "desc": "Perfect, huh? You're far too kind. I simply have a few more years behind me, having seen a bit more of the world. When I was their age, I dreamed of being as bright as they are now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_self_004" + }, + { + "name": "About Hotori", + "desc": "My lady carries many burdens… I'm ashamed to say I can only help with mundane matters, but it's my honor to shoulder even a small portion of her responsibilities.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_about_001" + }, + { + "name": "About Nanally", + "desc": "Nanally is a simple kid. Thanks to her, Eibon has become much more lively. I wish when things happen, she would be more… But I'm not complaining about the noise. This is exactly the age when they should be playing around.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_about_002" + }, + { + "name": "About Sakiri", + "desc": "Sakiri isn't great at expressing her feelings directly. For someone as sensitive as her, actions speak louder than words. She often cares more than she shows. Giving her space helps her open up gradually.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_about_003" + }, + { + "name": "About Edgar", + "desc": "Being unsociable isn't necessarily a bad thing—everyone has their own way of living, and Edgar himself isn't troubled by his difficulty in communicating with others, which is perfectly fine. Besides, he has Sakiri and Nanally by his side who understand him best, and they'll always be his most attentive listeners.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_about_004" + }, + { + "name": "About Daffodill", + "desc": "Daffodill shows unwavering loyalty to my lady, handling all matters concerning her personally—she's someone we can truly rely on. Thanks to her support, I can focus on taking care of other tasks… Though sometimes, I wish she would take better care of herself too.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_about_005" + }, + { + "name": "About Taygedo", + "desc": "I'm grateful for Taygedo's regular help around the shop, especially those interesting little inventions of his. Though Sakiri, Nanally, and even my lady joke about selling him to settle debts, they can't help but ask about him when he hasn't been around for a while.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_about_006" + }, + { + "name": "About Eibon Antique Shop", + "desc": "Eibon wasn't always this lively. When we first settled on Hankaku Street, it was run-down. Sakiri barely spoke, and both my lady and Daffodill were busy. Things changed when we found Taygedo, and even more when Nanally and Edgar joined. The shop was filled with warmth and laughter. Now, with Appraiser here, Eibon feels like a true home.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_about_007" + }, + { + "name": "Character Ascension I", + "desc": "Learning knows no bounds.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Could never stop improving.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "A moment worth remembering.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_ug_003" + }, + { + "name": "Gift Received I", + "desc": "What a wonderful gift. Thank you, Appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_gift_001" + }, + { + "name": "Gift Received II", + "desc": "I was just reminded of some things in the past… I like the gift a lot. Thanks.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Appraiser, I've always known you had great taste.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I'll treasure the gift and the effort you put in.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Enlighten.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Dispel.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Comprehend.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Everything with form is unreal.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Selfless, formless.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "May you find eternal peace.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "I'll take care of the cleanup work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_containment_001" + }, + { + "name": "Containment II", + "desc": "Thanks for your hard work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_containment_002" + }, + { + "name": "Nullification I", + "desc": "Need something to recharge your energy?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Go take a break. I'll handle the rest.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Worth adding to the collection.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "What a pleasant surprise—today is turning out to be quite a good day.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "An unfamiliar collectible— should take it back for a closer look.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Looks like we might turn a profit this month.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "How about we have something special for dinner tonight?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Quite good quality. Let's keep it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_windfall_006" + }, + { + "name": "Low Health I", + "desc": "That's unexpected.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_hp_001" + }, + { + "name": "Low Health II", + "desc": "Don't worry, I'm fine.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_hp_002" + }, + { + "name": "Low Health III", + "desc": "Please stand behind me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_hp_003" + }, + { + "name": "Heal I", + "desc": "Feeling better now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_fh_001" + }, + { + "name": "Heal II", + "desc": "All is well.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_fh_002" + }, + { + "name": "Down I", + "desc": "We can go… further…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_dead_001" + }, + { + "name": "Down II", + "desc": "Please… take care of them…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_dead_002" + }, + { + "name": "Down III", + "desc": "Sorry to disappoint you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_dead_003" + }, + { + "name": "Takedown I", + "desc": "Are you alright?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_kill_001" + }, + { + "name": "Takedown II", + "desc": "Haven't lost my edge yet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_kill_002" + }, + { + "name": "Damaged I", + "desc": "My mistake.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_struck_001" + }, + { + "name": "Damaged II", + "desc": "Be careful.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "This could be trouble.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Difficult situation.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Good to get some exercise.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_deploy_002" + }, + { + "name": "Deploy II", + "desc": "How may I be of service.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Prolonged fights serve no purpose.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Let's finish this quickly.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "All but an illusion.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_QTE_003" + }, + { + "name": "Glide I", + "desc": "Is the wind picking up?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_Fly_001" + }, + { + "name": "Glide II", + "desc": "Very convenient way to travel.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_Fly_002" + }, + { + "name": "Switch I", + "desc": "Rest for a moment.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_Switch_001" + }, + { + "name": "Switch II", + "desc": "Good thing I'm not late.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_Switch_002" + }, + { + "name": "Switch III", + "desc": "I won't let you down.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_Switch_003" + }, + { + "name": "Special Switch - Hotori", + "desc": "Miss, allow me to handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_SSC_001" + }, + { + "name": "Special Switch - Nanally", + "desc": "Well done, Nanally.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_SSC_002" + }, + { + "name": "Special Switch - Sakiri", + "desc": "Sakiri, stay safe.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_SSC_003" + }, + { + "name": "Special Switch - Edgar", + "desc": "Need me to service your computer parts?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_SSC_004" + }, + { + "name": "Special Switch - Daffodill", + "desc": "Shift change. Good work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_SSC_005" + }, + { + "name": "Special Switch - Zero", + "desc": "I'll protect you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_SSC_ZERO_001" + }, + { + "name": "Teammate Down - Hotori", + "desc": "Miss! This is my fault…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_TeammateDown_001" + }, + { + "name": "Teammate Down - Nanally", + "desc": "Nanally, don't push yourself!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_TeammateDown_002" + }, + { + "name": "Teammate Down - Sakiri", + "desc": "Even Kiroumaru needs time to digest.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_TeammateDown_003" + }, + { + "name": "Teammate Down - Edgar", + "desc": "You've done well, Edgar.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_TeammateDown_004" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "Daffodill, thank you for your hard work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_TeammateDown_005" + }, + { + "name": "Teammate Down - Zero", + "desc": "You did well, Appraiser. Leave the rest to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_TeammateDown_006" + }, + { + "name": "Parry I", + "desc": "Precise choice.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_Parry_001" + }, + { + "name": "Parry II", + "desc": "Sharp as ever.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "I've learned something.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Patience over haste.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC010/Play_Vo_Char_NPC010_DodgeCombo_002" + } + ] + } + }, + { + "id": "1036", + "name": "Zankou", + "description": "The widely recognized \"least captain-like captain\" from ETD-4.", + "element": [ + { + "element_id": "Incantation", + "name": "Incantation" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_canhong", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_canhong_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong_256", + "iconGacha": "/Game/UI/UI/Appearance/Fashion/1024/YH_lihui_fashionshop_canhong", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + }, + { + "name": "DoT", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_chixu" + }, + { + "name": "Follow-up Attack", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuijiagongji" + } + ], + "arcs_tags": { + "type_id": "4", + "name": "Gas", + "icon": "/Game/UI/UI/player/YH_UI_icon_gas" + } + }, + "reaction": [ + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Scorch", + "desc": "Upon triggering Esper Cycle, inflicts Scorch on the target for <NumGreen>15s</>, dealing DoT." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1036_nighty", + "characterId": "1036", + "name": "Moonlit Courtyard", + "desc": "Zankou's loungewear. A loose robe and wooden clogs, perfect for drifting into a long, uninterrupted dream.\r\n\"The night's still young… I wonder what it has in store.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_canhong3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_canhong3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_canhong3", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1036_0", + "characterId": "1036", + "name": "Fleeting Moment", + "desc": "Zankou's usual attire. Now that The Scarlet Letter is gone, where will fate lead Zankou next?\r\n\"One moment, forever.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_canhong", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_canhong", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_canhong", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1036_1", + "characterId": "1036", + "name": "Red Nightshade", + "desc": "Zankou's attire from her days with The Scarlet Letter. When a job gets messy, she prefers something bold enough to turn every head. After all, getting noticed is part of the hunt.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong5_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_canhong5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_canhong5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_canhong5", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1036_swimsuit", + "characterId": "1036", + "name": "Searing Lavender", + "desc": "As fireworks bloom across the sky, the dazzling display can make reality feel like a dream. Is this moment real, or a beautiful illusion you never want to wake from?", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong4_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_canhong4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_canhong4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_canhong4", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1036_2", + "characterId": "1036", + "name": "Twilight Noir", + "desc": "Light shifts, and something stirs beneath the surface. When night overtakes reality, even the sweetest dreams may be quietly rewritten.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong1_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_canhong1", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong1_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_canhong1", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_canhong1", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1036_3", + "characterId": "1036", + "name": "Autumn Vignette", + "desc": "Zankou's custom casualwear, created after studying modern fashion. It helps her blend into the city crowd, though whether it actually looks fashionable is still up for debate.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_canhong2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_canhong2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_canhong2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_canhong2", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1280, + 1382, + 1485, + 1587, + 1690, + 1792, + 1894, + 1997, + 2099, + 2202, + 2304, + 2406, + 2509, + 2611, + 2714, + 2816, + 2918, + 3021, + 3123, + 3226, + 3328, + 3430, + 3533, + 3635, + 3738, + 3840, + 3942, + 4045, + 4147, + 4250, + 4352, + 4454, + 4557, + 4659, + 4762, + 4864, + 4966, + 5069, + 5171, + 5274, + 5376, + 5478, + 5581, + 5683, + 5786, + 5888, + 5990, + 6093, + 6195, + 6298, + 6400, + 6502, + 6605, + 6707, + 6810, + 6912, + 7014, + 7117, + 7219, + 7322, + 7424, + 7526, + 7629, + 7731, + 7834, + 7936, + 8038, + 8141, + 8243, + 8346, + 8448, + 8550, + 8653, + 8755, + 8858, + 8960, + 9062, + 9165, + 9267, + 9370 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 83, + 87, + 91, + 95, + 100, + 104, + 108, + 112, + 116, + 120, + 125, + 129, + 133, + 137, + 141, + 145, + 149, + 154, + 158, + 162, + 166, + 170, + 174, + 178, + 183, + 187, + 191, + 195, + 199, + 203, + 208, + 212, + 216, + 220, + 224, + 228, + 232, + 237, + 241, + 245, + 249, + 253, + 257, + 261, + 266, + 270, + 274, + 278, + 282, + 286, + 291, + 295, + 299, + 303, + 307, + 311, + 315, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 349, + 353, + 357, + 361, + 365, + 369, + 374, + 378, + 382, + 386, + 390, + 394, + 398, + 403, + 407, + 411 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_03_lv1", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_03_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_03_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "/", + "description": "As a former member of \"The Scarlet Letter\" and the most uncanny and dangerous Esper under Inanna's command, Zankou possesses powers that terrify ordinary people, with a brutal way of going about her business. In elite social circles, the name \"Red Nightshade\" once struck terror into many a celebrity and magnate.\r\nWhether facing enemies or allies, Zankou is always akin to a predator lying in wait, using her right eye to read emotions and weave illusions, and gaze upon your soul with hunger…", + "birthday": "November 13", + "homePlace": "/", + "abilityName": "Eye of Delusion", + "introduction": "A former member of the secret organization \"The Scarlet Letter,\" code-named \"Red Nightshade,\" now a prisoner on Ghroth Island.", + "voiceChinese": "陈婷婷", + "voiceEnglish": "Stephanie Wong", + "voiceJapanese": "井上喜久子", + "voiceKorean": "허예은" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Zankou rarely speaks of the days that came before she joined The Scarlet Letter. To her, such dark times were not worth remembering.\r\nIt all began with a careless, secret experiment. A solitary, unknown girl was treated as a vessel for cultivating Esper Ability, and the researchers, along with those greedy, gluttonous elites, considered her a worthless sacrifice on the path to greatness. Unbelievable pain, solitude, mutilation, rebirth… these grotesque, repulsive torments were daily occurrences. Time and again, she would inch towards the edge of death, only to be dragged back to the world of the living.\r\nUntil, in a bitter irony, a miracle truly came to pass: her Esper Ability burst forth, turning that sinful dungeon into an ocean of blood. No one survived but her.\r\nA noble, pure-hearted philanthropist was the first to discover her amidst the ruins. She brought that girl back to the gardens, as if transporting a feral wildflower. To her delight, that wildflower, born in the filth and muck, was already tempered completely—exactly to her liking.\r\nThus, the flower known as \"Red Nightshade\" took root in the soil of Scarlet Letter, and Inanna gained her loyal adopted daughter—her sharpest dagger.\r\nYet, Innana was unaware that the \"leash\" on her daughter frayed at the edges. Zankou kept quiet about her own Esper Ability, and only opened that uncanny eye of hers from the shadows, hoping to peer into her new family's hearts. Those who tried to bully her, curry favor, or befriend, were merely ignored—and instead swept into a sinking mire, where reality and illusion blurred. They began to doubt what was real or false, slowly transforming into soulless husks—playthings to be puppeteered by Zankou.\r\n\"Everyone has a flame burning in their heart.\"\r\nTo Zankou, people's faces were merely monochrome, but the bright red flames of their souls never ceased to burn.\r\nEach person's fire was different—some fierce, some dim, some dark, some crimson… In her eyes, most were utterly mundane; the few that were worth a second glance could only serve as brief playthings. It was only when she watched those flames burn themselves out on the brink of collapse, exhaling flake after flake of hopeless ash, that she showed a hint of delight, as if at last admiring a masterpiece.\r\nBut in this cold, monotonous world, dotted with countless dreary flickers, there was always one different soul… At first, it was a blinding white; later, it became a hue she had yet to see anywhere else—an indescribable color.\r\n\"How beautiful… I'm unable to look away.\"" + }, + { + "name": "Blinding Scarlet", + "desc": "When it comes to the unknown, human beings have always shared the same curiosity and arrogance. From awe to fear, from scrutinizing to touching, until the spark of \"conquest\" fully ignited the fuse of greed… such was the attitude some held toward the existence known as \"Espers\".\r\nCults, circles, private research institutes, secret societies… those driven by greed and pride gathered like hyenas, desperate for a morsel of flesh. They would pay any price, ignore every restriction and taboo, and thirst for the miracles an Esper Ability could bring… or perhaps, for the ability itself.\r\nOn a remote island, there was a secret society deemed \"Eyepecker.\" Its members believed in a heresy: Esper Abilities were a gift from a mysterious unknown, and that gift would bless the fortunate ones born with special \"eyes\". They went about collecting those who were described as such, regarding them as \"vessels\" for the awakening of Esper Abilities, imprisoning them in dark, dank dungeons and burning their eyes every day with a searing mixture. They firmly believed this would awaken abilities—and that by transplanting those eyes into themselves, they could seize that power for their own.\r\nZankou's earliest memory began in that cruel jail.\r\nThe girl had a pair of gem-like eyes. She could not understand why, her vision deprived of color, she could only see a gray-white blur. What she understood even less was how far a human's greed could push them to do the unspeakable. Ever since Eyepecker had abducted her, the meaning of her existence had been reduced to being completely bound every day, having her eyelids pried open, and trembling as the scalding, acrid, murky liquid dripped onto her eyeballs.\r\nThe voracious, intoxicated by their own delusions, carried out their devilish deeds day after day, heedless of its absurdity. Yet, ironically, Zankou really did awaken the Esper Ability dwelling in her eyes under that inhuman torture. When she was brought to the eye-extraction ritual, the society's members were already arguing over who the eyes would belong to, each one revealing the hidden identity they had been concealing all along: the powerful, the wealthy, or some illustrious family… Their voices grew into a raucous uproar, and in the haze of anesthesia, Zankou saw the first color beyond black and white. It was warm and blinding, burning brightly among the embers of countless souls, spraying from wounds opened in slaughter, weaving into a scarlet maelstrom that encircled her…\r\nThat day, the Eye of Delusion shrouded the entire island, and the lowlifes who competed with one another instead butchered each other to death, drowning within the hallucination, until no one was left alive." + }, + { + "name": "Spider & Bloom", + "desc": "Zankou saw a shockingly pleasing red in the pool of blood.\r\nThe owner such red strut towards her, her high heels echoing throughout the empty dungeon's walls. Then the clacking stopped, giving way to velveteen words:\r\n\"Let me see your face, my poor little petal.\r\nFrom today on, Scarlet Letter is your home.\"\r\nHome… what was that?\r\nThe woman before her promised the girl something she couldn't comprehend: a \"home.\" Though the girl couldn't understand the meaning of the woman's words, she could feel that her voice and touch were gentler than anything she had ever experienced.\r\n\"You may call me… Mother.\"\r\nZankou looked warily at the tall, thin woman before her. Beneath her gentle gaze lurked an indecipherable smile. The blaze of her soul was as vermilion and resplendent as the clothes she wore, and its greedy flames danced and flared before the girl's eyes, almost burning her alive.\r\nYet, she still willingly replied with one word only:\r\n\"Mother.\"" + }, + { + "name": "Chasing Blooms", + "desc": "The Scarlet Letter Garden nurtured many flowers. The loving Inanna tended to them, raining down sweet dew and pruning their branches. The flowers that pleased her most were even granted new names—\"Red Nightshade\" was one of the many.\r\nYet, Zankou knew that Mother did not love her flowers; she simply enjoyed standing at the center of the garden and admiring her hard work.\r\nWithin the Scarlet Letter's estate walls, Inanna no longer needed to hide her true nature. The generous, sentimental philanthropist was merely a public performance. In the confines of her heart, there was only a businesswoman's austere coldness and greed, along with the arrogance that developed unceasingly once she had entered \"high society\". Like a towering crimson spire, she cast a chilling shadow, looming endlessly over her Garden.\r\nShe always mixed rewards with punishment when dealing with her daughters. Zankou was subjected to the harshest training. Zankou didn't care; her time in the dungeon had long since numbed her to pain. Even after enduring such torment at the hands of Mother, Zankou still dedicated complete loyalty to her, and carried out every task she was given. As she watched her other sisters have their emotions and fates toyed with, however, Zankou found that she, too, could find a little amusement in the Garden.\r\nThe Eye of Delusion could perceive emotions—and taste them, too. The rotten sweetness of fear, the bitterness of despair, and the sharp bite of hatred… her fellow flowers' feelings became nourishment for Zankou… And Zankou came to fully understand Mother's hobby.\r\nHer aberrant eye was always on the prowl for vivid colors, as if admiring a field for its beautiful blooms, only to pluck the finest flowers. Whenever a lovely sobbing rang out through the estate at night, and the tiny glows of the soul twinkled, Zankou would gladly bring comfort to that fragile bud, then later control it, toy with it, to then ultimately cast it aside. Under her words and gaze, those unsettled little buds bloomed.\r\nSuch pleasure never lasted long. The girls' minds were rapidly frayed from gazing into the Eye of Delusion, becoming husks at Zankou's mercy, and the color of their souls faded, withering and unwatered.\r\nIt never mattered, though. The Scarlet Letter's Garden was vast; even if one blossom withered, there would always be another waiting to sprout." + }, + { + "name": "姐姐,姐姐", + "desc": "Among all her sisters, only one made Zankou limit her abilities when they locked eyes.\r\nHer soul was a pure, translucent flame, as clear as the first light of dawn. As if beholding a wondrous sight, she blurted out at their very first meeting…\r\n\"What a beautiful color…\"\r\nBut the white-clad girl named Daffodill didn't understand. She simply obeyed her adoptive mother's orders, walked to the car door, bowed, and reached out to welcome her new little sister.\r\n\"Welcome home, little sister.\"\r\nZankou reached out toward her, obsession and curiosity gathering in her eyes. Unknowingly, a feral smile nearly surfaced on the girl's face. As if snatching something away, she suddenly clutched that girl's hand tightly, pulling her closer, as if wanting to bathe herself in that hallowed flame…\r\nAfter that unconventional greeting, they were eventually ordered to become partners, sisters—family.\r\nZankou knew she and her sister were not the same, but so what? Two complete opposites—conjoined in their fate. In the Scarlet Letter Garden, countless vines would wind around and bind them, till death did them part. They would step into the same mire, share the same flower bed, walk onto the same battlefield, and return to the same grave. They were as close as family could be.\r\nDay after day, she watched Daffodill through her \"special\" eye. As the first daughter adopted by Inanna, Daffodill was steadfast and immovable, rigid—no matter how harsh the mission, she would always surpass Mother's expectations. When it came to eliminating a target, she was even unfeeling… Yet that very same sister would tenderly heal her wounds after every mission or punishment.\r\n…But later, for some undiscernable reason, Daffodill changed. That decisiveness and indifference became hesitation, along with growing melancholy and confusion. From then on, that white, steady flame would occasionally flutter.\r\n\"So she has a side like that too, then.\"\r\nZankou continued to observe Daffodill, as though watching a bud begin to blossom. If her sister became weak, before Mother destroyed and discarded her, she would transform her into her most prized possession. With a heavy heart, Zankou looked forward to that day." + }, + { + "name": "A Rabbit", + "desc": "\"…There's a rabbit in the corner of the backyard.\"\r\n\"I fed it some cabbage leaves. It ate them all, and it didn't bite me…\"\r\nZankou listened to Daffodill speak, smiling, while her thoughts strangled her heart.\r\nShe didn't understand what was so appealing about a rabbit—it was just a gray vermin with red eyes. Nor did she understand how a mere rabbit could make her sister look that… happy.\r\nBut for the next few months, whenever it was time to go to the backyard for punishment, Daffodill would sneak glances at that rabbit, and Zankou would watch her. Even while enduring such unimaginable pain, her sister's gaze would soften considerably, directed towards that one corner of the garden. Sometimes, Zankou considered that, perhaps, such a gentle look was not something Mother would allow to appear in her eyes.\r\nOne day, Daffodill found only the rabbit's corpse in that familiar corner. She remained silent for the rest of the day. Before night had even fallen, she locked herself in her room.\r\nZankou knocked for a long while before the door finally opened. Her sister's hollow gaze hung low over the floor, her soul flickering wildly. Zankou caught a trace of bitterness in her sister's expression, something she had never seen before.\r\nShe tentatively reached out and slowly drew her sister closer. She felt Daffodill hesitate for a moment, then, as if shedding all her burdens at once, leaned her face against her shoulder without resistance. When their warmth met, Zankou sighed. Deep down, she was relieved that the rabbit had died.\r\n\"She might, perhaps, suspect that I was the one who did it.\"\r\nOn many nights after her sister fled, Zankou often thought of that dead rabbit.\r\nBut Daffodill never brought the matter up again.\r\nZankou never felt regret. She knew that the end of their road could only end in one way: death. When either one of them reached their final moments, using their final breath as a farewell might not… be so bad.\r\n\"Sister, I really didn't kill that rabbit.\"" + }, + { + "name": "Deadly Gaze", + "desc": "Zankou and Daffodill were once Scarlet Letter's sharpest daggers. The sins that stained them were as dark as the hollowness in their heart.\r\nTrial after trial, mission after mission, they enacted Mother's bidding. Zankou didn't care for her life as a blade; rather, she only desired to watch Daffodill.\r\nAs an assassin, she knew of every obstacle Mother needed removed. But as a person, she knew only Daffodill\r\nDaffodill always stood before the mirror after finishing a mission, contemplating in silence as she bandaged her wounds. And every time, Zankou would quietly savor that weary, melancholic back—beautiful even when riddled with scars—and, as always, use her Esper Ability and a tender hug to dispel her sister's doubts.\r\nFinally, those doubts bore fruit.\r\nOn one mission, when it was time to bring the blade down on a target, Daffodill listened to the target's pleas for mercy—and stilled her hand. Zankou witnessed her hand trembling, yet also noticed the bloodthirstiness shrouded in those cries for mercy. At that moment, a treacherous idea took root in her mind.\r\nIn the blink of an eye, the cold gleam of a hidden weapon flashed toward her sister. Zankou deliberately stepped in front of the blade, taking the blow. In this moment, Zankou also struck back against the assailant, killing them.\r\nBlood poured from her wound—pain she would willingly endure. Breathing hard, Zankou gazed upwards. She saw Daffodill's trembling hand loosen around the knife, and heard hurried footsteps and an apology laden with fright.\r\n\"At last, you've become as weak as they are.\"\r\nZankou watched, enraptured by the violently wavering flame before her.\r\nShe had imagined it countless times: no longer restraining her Esper Ability, Zankou using her eyes to see through everything, then pulling her into an illusion meant only for the two of them. Twisting her likes and dislikes, manipulating her memories—until, before she could completely devolve into a sentimental, uninteresting commoner, she would become Zankou's plaything.\r\nHowever, in those final moments, Zankou had relented.\r\nEven softened and shaken, that white flame still fascinated her. She no longer desired to snuff it out." + }, + { + "name": "A New Hue", + "desc": "Zankou could recall when her sister changed, and how trusting, careless, and foolish she had been before.\r\nIt was at one of Inanna's auction events. Daffodill, who was in charge of security, had acted out of turn and returned after a brief disappearance looking a bit haggard. She covered her left eye and brushed the whole incident off, referring to it as an \"accident.\" Seeing her sister's face wounded to such an extent caused Zankou to fly into a rage, so much so that in the next few missions, her methods were far more brutal than usual. For months after, Daffodill wore an eye patch. To comfort her sister, Zankou even had one made for herself—completely useless, of course—and when she took it out to show off, her sister could only respond with a startled laugh.\r\nZankou never once wondered what exactly that eye patch of Daffodill's was hiding.\r\nOn one rainy night, she witnessed Inanna lying in a pool of blood, and Daffodill—the Esper who had taken off her eye patch and was holding a blade. Mother's blood had stained her sister's collar a glaring crimson. And that flame… that pure white flame was entirely extinguished. It had become something utterly unlike anything before, unlike anyone else—a color of sublime purity Zankou had never perceived in her life.\r\nZankou attempted to make sense of the chaos before her. Too many questions crashed together in her mind. She didn't understand why her sister had betrayed them, didn't understand where her sister's Esper Ability had come from, and didn't understand what that odd flame even meant. As for Daffodill… she merely stood there, unmoving, like a child frozen in fear, strangled by shame.\r\nHer sister fled in silence, that streak of light vanishing beyond the hedges of the Scarlet Letter Garden.\r\nZankou struggled to call out for her, their mother still lying off to the wayside, forgotten in a pool of blood. All Zankou's thoughts—and her gaze—incessantly followed her sister's departing figure. An unknown amount of time had passed before she finally uttered a few words, those same words she had said to her sister countless times before:\r\n\"What a beautiful color…\"" + }, + { + "name": "Fated Reunion", + "desc": "Mother survived Daffodill's attempt on her life. She woke, recovered from her injuries, and maintained her usual image as if nothing had occurred. Zankou was unsurprised. Daffodill had mastered the art of assassination, but someone like Mother was not to be trifled with. She still performed her role as that poised, luxurious philanthropist—as if entirely unphased by Daffodill's betrayal.\r\nZankou could see the subtle change, however.\r\nIn the past, Mother's emotions had always been stable and cold, even going so far as to be utterly arrogant. Following the assassination attempt, though, she became distrustful, constantly carrying the unease often found in those in positions of power…\r\nThe scarlet tower in her memory had already collapsed, but Zankou no longer cared about such frivolous things.\r\nRight now, her only desire was to drag that woman who had slipped through her fingers back by the neck…\r\nMother brought another \"Little Sister\" back home, eventually. She had begun to favor the children whose vulnerability made her feel powerful in turn—and the girl named Poinsette was one of them. At first, Zankou only considered her another flower among the field. Unexpectedly, though, she discovered an interesting side to the newly introduced bud. Precocious and gifted, that little bud wouldn't let Mother's favoritism or torment transform her into a wilting flower. Instead, she became a resilient weed, seeking any way of escape from Scarlet Letter's garden. Seeing through her act, Zankou became even more curious and took the initiative to entice Mother into promoting Poinsette, so that she would serve at Inanna's side from then on. That little bud, now a weed, noticed Zankou's intentions, and could only obediently play along…\r\nThough the song and dance between the two amused Zankou for a while, it couldn't fill the void left by Daffodill's absence. Zankou never encountered anyone whose soul could compare to hers, and thus her longing grew day by day…\r\nAt last, after a long and thorough investigation, she caught wind of Daffodil's trail—a rundown antique shop in Hethereau, a shanty utterly unfit for her.\r\nFortunately, Inanna's next target was also in Hethereau, so Zankou gladly undertook the mission and went to investigate. Daily, she disguised herself as various passersby, passing by Eibon's door countless times, until she had finally come upon the face she had waited so long to see.\r\nSuppressing a smile, she slipped into a dark alley, pressed a hand to her chest, and felt her heartbeat pounding wildly like a drum.\r\n\"This time, you'll never escape from me again, Sister.\"" + } + ], + "melee": [ + { + "id": "GA_Zankou_Melee", + "name": "Wildfire", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Wildfire</>", + "<Title>Basic Attack: Nightmare Waltz</>", + "<Title>Basic Attack: Flickering Shadow</>", + "<Title>Basic Attack: Moonfall</>", + "<Title>Basic Attack: Broken Twigs</>", + "<Title>Critical Riposte: Voidstep</>" + ], + "desc": [ + "Wields her blade and performs up to <NumGreen>5</> consecutive attacks while in Reality Form, dealing <Zhou>Incantation DMG</>. Pulls in targets within range on the 5th instance of Basic Attack. Gains the <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouShou\">Hunt</> buff for the attack's duration.", + "Wields her blade to pull the silk and performs up to <NumGreen>4</> consecutive attacks while in Illusion Form, dealing <Zhou>Incantation DMG</> and inflicting <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on hit. Pulls in targets within range on the 3rd instance of Basic Attack. Each Nightmare Waltz attack spreads up to <NumGreen>4</> DoT effects from the target to all enemies in the area, including the original target. Gains the <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouHuo\">Delusion</> buff for the attack's duration. The DMG dealt by Nightmare Waltz counts as Follow-up Attack DMG.", + "Hold Basic Attack during the <NumGreen>1st</> or <NumGreen>2nd</> stage of Wildfire while in Reality Form to trigger Flickering Shadow, dealing <Zhou>Incantation DMG</>.", + "Hold Basic Attack during the <NumGreen>1st</> or <NumGreen>2nd</> stage of Nightmare Waltz while in Illusion Form to trigger Moonfall, dealing <Zhou>Incantation DMG</>. Inflicts <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on hit. The DMG dealt by Moonfall counts as Follow-up Attack DMG.", + "Press Basic Attack while airborne to plunge, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</> in an area upon impact. Increases DMG based on fall height by up to 100%.", + "Press Basic Attack after a Critical Dodge to deal <Zhou>Incantation DMG</> and reduce Break." + ], + "desc_short": [ + "Performs up to <NumGreen>5</> consecutive attacks while in Reality Form, dealing <Zhou>Incantation DMG</> and pulling in targets within range on the 5th attack. Gains the <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouShou\">Hunt</> buff.", + "Performs up to <NumGreen>4</> consecutive attacks while in Illusion Form, dealing <Zhou>Incantation DMG</>. Pulls in targets within range on the 3rd instance of Basic Attack. Inflicts <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on hit. Each attack spreads the target's DoT effects to all enemies in the area, including the original target. Gains the <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouHuo\">Delusion</> buff. The DMG dealt by Nightmare Waltz counts as Follow-up Attack DMG.", + "Hold Basic Attack during the <NumGreen>1st</> or <NumGreen>2nd</> stage of a Basic Attack while in Reality Form to deal <Zhou>Incantation DMG</>.", + "Hold Basic Attack during the <NumGreen>1st</> or <NumGreen>2nd</> stage of a Basic Attack while in Illusion Form to deal <Zhou>Incantation DMG</>. Inflicts <NumGreen>1</> stack of <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on hit. The DMG dealt by Moonfall counts as Follow-up Attack DMG.", + "Press Basic Attack while airborne, dealing <Zhou>Incantation DMG</>.", + "Deals <Zhou>Incantation DMG</>." + ], + "context": "<Italic>The nightmare drifts in, and despair burns from within.</>", + "icon": "/Game/UI/UI_Icon/Skill/Zankou_Melee", + "additional_desc": [ + { + "name": "Hunt", + "desc": "A Reality Form enhancement that increases the DMG dealt by Zankou." + }, + { + "name": "Heartwrench", + "desc": "Deals 1 instance of <Zhou>Incantation DMG</> to the target per second for 30s, up to 10 stacks." + }, + { + "name": "Delusion", + "desc": "An Illusion Form enhancement that increases the Crit DMG of DoTs dealt by the team." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Zankou_Melee1_Damage", + "name": "Wildfire 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 15, + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39 + ], + [ + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 54, + 59, + 63, + 69 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Melee2_Damage", + "name": "Wildfire 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 35, + 38, + 41, + 44, + 47, + 51, + 55, + 60, + 65, + 70, + 76, + 82, + 88 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Melee3_Damage", + "name": "Wildfire 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}%", + "values": [ + [ + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 99, + 107, + 115, + 124, + 134, + 145 + ], + [ + 18, + 19, + 21, + 23, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 46 + ], + [ + 35, + 38, + 41, + 44, + 48, + 51, + 56, + 60, + 65, + 70, + 76, + 82, + 88 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Melee4_Damage", + "name": "Wildfire 4th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}% + {3}% + {4}%", + "values": [ + [ + 68, + 73, + 79, + 85, + 92, + 100, + 108, + 116, + 126, + 136, + 147, + 159, + 171 + ], + [ + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62 + ], + [ + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57 + ], + [ + 52, + 56, + 60, + 65, + 71, + 76, + 82, + 89, + 96, + 104, + 112, + 121, + 131 + ], + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 25 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Melee5_Damage", + "name": "Wildfire 5th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *2 + {1}% *2 + {2}% + {3}%", + "values": [ + [ + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91 + ], + [ + 12, + 13, + 14, + 15, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 31 + ], + [ + 96, + 104, + 112, + 121, + 131, + 141, + 153, + 165, + 178, + 192, + 208, + 225, + 243 + ], + [ + 63, + 68, + 73, + 79, + 86, + 93, + 100, + 108, + 117, + 126, + 136, + 147, + 159 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Branch1_Damage", + "name": "Flickering Shadow DMG Ratio", + "icon": "", + "value_name": "{0}% *3 + {1}%", + "values": [ + [ + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39 + ], + [ + 171, + 185, + 199, + 215, + 233, + 251, + 271, + 293, + 317, + 342, + 369, + 399, + 431 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_AirAttack_Damage", + "name": "Plunge Attack DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106, + 114, + 123, + 133, + 144 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_PerfectEvadeAttack_Damage", + "name": "Voidstep DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 175, + 189, + 204, + 220, + 238, + 257, + 277, + 299, + 323, + 349, + 377, + 408, + 440 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_MagicMelee1_Damage", + "name": "Nightmare Waltz 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 18, + 19, + 21, + 23, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 46 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_MagicMelee2_Damage", + "name": "Nightmare Waltz 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}%", + "values": [ + [ + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 60, + 65 + ], + [ + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59 + ], + [ + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 108, + 116, + 126 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_MagicMelee3_Damage", + "name": "Nightmare Waltz 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *2 + {1}% *2", + "values": [ + [ + 36, + 39, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 86, + 92 + ], + [ + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_MagicMelee4_Damage", + "name": "Nightmare Waltz 4th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *2 + {1}%", + "values": [ + [ + 73, + 79, + 85, + 92, + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185 + ], + [ + 135, + 145, + 157, + 170, + 183, + 198, + 214, + 231, + 249, + 269, + 291, + 314, + 340 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_MagicBranch1_Damage", + "name": "Moonfall DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}% + {3}% *2", + "values": [ + [ + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56 + ], + [ + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 60, + 65, + 70, + 76 + ], + [ + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77 + ], + [ + 65, + 70, + 75, + 82, + 88, + 95, + 103, + 111, + 120, + 130, + 140, + 151, + 163 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_DotDamage", + "name": "Heartwrench Single DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "Heartwrench DMG Trigger Interval", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "Heartwrench Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Heartwrench Stack Limit", + "icon": "", + "value_name": "{0} stacks", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "name": "DMG bonus granted by Hunt", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + ] + }, + { + "name": "Crit DMG bonus for DoTs granted by Delusion", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + ] + }, + { + "name": "Reality Form: Basic Attack Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 35, + 35, + 35, + 35, + 35, + 35, + 35, + 35, + 35, + 35, + 35, + 35, + 35 + ] + ] + }, + { + "name": "Illusion Form: Basic Attack Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Zankou_Skill", + "name": "Sanguine Dash", + "type_name": "Redirect Skill", + "desc_name": [ + "<Title>Redirect Skill: Sanguine Dash</>", + "<Title>Redirect Skill: Soulcross</>" + ], + "desc": [ + "Switches to Illusion Form after successfully casting Sanguine Dash while in Reality Form. Enables an enhanced Sanguine Dash for a set time after the <NumGreen>4th</> or <NumGreen>5th</> stage of Wildfire, Flickering Shadow, or Voidstep. Inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on targets hit and triggers <TextHLT>Disarray</>, reducing massive Break of enemies in a large area. Delays the removal of the Reality Form <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouShou\">Hunt</> effect when switching to Illusion Form with Sanguine Dash. Prevents the form switch if the skill is interrupted before it is complete.", + "Switches to Reality Form after successfully casting Soulcross while in Illusion Form. Enables an enhanced Soulcross shortly before Illusion Form ends. Deals massive DMG to enemies in a large area, inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on targets hit, and triggers <TextHLT>Oblivion</>, activating Bloodfeast Reverie.\r\nGrants Illusion Form for a set duration. Ends Illusion Form and returns Zankou to Reality Form when Soulcross or Bloodfeast Reverie is successfully cast, when its duration expires, or when Zankou leaves the field. Delays the removal of the Illusion Form <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouHuo\">Delusion</> effect when switching to Reality Form with Soulcross. Counts all DMG dealt by Soulcross and its enhanced version as Follow-up Attack DMG. Prevents the form switch if the skill is interrupted before it is complete." + ], + "desc_short": [ + "Switches to Illusion Form after successfully casting Redirect Skill while in Reality Form. Delays the removal of <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouShou\">Hunt</>. Inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on targets hit and triggers <TextHLT>Disarray</> when casting an enhanced Redirect Skill after certain attacks while in Reality Form, reducing massive Break of enemies in a large area. Prevents the form switch if the skill is interrupted before it is complete.", + "Switches to Reality Form after successfully casting Redirect Skill while in Illusion Form. Delays the removal of <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouHuo\">Delusion</>. Inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouDot\">Heartwrench</> on targets hit and triggers <TextHLT>Oblivion</> when casting an enhanced Redirect Skill shortly before Illusion Form ends, dealing massive DMG to enemies in a large area, activating Bloodfeast Reverie. Grants Illusion Form for a set duration. Returns Zankou to Reality Form when Redirect Skill or Bloodfeast Reverie is successfully cast, when its duration expires, or when Zankou leaves the field. Counts all DMG dealt by the Illusion Form Redirect Skill and its enhanced version as Follow-up Attack DMG. Prevents the form switch if the skill is interrupted before it is complete." + ], + "context": "<Italic>No need to wake up yet. The nightmare is only beginning.</>", + "icon": "/Game/UI/UI_Icon/Skill/Zankou_Skill1", + "additional_desc": [ + { + "name": "Heartwrench", + "desc": "Deals 1 instance of <Zhou>Incantation DMG</> to the target per second for 30s, up to 10 stacks." + }, + { + "name": "Hunt", + "desc": "A Reality Form enhancement that increases the DMG dealt by Zankou." + }, + { + "name": "Delusion", + "desc": "An Illusion Form enhancement that increases the Crit DMG of DoTs dealt by the team." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Zankou_Skill2_Damage", + "name": "Sanguine Dash DMG Ratio", + "icon": "", + "value_name": "{0}% *4 + {1}%", + "values": [ + [ + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56 + ], + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 119, + 129, + 139, + 151 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Skill1_Damage", + "name": "Enhanced Sanguine Dash DMG Ratio", + "icon": "", + "value_name": "{0}% *4 + {1}%", + "values": [ + [ + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61, + 66 + ], + [ + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 120, + 129, + 139, + 151, + 163, + 176 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Skill4_Damage", + "name": "Soulcross DMG Ratio", + "icon": "", + "value_name": "{0}% *2 + {1}% *4 + {2}%", + "values": [ + [ + 13, + 14, + 15, + 16, + 18, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 33 + ], + [ + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67 + ], + [ + 166, + 179, + 194, + 209, + 226, + 244, + 264, + 285, + 308, + 332, + 359, + 388, + 419 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_Skill3_Damage", + "name": "Enhanced Soulcross DMG Ratio", + "icon": "", + "value_name": "{0}% *2 + {1}% *4 + {2}%", + "values": [ + [ + 19, + 21, + 23, + 24, + 26, + 29, + 31, + 33, + 36, + 39, + 42, + 46, + 49 + ], + [ + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 101 + ], + [ + 249, + 269, + 291, + 314, + 339, + 367, + 396, + 428, + 462, + 499, + 539, + 582, + 629 + ] + ] + }, + { + "id_stats": "GA_Zankou_Skill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "name": "Illusion Form Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + }, + { + "name": "Delays the removal of Hunt", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + }, + { + "name": "Delays the removal of Delusion", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + }, + { + "name": "Enhanced Soulcross Trigger Window", + "icon": "", + "value_name": "{0}s before Illusion Form ends", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "Enhanced Sanguine Dash inflicts Heartwrench", + "icon": "", + "value_name": "{0} stacks", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "name": "Enhanced Soulcross inflicts Heartwrench", + "icon": "", + "value_name": "{0} stacks", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "name": "Enhanced Sanguine Dash Break", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + }, + { + "name": "Reality Form: Redirect Skill Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + }, + { + "name": "Illusion Form: Redirect Skill Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Zankou_UltraSkill", + "name": "Inferno Flamenco", + "type_name": "Ultimate", + "desc": "Press to cast the Ultimate when Ultimate Energy is full. Has <NumGreen>2</> Ultimates: Inferno Flamenco and Bloodfeast Reverie.\r\nCasts Inferno Flamenco if Bloodfeast Reverie is inactive.\r\nPrioritizes Bloodfeast Reverie if it is active. Counts DMG dealt by Bloodfeast Reverie as Follow-up Attack DMG and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouUltraDot\">Vile Ash</> on enemies in a large area. Enables one enhanced Inferno Flamenco to be cast without consuming Ultimate Energy within a limited time after successfully casting Bloodfeast Reverie. Removes this cast opportunity when the time limit expires.", + "desc_short": "Press to cast the Ultimate when Ultimate Energy is full. Has <NumGreen>2</> Ultimates: Inferno Flamenco and Bloodfeast Reverie.\r\nCasts Inferno Flamenco if Bloodfeast Reverie is inactive.\r\nPrioritizes Bloodfeast Reverie if it is active. Counts DMG dealt by Bloodfeast Reverie as Follow-up Attack DMG and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouUltraDot\">Vile Ash</> on enemies in a large area. Enables one enhanced Inferno Flamenco to be cast without consuming Ultimate Energy within a limited time after successfully casting Bloodfeast Reverie. Removes this cast opportunity when the time limit expires.", + "context": "<Italic>The soul's flame dies within the dream, slipping into a sleep with no need to wake.</>", + "icon": "/Game/UI/UI_Icon/Skill/Zankou_Ultra", + "additional_desc": [ + { + "name": "Vile Ash", + "desc": "Deals 1 instance of <Zhou>Incantation DMG</> to the target per second for 30s, up to 10 stacks." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Zankou_UltraSkill1_Damage", + "name": "Inferno Flamenco DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 125, + 135, + 145, + 157, + 170, + 183, + 198, + 214, + 231, + 250, + 270, + 291, + 315 + ], + [ + 294, + 318, + 344, + 371, + 401, + 433, + 468, + 505, + 545, + 589, + 636, + 687, + 742 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_ForceUltraSkill1_Damage", + "name": "Enhanced Inferno Flamenco DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 163, + 176, + 191, + 206, + 222, + 240, + 259, + 280, + 303, + 327, + 353, + 381, + 412 + ], + [ + 386, + 417, + 450, + 486, + 525, + 567, + 612, + 661, + 714, + 772, + 833, + 900, + 972 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_MagicUltraSkill1_Damage", + "name": "Bloodfeast Reverie DMG Ratio", + "icon": "", + "value_name": "{0}% *3 + {1}%", + "values": [ + [ + 60, + 65, + 70, + 76, + 82, + 88, + 95, + 103, + 111, + 120, + 130, + 140, + 151 + ], + [ + 519, + 560, + 605, + 653, + 706, + 762, + 823, + 889, + 960, + 1037, + 1120, + 1210, + 1306 + ] + ] + }, + { + "id_stats": "GA_Zankou_UltraSkill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Zankou_UltraSkill", + "name": "Costs Ultimate Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + }, + { + "name": "Enhanced Inferno Flamenco Follow-up Attack Window", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "name": "Bloodfeast Reverie inflicts Vile Ash stacks", + "icon": "", + "value_name": "{0} stacks", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "id_stats": "GE_Player_Zankou_DotDamage", + "name": "Vile Ash Single DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "Vile Ash DMG Trigger Interval", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "Vile Ash Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Vile Ash Stack Limit", + "icon": "", + "value_name": "{0} stacks", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Zankou_QTE", + "name": "Stoked Flame", + "type_name": "Support Skill", + "desc": "Wields her blade to attack, dealing <NumGreen>1</> instance of <Zhou>Incantation DMG</>.", + "desc_short": "Deals <Zhou>Incantation DMG</>.", + "context": "<Italic>Fear is the finest fuel.</>", + "icon": "/Game/UI/UI_Icon/Skill/Zankou_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Zankou_QTE_Damage", + "name": "Stoked Flame DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv1", + "OrdinaryMonMaterial_03_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "OrdinaryMonMaterial_03_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "OrdinaryMonMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Zankou_Passive1", + "name": "Silent Sunset", + "type_name": "Passive Skill", + "desc": "<TextHLT>Scorch Enhancement</>: Scorch can be stacked up to <NumGreen>3</> times. For <NumGreen>each</> DoT effect allies inflict on a target afflicted with Scorch, Zankou inflicts <NumGreen>1</> stack of Scorch on them, replacing the DMG, type, and duration of existing Scorch on the target with those of the newly inflicted effect. Scorch inflicted by this effect cannot trigger it again.", + "desc_short": "<TextHLT>Scorch Enhancement</>: Scorch can be stacked up to <NumGreen>3</> times. For <NumGreen>each</> DoT effect allies inflict on a target afflicted with Scorch, Zankou inflicts <NumGreen>1</> stack of Scorch on them, replacing the DMG, type, and duration of existing Scorch on the target with those of the newly inflicted effect. Scorch inflicted by this effect cannot trigger it again.", + "context": "<Italic>Countless flames merge into a silent sun, burning every gaze into the same hue.</>", + "icon": "/Game/UI/UI_Icon/Skill/Zankou_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Zankou_Passive2", + "name": "Crimson Reverie", + "type_name": "Passive Skill", + "desc": "Sets Zankou's Cycle Energy to <NumGreen>100</> upon entering battle. Cooldown: <NumGreen>30</>s. Triggers only <NumGreen>once</> per battle. Increases Zankou's Cycle Intensity by <NumGreen>100</> while she is on the team.", + "desc_short": "Sets Zankou's Cycle Energy to <NumGreen>100</> upon entering battle. Cooldown: <NumGreen>30</>s. Triggers only <NumGreen>once</> per battle. Increases Zankou's Cycle Intensity by <NumGreen>100</> while she is on the team.", + "context": "<Italic>Lose yourself in the intoxicating crimson of her gaze, and never wake again.</>", + "icon": "/Game/UI/UI_Icon/Skill/Zankou_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_03_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Zankou_InvisibleSkill", + "name": "Lost Focus", + "type_name": "Character Traits", + "desc": "\"Beyond sight. Beyond reach.\"\r\nEnters Invisible state for <NumGreen>20</>s upon using the special skill Lost Focus while out of combat. Increases Movement Speed by <NumGreen>50%</> while in Invisible state and prevents enemies from detecting Zankou.", + "desc_short": "\"Beyond sight. Beyond reach.\"\r\nEnters Invisible state for <NumGreen>20</>s upon using the special skill Lost Focus while out of combat. Increases Movement Speed by <NumGreen>50%</> while in Invisible state and prevents enemies from detecting Zankou.", + "context": "<Italic>It began with a fleeting glance. Then the world slowly blurred away.</>", + "icon": "/Game/UI/UI_Icon/Skill/Zankou_Pas3", + "additional_desc": [], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_Zankou_01", + "name": "Competitive Edge", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_zqhs", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases all Volley Star characters' Serve by <Green2>10</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Increases Tycoon Incentive Fund earnings from Volley Star Weekly Matches by <Green2>10%</>. (Up to the Tycoon Incentive Fund limit.)" + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Increases all Volley Star characters' Spike by <Green2>10</>." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Increases Tycoon Incentive Fund earnings from Volley Star Weekly Matches by <Green2>10%</>. (Up to the Tycoon Incentive Fund limit.)" + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Increases all Volley Star characters' Receive by <Green2>10</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + }, + { + "id": "City_Ability_Zankou_02", + "name": "All In", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_qlyf", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Costs <Green2>1</> additional City Stamina per Fight Club match to claim the corresponding rewards." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Costs <Green2>1</> additional City Stamina per Fight Club match to claim the corresponding rewards." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Eyes of Abyss", + "desc": "Allows Wildfire, Flickering Shadow, Voidstep, enhanced Sanguine Dash, and enhanced Soulcross to spread DoT effects upon Awakening. Grants Zankou <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouShou\">Hunt</> and <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouHuo\">Delusion</> at all times. Keeps both buffs active without delayed removal and prevents them from being removed when Zankou leaves the field or switches forms. Removes them only when Zankou is defeated.\r\nThe DMG bonus granted to Zankou by <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouShou\">Hunt</> increases to <NumGreen>40%</>. The DoT Crit DMG bonus granted to the whole team by <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouHuo\">Delusion</> increases to <NumGreen>50%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1036_1", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Hunt", + "desc": "A Reality Form enhancement that increases the DMG dealt by Zankou." + }, + { + "name": "Delusion", + "desc": "An Illusion Form enhancement that increases the Crit DMG of DoTs dealt by the team." + } + ] + }, + { + "name": "Abyssal Kiss", + "desc": "Builds up <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouStack\">Kindling</> whenever Zankou participates in a Cycle that triggers Scorch or Hexed, increasing the Final DMG dealt by the next Inferno Flamenco by <NumGreen>150%</>. Allows <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouStack\">Kindling</> to accumulate even before Inferno Flamenco becomes available, up to 1 stack.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1036_2", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Kindling", + "desc": "Grants Kindling whenever Zankou participates in a Scorch or Hexed Cycle, such as by switching from Zankou to another character and casting their Support Skill, or by switching to Zankou and casting Stoked Flame.\r\nConsumes all accumulated Kindling when casting Inferno Flamenco directly or its time-limited enhanced version after Bloodfeast Reverie. If the enhanced Inferno Flamenco is not cast within the time limit, or if Zankou leaves combat or is defeated, all Kindling is lost." + } + ] + }, + { + "name": "Kiss in a Nightmare", + "desc": "<hot textstyle=\"TextEXPL\" param=\"nouns&ZankouShou\">Hunt</> increases Zankou's Resistance to Interruptions by an additional <NumGreen>50%</>. <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouHuo\">Delusion</> restores HP equal to <NumGreen>4%</> of her Max HP per second.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1036_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Hunt", + "desc": "A Reality Form enhancement that increases the DMG dealt by Zankou." + }, + { + "name": "Delusion", + "desc": "An Illusion Form enhancement that increases the Crit DMG of DoTs dealt by the team." + } + ] + }, + { + "name": "Nightmare Bloom", + "desc": "Activates Bloodfeast Reverie immediately when Inferno Flamenco becomes available.\r\nApplies the DMG Bonus from <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouStack\">Kindling</> to Bloodfeast Reverie, which shares the same <hot textstyle=\"TextEXPL\" param=\"nouns&ZankouStack\">Kindling</> stacks with Inferno Flamenco.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1036_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Kindling", + "desc": "Grants Kindling whenever Zankou participates in a Scorch or Hexed Cycle, such as by switching from Zankou to another character and casting their Support Skill, or by switching to Zankou and casting Stoked Flame.\r\nConsumes all accumulated Kindling when casting Inferno Flamenco directly or its time-limited enhanced version after Bloodfeast Reverie. If the enhanced Inferno Flamenco is not cast within the time limit, or if Zankou leaves combat or is defeated, all Kindling is lost." + } + ] + }, + { + "name": "Bloom in Blood", + "desc": "Guarantees that the first Breakable target hit by enhanced Sanguine Dash enters the Broken state. Triggers only <NumGreen>once</> per target per battle and does not affect bosses in Character Balance Mode.\r\nIncreases all allies' Break DMG by <NumGreen>300%</> while Zankou is on the team.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1036_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Blood Stained Eyes", + "desc": "Increases the DMG dealt by the <NumGreen>final</> hit of <TextHLT>Oblivion</> to a single target by <NumGreen>12%</> for each DoT stack on that target, up to <NumGreen>240%</>. Calculates the DMG Bonus separately for each target when multiple targets are hit, based on the total number of DoT stacks on each target.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1036_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Scarlet Feast", + "desc": "Increases the skill levels of Wildfire, Nightmare Waltz, Sanguine Dash, Soulcross, Inferno Flamenco, and Bloodfeast Reverie by <NumGreen>1</>. Increases the DMG Ratios of Bloodfeast Reverie and Inferno Flamenco by <NumGreen>20%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Venom Flame", + "desc": "Increases Zankou's ATK by <NumGreen>40%</> for <NumGreen>20</>s after she deals damage. This effect does not stack. Resets the duration when triggered again.\r\nGrants an enhanced effect for <NumGreen>60</>s when a target afflicted with Scorch is defeated. Maxes out the target's Scorch stacks whenever Zankou inflicts DoTs on them during the enhancement. Refreshes the enhancement's duration whenever another target afflicted with Scorch is defeated.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1036/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + -1, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "value": 16 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_034", + "amount": 100 + }, + { + "item_id": "Food_060", + "amount": 100 + }, + { + "item_id": "Food_094", + "amount": 100 + }, + { + "item_id": "Flower0001", + "amount": 200 + }, + { + "item_id": "Flower0007", + "amount": 200 + }, + { + "item_id": "Flower0008", + "amount": 200 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "Furniture_Ornament_026", + "amount": 400 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "SpecialGift_1036", + "amount": 1200 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1036" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1036" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Friendship_3_1036", + "Gold" + ], + "amount": [ + 20, + 1, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1036" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1036", + "Friendship_4_1036" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1036" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1036", + "Fashion_character_1036_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "I'm a skeleton in your closet, an illusion in your reflections, a nightmare in your dreams… Embrace me, and sink.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_meet_001" + }, + { + "name": "Chat: Lone Stride", + "desc": "At this point, I don't care where I am anymore…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_chat_001" + }, + { + "name": "Chat: Infamy", + "desc": "When you run into big shots, try telling them about the \"Red Nightshade.\" You might see some faces twitch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_chat_002" + }, + { + "name": "Chat: Sightings", + "desc": "I've seen my fair share of dignified, well-mannered people at Mother's auctions. I glimpsed into their hidden desires. They covet wealth, long for immortality, hunger for power, or want to witness a miracle… Those are all but hollow delusions and tired clichés. But when they finally run out of road, with the dead end of having them by the throat, that raw despair… now that, that has some flavor to it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_chat_003" + }, + { + "name": "Sunny", + "desc": "Flowers will grow well in this weather.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_weather_001" + }, + { + "name": "Rainy", + "desc": "No rain can ever wash away old blood stains from years ago.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_weather_002" + }, + { + "name": "Cold", + "desc": "Here. Gaze into my eyes. You won't feel cold anymore…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_weather_003" + }, + { + "name": "Hot", + "desc": "Such heat…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning, Appraiser… What? Still getting used to this?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "How cozy… Take a nap if you want to. I won't bother you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "It's getting late… You're having a good time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_greet_003" + }, + { + "name": "Good Night", + "desc": "People only reveal their true selves late at night… Appraiser, want to have a heartfelt conversation?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_greet_004" + }, + { + "name": "Hobbies", + "desc": "Sure. Let me indulge your curiosity. My hobbies are… tea, wine, and floristry. I dabble. But if I had to pick a favorite, it would be hunting. I love toying with my prey, watching them struggle in their illusions, running and hiding in corners they deem safe, until they realize they have nowhere to go and lose their last shred of will to survive… Care to give it a try? Hunt with me… or perhaps, be my prey?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_hobby_001" + }, + { + "name": "Worries", + "desc": "…Those are things of the past. They don't matter anymore.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_vexation_001" + }, + { + "name": "Topic: Family", + "desc": "When Mother was in a bad mood, she loved to use \"training\" as an excuse to punish us physically. After she punished us, she'd start crying those fake tears while saying things like \"Mother forgives you.\" That was her way of raising us. But for the four of us… Daffodill was made of iron. The whip could come down on her and she wouldn't even blink. I could see straight through Mother's intentions, so of course I wasn't affected. As for Poinsette… her fake tears were more convincing than Inanna's. Watching the two of them put on their mother-and-daughter act was one of my favorite ways to pass the time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_talk_001" + }, + { + "name": "Topic: An Old Story", + "desc": "The world isn't all sunshine and rainbows. In its dark corners, plenty make their living off the edge of a blade, preying on the weak and endlessly fighting each other for treasure, anomalies, or some Esper. As for Inanna… before arrogance clouded her judgment, she was shrewd, calculating, and ambitious. She accrued all the wealth of infamy for the Scarlet Letter. Daffodill and I were responsible for dealing with her rivals… who, of course, were mostly the same type of person she was.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_talk_002" + }, + { + "name": "Topic: Weapons", + "desc": "This blade is called Fatebinder. It's another one of Mother's collections. It creates those living, cloth-like drapes. Back then, I picked this blade because it caught my eye out of a pile of dull weapons. At that time, Daffodill loved maintaining weapons. The first time she saw mine, she thought the blade was stained with blood and offered to teach me how to polish and care for it… Shame, the blade was bloodred to begin with. No amount of scrubbing could ever change that.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "This eye is called \"The Eye of Delusion.\" It can detect emotions, confuse minds, and erode one's reason, making them impulsive, fragile, and fall in a whirlpool of feelings. With a little preparation, it can also create illusions and even trap people inside. As for the price… every time I use my Esper Ability, the eye grows restless, with a hunger to feed on negative emotions from others. Oh, and if you meet my gaze for too long, your mind might get worn down, until you end up a plaything I can command however I please… Alright, don't turn away. That's just a joke.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_self_001" + }, + { + "name": "About Myself: Color Vision", + "desc": "In my earliest memories, the world only ever had two colors: black and white. When my powers awoke, a third color filled the void. It hid beneath gray skins. It was sometimes blinding, sometimes murky, but always vivid, always warm… You're frowning again. Do you think I'll ever be able to see the color on that flawless face of yours, Appraiser…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_self_002" + }, + { + "name": "About Myself: Observation", + "desc": "Sometimes I disguise myself as someone else, then I walk through the crowds to observe this city… It's so accepting, so unfocused, that almost everyone who settles here convinces themselves they've found where they belong. Some even end up throwing away their own truth, forgetting it, just to protect that sense of belonging… Appraiser, are you one of them?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_self_003" + }, + { + "name": "About Daffodill", + "desc": "She has a pure soul, like a steady white flame that never burns out even in the midst of blood and violence. We were partners for years, and I never tasted a negative emotion from her. Then one day, standing over an enemy who was pleading, she hesitated. That night, the girl who never spoke about anything came to me for a talk. I thought she was growing weak, and while I was concerned for her change, another part of me wanted her to rely on me more… Then came the betrayal. I'll never forget the storm that day, the look on her face as she escaped, and the color burning in her soul… A color I'd never seen before.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_about_001" + }, + { + "name": "About Inanna", + "desc": "Inanna adopted many children, but she never cared for us. She simply sorted us into tools, collectibles, or bargaining chips depending on her needs. Me? I was a tool for removing obstacles, the one she trusted most at that… Her arrogance was laughable, but after all those years, she gave me a place to belong, and she let me have a real family… I still miss her, especially the way she looked before she gave up her last breath.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_about_002" + }, + { + "name": "About Hotori", + "desc": "I didn't expect a shabby, run-down antique shop to harbor such a big shot—the Witch of Time… Heh, no wonder the Scarlet Letter's top assassin became a softie. That witch can't be an ordinary person… But don't worry, I have no interest in your dear shopkeeper, and I'm not going to interrupt you playing house with my sister.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_about_003" + }, + { + "name": "About Poinsette", + "desc": "Pointy is interesting. She doesn't have any powers to read emotions, yet she could always play along with Mother's shifting moods. No wonder Mother kept her close at all times. She was afraid of me. Sometimes I would intentionally scare her, just to watch her put on that fawning smile while her little mind was panicking, scrambling to respond, like a tiny mouse running through a maze… According to Inanna's plan, she was supposed to die by your hand, but you ended up saving her. Knowing her, she must firmly believe that she owes you her life.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_about_004" + }, + { + "name": "About Zero", + "desc": "You have many secrets, and I can taste your scrumptious emotions. Yet, I can't see through your soul. It's like a smoldering fire, no visible flame, yet burning like nothing else… Even among Espers, you stand out as an exception. This also means you don't actually need to obey the Bureau's rules. They've never been able to accept things they can't control. One day, they'll fear you, guard against you, try to limit you… But I'll always be willing to loosen your bonds, and I'll always accept everything about you. Your true nature, your loves and hates, even the anger burning in you right now… all of it is sweet to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_about_005" + }, + { + "name": "About The Scarlet Letter", + "desc": "When I was in the Scarlet Letter, Inanna would select children with the best potential and put them through \"trials\" that were nothing but torture. Only a handful of kids survived. Of the few standouts, she would give them important tasks as well as flower names… Such as \"Daffodil\" and \"Red Nightshade.\" In Inanna's operations, those two code names once struck fear into the hearts of many. Oh, Poinsette had a flower name too, \"Poinsettia.\" But she didn't seem like the type who could survive the trials. I guess she pulled some clever tricks to get through.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_about_006" + }, + { + "name": "Character Ascension I", + "desc": "This surge of excitement… It's been a while.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "It hungers for more and cannot be satiated…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "You made a dangerous decision, and I'm all for it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Hmph… Appraiser, what are your intentions?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_gift_001" + }, + { + "name": "Gift Received II", + "desc": "I can't figure you out anymore… Still, thank you for the gift.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Instead of a gift, I'd rather you tell me a secret. That's what I really want.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "If you need me to solve a problem, just ask.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "In a heartbeat…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Time to dance.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Like dew, like lightning.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill_003" + }, + { + "name": "Redirect Skill IV", + "desc": "Wither.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill_SE_001" + }, + { + "name": "Redirect Skill V", + "desc": "Perish.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill_SE_002" + }, + { + "name": "Redirect Skill VI", + "desc": "Die!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill_SE_003" + }, + { + "name": "Redirect Skill VII", + "desc": "Seeing things?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill02_001" + }, + { + "name": "Redirect Skill VIII", + "desc": "Don't blink!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill02_002" + }, + { + "name": "Redirect Skill IX", + "desc": "You're distracted!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill02_003" + }, + { + "name": "Redirect Skill X", + "desc": "Smoke and mirrors.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill02_SE_001" + }, + { + "name": "Redirect Skill XI", + "desc": "Formless and shadowless.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill02_SE_002" + }, + { + "name": "Redirect Skill XII", + "desc": "Nothing but a pipe dream.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_skill02_SE_003" + }, + { + "name": "Ultimate I", + "desc": "Your fear is exposed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_UI_001" + }, + { + "name": "Ultimate II", + "desc": "I bestow upon you this blessing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Won't you dance with me?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_UI_003" + }, + { + "name": "Ultimate IV", + "desc": "Bloom for me! Wither for me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_SE_UI_001" + }, + { + "name": "Ultimate V", + "desc": "Turn them to ashes!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_SE_UI_002" + }, + { + "name": "Ultimate VI", + "desc": "Entertain me with your efforts!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_SE_UI_003" + }, + { + "name": "Ultimate VII", + "desc": "A nightmare drowned in eternity…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_HJ_UI_001" + }, + { + "name": "Ultimate VIII", + "desc": "The party has come. Dance with me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_HJ_UI_002" + }, + { + "name": "Ultimate IX", + "desc": "A bedazzling scarlet phantasm…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_ultraskill_HJ_UI_003" + }, + { + "name": "Containment I", + "desc": "Now what should we do?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_containment_001" + }, + { + "name": "Containment II", + "desc": "Containment complete. What's next?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_containment_002" + }, + { + "name": "Nullification I", + "desc": "I'm more used to humanoid targets.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Who's the next target?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Not bad.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Take this. I don't need it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "All yours.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Happy now? Or is that not enough?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Here's your stuff.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "All in good condition.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_windfall_006" + }, + { + "name": "Low Health I", + "desc": "This is not great.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_hp_001" + }, + { + "name": "Low Health II", + "desc": "Time to take it seriously.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_hp_002" + }, + { + "name": "Low Health III", + "desc": "Dancing on a blade…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_hp_003" + }, + { + "name": "Heal I", + "desc": "Nice one.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_fh_001" + }, + { + "name": "Heal II", + "desc": "Good work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_fh_002" + }, + { + "name": "Down I", + "desc": "I'll… never…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_dead_001" + }, + { + "name": "Down II", + "desc": "Mistakes were made…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_dead_002" + }, + { + "name": "Down III", + "desc": "I'll take my leave, sister…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_dead_003" + }, + { + "name": "Takedown I", + "desc": "(*Laughs*)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_kill_001" + }, + { + "name": "Takedown II", + "desc": "Another one bites the dust.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_kill_002" + }, + { + "name": "Damaged I", + "desc": "That's nothing…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_struck_001" + }, + { + "name": "Damaged II", + "desc": "That didn't hurt.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "How bothersome.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "…You wanna die?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Heh, you read my mind.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Who's the target?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "I've been waiting!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Weak.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Move it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_QTE_003" + }, + { + "name": "Glide I", + "desc": "Where are we going?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_Fly_001" + }, + { + "name": "Glide II", + "desc": "Drifting in the wind…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_Fly_002" + }, + { + "name": "Switch I", + "desc": "Boring opponent…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_Switch_001" + }, + { + "name": "Switch II", + "desc": "Leave. Let me handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_Switch_002" + }, + { + "name": "Switch III", + "desc": "I was almost worried.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_Switch_003" + }, + { + "name": "Special Switch - Zero", + "desc": "Got some trouble?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_SSC_ZERO_001" + }, + { + "name": "Special Switch - Daffodill", + "desc": "Just like old times, sister.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_SSC_DFDE_001" + }, + { + "name": "Special Switch - Hotori", + "desc": "Nice blade you got there.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_SSC_XUN_001" + }, + { + "name": "Teammate Down - Zero", + "desc": "You're better than this…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_TeammateDown_001" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "Sister, you have slacked in your training.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_TeammateDown_002" + }, + { + "name": "Teammate Down - Hotori", + "desc": "Even the Witch runs out of time?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_TeammateDown_003" + }, + { + "name": "Parry I", + "desc": "Returning a hundredfold!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_Parry_001" + }, + { + "name": "Parry II", + "desc": "I see you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Too slow!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "What a shame.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC022/Play_Vo_Char_NPC022_DodgeCombo_002" + } + ] + } + }, + { + "id": "1039", + "name": "Fadia", + "description": "A dangerous yet captivating ETD member who represents the director's unpredictable hiring standards.", + "element": [ + { + "element_id": "Psyche", + "name": "Psyche" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_027", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_027x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_027_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_fadiya", + "tags": { + "char_tags": [ + { + "name": "Survival", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag02" + }, + { + "name": "DMG Redirection", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_fentan" + } + ], + "arcs_tags": { + "type_id": "5", + "name": "Condensate", + "icon": "/Game/UI/UI/player/YH_UI_icon_boson" + } + }, + "reaction": [ + { + "name": "Nova", + "desc": "Inflicts Nova on the target for <NumGreen>5s</> after triggering Esper Cycle. When the effect ends, the target takes massive <bule>Mental Damage</>." + }, + { + "name": "Stain", + "desc": "Increases the target's <bule>Psyche and Lakshana DMG</> taken by <NumGreen>20%</> for <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1039_nighty", + "characterId": "1039", + "name": "Tales of the Night", + "desc": "Fadia's loungewear. Rather than prioritizing comfort, she prefers to use clothing to complement the night.\r\n\"The darkness will keep our secrets.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_027_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_027_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_027_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_fadiya_nighty", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_fadiya2", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1039_0", + "characterId": "1039", + "name": "Liquid Desire", + "desc": "An alluring, form-fitting outfit where desire blossoms from the chest. Best not to stare directly.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_027", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_027_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_fadiya", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_fadiya", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1410, + 1523, + 1636, + 1748, + 1861, + 1974, + 2087, + 2200, + 2312, + 2425, + 2538, + 2651, + 2764, + 2876, + 2989, + 3102, + 3215, + 3328, + 3440, + 3553, + 3666, + 3779, + 3892, + 4004, + 4117, + 4230, + 4343, + 4456, + 4568, + 4681, + 4794, + 4907, + 5020, + 5132, + 5245, + 5358, + 5471, + 5584, + 5696, + 5809, + 5922, + 6035, + 6148, + 6260, + 6373, + 6486, + 6599, + 6712, + 6824, + 6937, + 7050, + 7163, + 7276, + 7388, + 7501, + 7614, + 7727, + 7840, + 7952, + 8065, + 8178, + 8291, + 8404, + 8516, + 8629, + 8742, + 8855, + 8968, + 9080, + 9193, + 9306, + 9419, + 9532, + 9644, + 9757, + 9870, + 9983, + 10096, + 10208, + 10321 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 75, + 79, + 83, + 86, + 90, + 94, + 98, + 101, + 105, + 109, + 113, + 116, + 120, + 124, + 128, + 131, + 135, + 139, + 143, + 146, + 150, + 154, + 158, + 161, + 165, + 169, + 173, + 176, + 180, + 184, + 188, + 191, + 195, + 199, + 203, + 206, + 210, + 214, + 218, + 221, + 225, + 229, + 233, + 236, + 240, + 244, + 248, + 251, + 255, + 259, + 263, + 266, + 270, + 274, + 278, + 281, + 285, + 289, + 293, + 296, + 300, + 304, + 308, + 311, + 315, + 319, + 323, + 326, + 330, + 334, + 338, + 341, + 345, + 349, + 353, + 356, + 360, + 364, + 368, + 371 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "ETD-4, Member", + "description": "\"Do you think we'll get to see Miss Fadia today?\"\n\"Dream on. They wouldn't send ETD agents for a mere Class II Anomaly.\"\n\"F-Fadia… Miss Fadia…?!\"\n\"Quit obsessing and let's wrap up—Miss Fadia!\"\n…\n\"That day, Miss Fadia appeared before me like a savior.\"\nLove letters like these fly into the ETD-4 office like snowflakes, and the so-called \"savior\" herself finds them quite entertaining, often using them as reading material to pass the time at work.", + "birthday": "October 31", + "homePlace": "Bureau of Anomaly Control, ETD-4", + "abilityName": "Lilith", + "introduction": "A dangerous yet captivating ETD member who represents the director's unpredictable hiring standards.", + "voiceChinese": "裴致莹", + "voiceEnglish": "Amber Lee Connors", + "voiceJapanese": "真堂圭", + "voiceKorean": "조현정" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "One of the Bureau of Anomaly Control's ETD-4 members, and once a criminal.\nAs for what crime got her thrown onto the legendary Ghroth Island… nothing too serious. It was just an innocent little gesture that put some people to sleep forever.\n\"Endless rebirth and reincarnation all lead back to the black hole of nothingness.\"\nTwirling her hair around her finger, she smiled with sparkling eyes.\n\"I simply followed their wishes, sending those party people to the paradise they'd been craving their whole lives.\"\n\nAs a pardoned prisoner, she isn't treated any differently than any other Squad 4 member.\nExcept by that dog-faced guy with calm but wary eyes. Maybe because a few months ago they were escort officer and wanted criminal?\nWell, overall, she thinks her new job is pretty good. Fighting to her heart's content, letting danger excite her mind, letting pain make her body tremble… violence comes from life's excess. How could anyone not be addicted to tasting it?\nShe doesn't know why that strange woman brought her back from the island, but whatever. She had nowhere else to go anyway. The place where she once knelt and prayed devoutly, entrusting her faith, has long been sealed off. Anyone who sees that ruined wasteland would laugh! Only a pair of familiar silver eyes still gaze at her, merciful, generous, full of desire… she can feel it.\n\n\"Go raise some hell, Fadia. I'm sure you'll find something interesting.\"\nA pretender, a dog, and a brat?\nFadia narrowed her eyes.\nWell then… let's find that \"something interesting.\"" + }, + { + "name": "Lirnia", + "desc": "Fadia Lirnia was the only daughter of a political family, a precocious rich girl, a bird caged behind golden bars.\nFrom birth, the first thing she learned under everyone's watchful eyes was to hide her desires.\nUntil her parents, family, everything was destroyed in that unconscious rampage… She was no longer a Lirnia, and didn't need to be.\nSo… she gave herself a new name: Fadia DD. Desire and Death." + }, + { + "name": "Spiral Path", + "desc": "Endless rebirth and reincarnation all lead to the black hole of nothingness.\nLife follows a spiral path, perfectly balanced, circling inward ring by ring, until it finally reaches… the ancient gods' paradise?\nShh. Good child, don't think too hard about it." + }, + { + "name": "Pain Addiction", + "desc": "Fadia taught herself to manipulate pain as easily as dealing with those money and power-obsessed fools.\nShe scratches herself, then spreads the pain throughout her body, seeking some kind of balance… the force controlled just right. In this, she has found an addictive calm.\nMost people lack the ability to connect emotionally, throwing themselves into things that are easy to focus on and get addicted to. Alternating between extreme pain and pleasure… that's the secret that makes it impossible to stop.\nShe pities those people, just like she pities herself.\n\"Poor children, desire is the only thing they can rely on. Go ahead, vent, cry, succumb. Take what you desire, like babies craving their mother's milk.\"" + }, + { + "name": "Desire", + "desc": "Human survival is contradictory. For example: taboo and transgression, reproduction and death, murder and sacrifice, sacred and profane.\r\nIn this chaotic, vulgar materialist world, only lust accepts everything about people. It embraces all their selfless, ugly, stupid, joyful faces.\r\nTake her hand, embrace her.\r\nFeel what grateful devotion hides behind that meaningless proud facade…\r\nFeel how the endless, itching desire writhes within that devotion." + }, + { + "name": "Robin", + "desc": "A robin, silently staring into the distance.\nThe twelve-year-old girl, mesmerized by the orange-red feathers on the bird's chest, followed the fork in the path and straying off course for the first time.\nLater, she saw it again in her painful, hazy consciousness.\nStruggling, reaching forward with such painstaking effort…\nIf only she could touch but a single feather tip…\nA robin, silently staring into the distance." + } + ], + "melee": [ + { + "id": "GA_Fadia_Melee", + "name": "Wordless Rejection", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Wordless Rejection</>", + "<Title>All Eyes on Me</>", + "<Title>Falling Contempt</>", + "<Title>Critical Riposte: Evasion Trigger</>" + ], + "desc": [ + "Swings her cross shield and performs up to <NumGreen>5</> consecutive attacks, dealing <Hun>Psyche DMG</>.", + "When Fadia's current HP is greater than <NumGreen>1</>, she redirects a portion of damage taken by her teammates to herself before any shield mitigation is applied. Redirected damage cannot be further redistributed.\r\nOnce Fadia's current HP drops to <NumGreen>1</>, she ceases to redirect damage. At this point, if Fadia receives damage, she will share it with surviving teammates before any shield mitigation, and will absorb the remaining damage herself.", + "Swings her cross shield in the air and plunges, dealing <NumGreen>1</> instance of <Hun>Psyche DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when casting Wordless Rejection after a Critical Dodge. Charges toward the target at high speed and deals <NumGreen>1</> instance of <Hun>Psyche DMG</> to an area, reducing Break." + ], + "desc_short": [ + "Deals <Hun>Psyche DMG</>.", + "Shares damage with allies while Fadia's HP is above 1. Distributes incoming damage among surviving allies when Fadia's HP equals 1.", + "Deals <Hun>Psyche DMG</>.", + "Deals <Hun>Psyche DMG</>." + ], + "context": "<Italic>The most laughable thing about being alive is how you bow to self-evident meanings and submit to the power of orders. So why not laugh at you pitiful worms?</>", + "icon": "/Game/UI/UI_Icon/Skill/Fadia_Melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Fadia_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 101, + 109 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 55, + 59, + 64, + 69, + 74 + ], + [ + 36, + 38, + 42, + 45, + 49, + 52, + 57, + 61, + 66, + 72, + 77, + 83, + 90 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_Melee4_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 77, + 83, + 89, + 97, + 104, + 113, + 122, + 132, + 142, + 154, + 166, + 179, + 194 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_Melee5_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 28, + 30, + 33, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 61, + 66, + 71 + ], + [ + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_Melee7_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68 + ], + [ + 80, + 86, + 93, + 101, + 109, + 118, + 127, + 137, + 148, + 160, + 173, + 187, + 202 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 119, + 129, + 139, + 151 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37 + ] + ] + }, + { + "name": "Redirection DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 178, + 192, + 207, + 224, + 242, + 261, + 282, + 305, + 329, + 355, + 384, + 415, + 448 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Fadia_Skill", + "name": "Existence", + "type_name": "Redirect Skill", + "desc": "Come, have a taste of this. Deals <NumGreen>1</> instance of <Hun>Psyche DMG</> to an area and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaSkill\">Destructive Experience</> on the enemy with the highest Max HP in the area for a period.\r\nDuring the duration, when Fadia takes damage, the target shares a percentage of the damage taken.\r\n<hot textstyle=\"TextEXPL\" param=\"nouns&FadiaSkill\">Destructive Experience</> ends when the duration expires, when the Redirection DMG taken by the target reaches its cap, or when the target and Fadia leave combat.", + "desc_short": "Deals <Hun>Psyche DMG</> and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaSkill\">Destructive Experience</> on the enemy with the highest Max HP.", + "context": "<Italic>\"Oh hey—just a friendly tip from her teammate: attacking her right now might not be the smartest move…\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Fadia_Skill", + "additional_desc": [ + { + "name": "Destructive Experience", + "desc": "A special effect that Fadia attaches to the target. Causes the target to share a percentage of the damage Fadia takes during the duration." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Fadia_Skill3_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}% Max HP", + "values": [ + [ + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4 + ], + [ + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6 + ], + [ + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6 + ] + ] + }, + { + "name": "Destructive Experience Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Redirection DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "Redirection DMG Cap", + "icon": "", + "value_name": "{0}% Max HP", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + }, + { + "id_stats": "GA_Fadia_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Fadia_UltraSkill", + "name": "Agony to Euphoria", + "type_name": "Ultimate", + "desc": "Without pain, life closes in on itself. Enters <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaState\">Lilith</> state, dealing <NumGreen>6</> instances of Mental DMG and restoring HP. Recasts Wordless Rejection while in <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaState\">Lilith</> state to perform up to <NumGreen>5</> follow-up attacks, each dealing Mental DMG.\r\nFully restores the energy of Agony to Euphoria when lost HP reaches the <TextHLT>Destructive Threshold</>. Increases the damage and HP restored by Agony to Euphoria when it is cast with lost HP greater than or equal to the <TextHLT>Destructive Threshold</>.\r\nExits <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaState\">Lilith</> state when the duration ends, all 5 follow-up attacks are performed, characters are switched, or other skills of Fadia are used.", + "desc_short": "Enters <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaState\">Lilith</> state, dealing 6 instances of Mental DMG and restoring HP. Performs up to 5 follow-up attacks while in <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaState\">Lilith</> state, each dealing Mental DMG.\r\nFully restores the Ultimate's energy when lost HP reaches the <TextHLT>Destructive Threshold</>. Increases the damage and HP restored when casting the Ultimate with lost HP greater than or equal to the <TextHLT>Destructive Threshold</>.", + "context": "<Italic>\"Since the Director chose to exploit this instability, my duty is to observe and restrict it—to ensure such dangerous volatility stays within controllable bounds.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Fadia_UltraSkill", + "additional_desc": [ + { + "name": "Lilith", + "desc": "Changes her Attack form and unleashes 5 hits that deal Mental DMG." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Fadia_UltraSkill1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}% Max HP", + "values": [ + [ + 3, + 4, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 9, + 9 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_UltraSkill2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}% *4 Max HP", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_UltraSkill3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}% Max HP", + "values": [ + [ + 6, + 6, + 7, + 7, + 8, + 9, + 10, + 10, + 11, + 12, + 13, + 14, + 15 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_UltraSkillMelee1_Damage", + "name": "1st Follow Up Ratio", + "icon": "", + "value_name": "{0}% Max HP", + "values": [ + [ + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 4, + 4, + 4, + 5 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_UltraSkillMelee2_Damage", + "name": "2nd Follow Up Ratio", + "icon": "", + "value_name": "{0}%+{1}% Max HP", + "values": [ + [ + 3, + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 5, + 6, + 6, + 7, + 8 + ], + [ + 3, + 3, + 4, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 9 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_UltraSkillMelee4_Damage", + "name": "3rd Follow Up Ratio", + "icon": "", + "value_name": "{0}%*2+{1}% Max HP", + "values": [ + [ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2 + ], + [ + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_UltraSkillMelee6_Damage", + "name": "4th Follow Up Ratio", + "icon": "", + "value_name": "{0}%*5+{1}% Max HP", + "values": [ + [ + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 5, + 5, + 5 + ], + [ + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ] + ] + }, + { + "id_stats": "GE_Player_Fadia_UltraSkillMelee8_Damage", + "name": "5th Follow Up Ratio", + "icon": "", + "value_name": "{0}% Max HP", + "values": [ + [ + 5, + 6, + 6, + 7, + 8, + 8, + 9, + 10, + 10, + 11, + 12, + 13, + 14 + ] + ] + }, + { + "name": "HP Recovery", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Lilith Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "id_stats": "FadiaQLimitHp", + "name": "Destructive Threshold", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 705, + 761, + 818, + 874, + 930, + 987, + 1043, + 1100, + 1156, + 1212, + 1269, + 1325, + 1382, + 1438, + 1494, + 1551, + 1607, + 1664, + 1720, + 2340, + 2397, + 2453, + 2510, + 2566, + 2622, + 2679, + 2735, + 2792, + 2848, + 3468, + 3525, + 3581, + 3638, + 3694, + 3750, + 3807, + 3863, + 3920, + 3976, + 4596, + 4653, + 4709, + 4766, + 4822, + 4878, + 4935, + 4991, + 5048, + 5104, + 5724, + 5781, + 5837, + 5894, + 5950, + 6006, + 6063, + 6119, + 6176, + 6232, + 6852, + 6909, + 6965, + 7022, + 7078, + 7134, + 7191, + 7247, + 7304, + 7360, + 7980, + 8037, + 8093, + 8150, + 8206, + 8262, + 8319, + 8375, + 8432, + 8488, + 8544 + ] + ] + }, + { + "name": "Healing Increased To", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Damage Increase", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "id_stats": "GA_Fadia_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Fadia_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Fadia_QTE", + "name": "Outsider", + "type_name": "Support Skill", + "desc": "Swings her cross shield, dealing <NumGreen>1</> instance of <Hun>Psyche DMG</> to an area.", + "desc_short": "Deals <Hun>Psyche DMG</>.", + "context": "<Italic>Move it, you're blocking the camera!</>", + "icon": "/Game/UI/UI_Icon/Skill/Fadia_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Fadia_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Fadia_Passive_1", + "name": "Furnace of Guilt", + "type_name": "Passive Skill", + "desc": "<TextHLT>Nova Enhancement</>: Allows all allies to drain Max HP from the target when Nova ends. The target loses Max HP equal to 200% of Fadia's base Max HP, and each ally gains Max HP equal to 10% of Fadia's base Max HP. Total drained cannot exceed 50% of Fadia's base Max HP. Restores both parties' stats upon exiting combat.", + "context": "<Italic>More… MORE! Fill this void—if you can!</>", + "icon": "/Game/UI/UI_Icon/Skill/Fadia_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Fadia_Passive_2", + "name": "Denial and Plunder", + "type_name": "Passive Skill", + "desc": "Like a baby yearning for nourishment from mommy. When Fadia is in the team, increases team max HP by <NumGreen>10%</>.", + "context": "<Italic>If you want it, go grab it.</>", + "icon": "/Game/UI/UI_Icon/Skill/Fadia_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Fadia_Passive_3", + "name": "Queen Charming", + "type_name": "Character Traits", + "desc": "Allows Fadia to receive special gifts from shopkeepers who take a liking to her while exploring the city.", + "context": "<Italic>When Skia and Lacrimosa passed by Tamamochi Street after a mission, Lacrimosa went into a 2-Four Convenience Store. She thought she'd walk out with arms full of free tomato jelly packets, just like how Fadia always gets showered with gifts…</>\r\n<Italic>In the end, all she got was a reward that Skia bought right there and then.</>", + "icon": "/Game/UI/UI_Icon/Skill/Fadia_Pas3", + "additional_desc": [], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_fadia_02", + "name": "Good Driving", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_cjbc", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Grants an additional <Green2>1000</> Fons in tips for each order in Swift Cab." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> In Swift Cab, final satisfaction for orders is increased by an additional <Green2>25</> points." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Grants an additional <Green2>1000</> Fons in tips for each order in Swift Cab." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> In Swift Cab, final satisfaction for orders is increased by an additional <Green2>25</> points." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> In Swift Cab, the satisfaction cap for each customer is increased by <Green2>50</> points." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Apostate", + "desc": "Fadia's damage redirect ratio is increased to <NumGreen>75%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1039_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Instinct", + "desc": "Increases the damage ratio enemies take through <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaSkill\">Destructive Experience</> to <NumGreen>600%</> and raises its damage cap to <NumGreen>25%</> of Fadia’s Max HP. Deals immediate damage equal to the difference between the damage already taken and the damage cap when <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaSkill\">Destructive Experience</> is removed.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1039_2", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Destructive Experience", + "desc": "A special effect that Fadia attaches to the target. Causes the target to share a percentage of the damage Fadia takes during the duration." + } + ] + }, + { + "name": "Curser of Blessings", + "desc": "Upon entering combat, Fadia increases her base Max HP by <NumGreen>30%</>. After leaving combat, she loses the increased Max HP.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1039_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Breaker of Taboos", + "desc": "Increases Fadia's healing ratio to <NumGreen>30%</> of Max HP while in <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaState\">Lilith</> form. Further increases the healing ratio to <NumGreen>60%</> of Max HP when her lost HP is greater than or equal to the <TextHLT>Destructive Threshold</>. ", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1039_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Lilith", + "desc": "Changes her Attack form and unleashes 5 hits that deal Mental DMG." + } + ] + }, + { + "name": "Survivor of Death", + "desc": "Increases Fadia's CRIT Rate by <NumGreen>50%</> while in Lilith state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1039_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Lilith", + "desc": "Changes her Attack form and unleashes 5 hits that deal Mental DMG." + } + ] + }, + { + "name": "Bringer of Love and Death", + "desc": "Inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaSkill\">Destructive Experience</> on up to <NumGreen>10</> targets within range. Each <hot textstyle=\"TextEXPL\" param=\"nouns&FadiaSkill\">Destructive Experience</>'s duration and damage cap are calculated individually.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1039_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Destructive Experience", + "desc": "A special effect that Fadia attaches to the target. Causes the target to share a percentage of the damage Fadia takes during the duration." + } + ] + } + ], + "resonance": [ + { + "name": "The Disrespecting Saint", + "desc": "Increases the skill level of Wordless Rejection, Existence, and Agony to Euphoria by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "The Unified Saint", + "desc": "Grants all team members 10% ATK while Fadia is on the team.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1039/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 2, + "desc": "Increases {0} by {1}% for each Type II Module equipped.", + "special_desc": "Type II Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "HPMaxUp", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": true, + "value": 6 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_011", + "amount": 100 + }, + { + "item_id": "Food_060", + "amount": 100 + }, + { + "item_id": "Food_085", + "amount": 100 + }, + { + "item_id": "Flower0000", + "amount": 200 + }, + { + "item_id": "Furniture_draw_005", + "amount": 200 + }, + { + "item_id": "Furniture_FlowerPot_005", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1039" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1039" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Friendship_3_1039" + ], + "amount": [ + 20, + 20000, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1039" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1039" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1039" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1039", + "Fashion_character_1039_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Fadia here. As you can see, I'm currently under… probation… in this place full of rules and regulations. My intuition tells me we'll be seeing a lot of each other. Better remember me from now, or you will know…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_meet_001" + }, + { + "name": "Chat: Work", + "desc": "Missions? Investigations? …How delightful. ETD might as well work under the resident association.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_chat_001" + }, + { + "name": "Chat: Passerby", + "desc": "I wonder what desires lurk beneath these mundane shells?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_chat_002" + }, + { + "name": "Chat: Surveillance", + "desc": "Heh, those Fraxinus fools… Having to pretend I don't notice them every time is quite the hassle.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_chat_003" + }, + { + "name": "Sunny", + "desc": "What a blinding sun… like being watched with scorching eyes…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_weather_001" + }, + { + "name": "Rainy", + "desc": "How funny it is to see those usually prim and proper dolls all messed up, with rain dripping down their faces.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_weather_002" + }, + { + "name": "Cold", + "desc": "I'm always fired up and ready to go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_weather_003" + }, + { + "name": "Hot", + "desc": "My clothes… are sticking to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Lookin' so messy, so eager to see me?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Care to buy me a drink? What better way to liven up the afternoon than with a little fun?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Since night's falling, why don't we go somewhere better suited for the dark?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_greet_003" + }, + { + "name": "Good Night", + "desc": "Hey, the night's still young, sleepy head.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_greet_004" + }, + { + "name": "Hobbies", + "desc": "As long as it brings pleasure, I like it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_hobby_001" + }, + { + "name": "Worries", + "desc": "If it wasn't for that watchdog, I'd be having way more fun in my missions.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_vexation_001" + }, + { + "name": "Topic: Hypervortex", + "desc": "Gazing face-to-face, beneath skies as beautiful as death itself… Opening everything to the infinite void, even if it means being torn apart, consumed, and cast down into that emptiness right here and now… How could anyone complain?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_talk_001" + }, + { + "name": "Topic: Ghroth Island", + "desc": "You're no stranger to that place too, aren't you? So tell me—is it a wretched prison of despair, or a sacred paradise of madness?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_talk_002" + }, + { + "name": "Topic: Desires", + "desc": "An abyss lies between all human existence, and desire is the perfect tool to shatter such isolation. Death casts shadows of fear and temptation between us—listen closely to their whispers, luring us to take risk after risk.\nThe pit of desire can never be filled, never satisfied—this affliction plagues not just you and me, but all of humanity. So tell me, what desires are you suppressing right now? Go on, show me… just a bit.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "For this frail, decaying flesh of ours, pain is the finest feast. It lives, it thrives, and in our dizzying cruelty and trembling, it brings us ever closer to death.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_self_001" + }, + { + "name": "About Myself: Popularity", + "desc": "Well, there's no restraining their obsession!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_self_002" + }, + { + "name": "About Myself: Patience", + "desc": "Patience from a hunter can be quite the dangerous sign… Good hunters only invest their patience in hunting… just like I do with you—Tsk tsk, got you there.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_self_003" + }, + { + "name": "About Baicang", + "desc": "Always acting like a slacker, but that guy… deep down he's a true saint.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_about_001" + }, + { + "name": "About Alphard", + "desc": "What's that snake of a woman thinking, fishing out dangerous Espers from Ghroth Island for her own use? For all we know, she might be just as dangerous as the monsters on that island.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_about_002" + }, + { + "name": "About Skia", + "desc": "When I don't want to hear him ramble, a little… trick… should just divert his attention enough. That dog prioritizes controlling the situation over his own thoughts and feelings.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_about_003" + }, + { + "name": "About Lacrimosa", + "desc": "Not having a care in the world must be nice… Stay innocent while you can, my sweet little Mosa.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_about_004" + }, + { + "name": "About Bureau of Anomaly Control", + "desc": "To some extent, I don't really hate this place. Compared to that chaotic grave, the so-called unshakeable rationality here merely legitimizes all transgressions and taboos under noble pretenses and facades.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_about_005" + }, + { + "name": "About ETD", + "desc": "One side faces a world that can be defined and understood, while the other faces what's denied and cursed—perhaps that's why she brought us together in the ETD-4.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_about_006" + }, + { + "name": "Character Ascension I", + "desc": "This… this pain!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "I can see… I…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Clawing your way up without dignity…? Heh, what are you after?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_ug_003" + }, + { + "name": "Gift Received I", + "desc": "What's more precious than the gift… is you! ♥", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Did you give it to me because you liked it? How adorable.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Gifts symbolize affection. That means you…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Your L-O-V-E for me. I'll take it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Want some more?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Better get used to it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Attaboy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_skill_003" + }, + { + "name": "Ultimate I", + "desc": "I'll guide you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Intimacy through pain.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Feeling satisfied?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Can anomalies feel love?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_containment_001" + }, + { + "name": "Containment II", + "desc": "Perhaps a chance for redemption…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_containment_002" + }, + { + "name": "Nullification I", + "desc": "Give me a show next time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Does it hurt?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Is that all you've got?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Looks like I'll have to make my own fun.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "I'm not so easily won over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Mediocre.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "A little something to fill the gaps.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Who left it behind? How pitiful.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_windfall_006" + }, + { + "name": "Low Health I", + "desc": "A little pain won't hurt!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_hp_001" + }, + { + "name": "Low Health II", + "desc": "This… is being alive!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_hp_002" + }, + { + "name": "Low Health III", + "desc": "Life… is better when it's blazing to ashes!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_hp_003" + }, + { + "name": "Heal I", + "desc": "Aren't you worried about me?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_fh_001" + }, + { + "name": "Heal II", + "desc": "Haven't had my fill of this agony yet…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_fh_002" + }, + { + "name": "Down I", + "desc": "Such a violent display of love…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_dead_001" + }, + { + "name": "Down II", + "desc": "Haa, so this is…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_dead_002" + }, + { + "name": "Down III", + "desc": "This moment… it's slipping away…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_dead_003" + }, + { + "name": "Takedown I", + "desc": "So fragile.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_kill_001" + }, + { + "name": "Takedown II", + "desc": "Broken already?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_kill_002" + }, + { + "name": "Damaged I", + "desc": "Harder.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_struck_001" + }, + { + "name": "Damaged II", + "desc": "How disappointing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "That's right!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "I love it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Bring them to their knees.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_deploy_002" + }, + { + "name": "Deploy II", + "desc": "I have no interest in weaklings.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Don't get in my way!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "The perfect stage.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Waiting for me?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_QTE_003" + }, + { + "name": "Glide I", + "desc": "Let's take a breather before we land.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_Fly_001" + }, + { + "name": "Glide II", + "desc": "Stretching helps relieve sore muscles.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_Fly_002" + }, + { + "name": "Switch I", + "desc": "It's about time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_Switch_001" + }, + { + "name": "Switch II", + "desc": "Cutie, let the games begin.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_Switch_002" + }, + { + "name": "Switch III", + "desc": "Where would you like me to start hurting you?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_Switch_003" + }, + { + "name": "Special Switch - Skia", + "desc": "That wasn't nearly satisfying.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_SSC_001" + }, + { + "name": "Special Switch - Baicang", + "desc": "That was fast. Can't say I'm surprised.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_SSC_002" + }, + { + "name": "Special Switch - Lacrimosa", + "desc": "Releasing… that's what I do best.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_SSC_003" + }, + { + "name": "Special Switch - Mint", + "desc": "The best treats should be enjoyed while they're warm.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_SSC_004" + }, + { + "name": "Teammate Down - Skia", + "desc": "Everyone should protect animals.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_TeammateDown_001" + }, + { + "name": "Teammate Down - Baicang", + "desc": "Slacking off again?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_TeammateDown_002" + }, + { + "name": "Teammate Down - Lacrimosa", + "desc": "Mosa, hide for a bit.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_TeammateDown_003" + }, + { + "name": "Teammate Down - Mint", + "desc": "Just a reminder… cats have nine lives.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_TeammateDown_004" + }, + { + "name": "Parry I", + "desc": "Not enough desire!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_Parry_001" + }, + { + "name": "Parry II", + "desc": "Boring.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Look at you, always in a rush.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Just charging forward… losing your pace.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC003/Play_Vo_Char_NPC003_DodgeCombo_002" + } + ] + } + }, + { + "id": "1046", + "name": "Zero", + "description": "The only esper in history without a detectable Wertheimer Index.", + "element": [ + { + "element_id": "Cosmos", + "name": "Cosmos" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_046", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_046x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_046_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_nanzhu", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Instant Cycle", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_huanhe" + }, + { + "name": "Burst DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_baofa" + } + ], + "arcs_tags": { + "type_id": "1", + "name": "Solid", + "icon": "/Game/UI/UI/player/YH_UI_icon_solid" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1046_0", + "characterId": "1046", + "name": "Beginning of the Story", + "desc": "Clean, sharp tailoring. Perfect for everyday wear.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_046", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_046_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nanzhu", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1046_2", + "characterId": "1046", + "name": "Hunter Off Duty", + "desc": "Playful yet stylish attire with layers and eye-catching accessories, showcasing a carefree personality.\r\n\"A first-rate hunter should have first-rate fashion sense too!\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu4_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu4", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_3", + "characterId": "1046", + "name": "City Wanderer", + "desc": "Light and fitted, clean and sharp styling that never goes wrong, helping you blend into crowds with ease.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu2", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_4", + "characterId": "1046", + "name": "Unconventional Attire", + "desc": "Standard detention facility uniform with a well-fitted cut, comfortable fabric, and bright colors. If only I could wear it normally…", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Prison_Uniform_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu6", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu6_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu6", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu6", + "sourceText": "Hethereau Detention Facility: Prisoner Spider Exchange", + "sourceLockText": "Hethereau Detention Facility: Prisoner Spider Exchange", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_5", + "characterId": "1046", + "name": "School Musings", + "desc": "Preppy academic attire with understated colors complemented by classic patterns, showcasing the refined aura of an honor student.\r\n\"Want to attend tomorrow's mixer together?\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu3", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_6", + "characterId": "1046", + "name": "Graffiti in Progress", + "desc": "A playful overalls set full of childlike charm, featuring unique printed patterns and an asymmetrical design with loads of personality. Even if you get paint splattered on it, it'll just look like part of the print.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu5_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu5", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_7", + "characterId": "1046", + "name": "Perfect Partners", + "desc": "A sharply tailored racing suit, as irreplaceable as the partner at your side.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu7_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu7", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu7_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu7", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu7", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_rpg_level1", + "characterId": "1046", + "name": "Unassuming Warrior", + "desc": "Fasten the last button, straighten the collar.\r\nThose setting out for the first time must learn such things before all else.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1051_rpg_level1_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu9", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu9_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu9", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu9", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_rpg_level2", + "characterId": "1046", + "name": "The Blademaster", + "desc": "The wind shall remember the swordsman's path.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1051_rpg_level2_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu8", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu8_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu8", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu8", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_rpg_level3", + "characterId": "1046", + "name": "Glory Days", + "desc": "Crowned in glory, the long night finds its light.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1051_rpg_level3_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu10", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu10_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu10", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu10", + "sourceText": "Neon Rift", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1046_swimsuit", + "characterId": "1046", + "name": "Cloudless Summer", + "desc": "A paper plane rides the sea breeze toward distant shores. What will this summer leave behind?", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu11_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_nanzhu11", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_nanzhu11_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/Fashion_nanzhu11", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nanzhu11", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1250, + 1350, + 1450, + 1550, + 1650, + 1750, + 1850, + 1950, + 2050, + 2150, + 2250, + 2350, + 2450, + 2550, + 2650, + 2750, + 2850, + 2950, + 3050, + 3150, + 3250, + 3350, + 3450, + 3550, + 3650, + 3750, + 3850, + 3950, + 4050, + 4150, + 4250, + 4350, + 4450, + 4550, + 4650, + 4750, + 4850, + 4950, + 5050, + 5150, + 5250, + 5350, + 5450, + 5550, + 5650, + 5750, + 5850, + 5950, + 6050, + 6150, + 6250, + 6350, + 6450, + 6550, + 6650, + 6750, + 6850, + 6950, + 7050, + 7150, + 7250, + 7350, + 7450, + 7550, + 7650, + 7750, + 7850, + 7950, + 8050, + 8150, + 8250, + 8350, + 8450, + 8550, + 8650, + 8750, + 8850, + 8950, + 9050, + 9150 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 85, + 89, + 94, + 98, + 102, + 106, + 111, + 115, + 119, + 123, + 128, + 132, + 136, + 140, + 145, + 149, + 153, + 157, + 162, + 166, + 170, + 174, + 179, + 183, + 187, + 191, + 196, + 200, + 204, + 208, + 213, + 217, + 221, + 225, + 230, + 234, + 238, + 242, + 247, + 251, + 255, + 259, + 264, + 268, + 272, + 276, + 281, + 285, + 289, + 293, + 298, + 302, + 306, + 310, + 315, + 319, + 323, + 327, + 332, + 336, + 340, + 344, + 349, + 353, + 357, + 361, + 366, + 370, + 374, + 378, + 383, + 387, + 391, + 395, + 400, + 404, + 408, + 412, + 417, + 421 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": " ", + "description": " ", + "birthday": "Unknown", + "homePlace": "Eibon Antique Shop", + "abilityName": "Zeroth Sense", + "introduction": "The only esper in history without a detectable Wertheimer Index.", + "voiceChinese": "马洋", + "voiceEnglish": "Hunter McCoy", + "voiceJapanese": "内田雄馬", + "voiceKorean": "박기욱" + }, + "profile_detail": [ + { + "name": "Profile locked", + "desc": "Profile locked" + } + ], + "melee": [ + { + "id": "GA_Female046_Melee", + "name": "Appraisal", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Appraisal - Severance</>", + "<Title>Basic Attack: Appraisal - Break</>", + "<Title>Critical Riposte: Flash of Inspiration</>" + ], + "desc": [ + "Channels energy through the weapon, performing up to <NumGreen>5</> consecutive attacks that deal <Guang>Cosmos DMG</>.", + "Wields the weapon mid-air and plunges, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Appraisal - Severance after a Critical Dodge. Seizes the opening from the enemy's missed attack and swings the weapon to counter, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area and reducing Break." + ], + "desc_short": [ + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</> with Basic Attacks after a Critical Dodge." + ], + "context": "<Italic>Handling a sword is the only way I feel in control.</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female046_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 23, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 46, + 49, + 53, + 57 + ] + ] + }, + { + "id_stats": "GE_Player_Female046_Melee2_1_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 22, + 24, + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56 + ], + [ + 25, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 47, + 51, + 55, + 60, + 65 + ] + ] + }, + { + "id_stats": "GE_Player_Female046_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 65, + 70, + 75, + 81, + 88, + 95 + ], + [ + 6, + 6, + 7, + 8, + 8, + 9, + 10, + 11, + 11, + 12, + 13, + 14, + 16 + ], + [ + 38, + 41, + 44, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 89, + 96 + ] + ] + }, + { + "id_stats": "GE_Player_Female046_Melee6_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38 + ], + [ + 99, + 107, + 116, + 125, + 135, + 146, + 158, + 170, + 184, + 199, + 215, + 232, + 251 + ] + ] + }, + { + "id_stats": "GE_Player_Female046_Melee8_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 68, + 73, + 79, + 86, + 92, + 100, + 108, + 117, + 126, + 136, + 147, + 159, + 172 + ] + ] + }, + { + "id_stats": "GE_Player_Female046_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 65, + 70, + 75, + 81, + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151, + 163 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28 + ] + ] + }, + { + "id_stats": "GE_Player_Female046_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 150, + 162, + 175, + 189, + 204, + 220, + 238, + 257, + 277, + 299, + 323, + 349, + 377 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Female046_Skill", + "name": "Appraise and Engrave", + "type_name": "Redirect Skill", + "desc": "Opening, exposed! Performs <NumGreen>3</> consecutive weapon strikes. Leaps into the air to charge. Fires an Esper Cannon that deals <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area. Deals an additional <NumGreen>1</> instance of <Guang>Cosmos DMG</> to the first enemy hit whose level is below Zero's own level.", + "desc_short": "Deals <Guang>Cosmos DMG</>, dealing an additional instance of <Guang>Cosmos DMG</> to the first enemy hit that is not higher level than the caster.", + "context": "<Italic>A surreal scene, outlined in slashes, emerges from thin air.</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_Skill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female046_Skill1_Damage", + "name": "Weapon Strike Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%+{3}%", + "values": [ + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ], + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ], + [ + 125, + 135, + 146, + 158, + 170, + 184, + 199, + 215, + 232, + 251, + 271, + 292, + 316 + ], + [ + 134, + 145, + 156, + 169, + 182, + 197, + 213, + 230, + 248, + 268, + 290, + 313, + 338 + ] + ] + }, + { + "id_stats": "GE_Player_Female046_Skill_Kill_Damage_lv1", + "name": "Extra DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200 + ] + ] + }, + { + "id_stats": "GA_Female_051_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Female046_UltraSkill", + "name": "Divide by Zero", + "type_name": "Ultimate", + "desc": "Sweeps away the unseen lines that connect the Nexus in a dance of blades. Deals multiple instances of <Guang>Cosmos DMG</> to an area.", + "desc_short": "Deals <Guang>Cosmos DMG</>.", + "context": "<Italic>I sense an Anomaly Nexus, bound by invisible, silent, intangible ties… All severed in an instant with a single graceful strike.</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female046_UltraSkill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% *4 + {2}% + {3}%", + "values": [ + [ + 132, + 143, + 154, + 167, + 180, + 195, + 210, + 227, + 245, + 265, + 286, + 309, + 334 + ], + [ + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 9, + 9, + 10, + 11, + 12, + 13 + ], + [ + 177, + 191, + 206, + 223, + 241, + 260, + 281, + 304, + 328, + 354, + 383, + 413, + 447 + ], + [ + 168, + 182, + 196, + 212, + 229, + 247, + 267, + 289, + 312, + 337, + 364, + 393, + 424 + ] + ] + }, + { + "id_stats": "GA_Female_051_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Female046_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Female046_QTE", + "name": "Rift Blossom", + "type_name": "Support Skill", + "desc": "Slashes through space and detonates a rift, dealing <NumGreen>2</> instances of <Guang>Cosmos DMG</> to an area.", + "desc_short": "Deals <Guang>Cosmos DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/Female_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female046_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 75, + 81, + 87, + 94, + 102, + 110, + 119, + 129, + 139, + 150, + 162, + 175, + 189 + ], + [ + 124, + 134, + 145, + 157, + 169, + 183, + 197, + 213, + 230, + 249, + 269, + 290, + 314 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Female_Passive_1", + "name": "Appraiser", + "type_name": "Passive Skill", + "desc": "<TextHLT>Charge Enhancement</>: Restores HP equal to 50% of Zero's Base ATK when the active character gains Ultimate Energy.", + "desc_short": "<TextHLT>Charge Enhancement</>: Restores HP equal to 50% of Zero's Base ATK when the active character gains Ultimate Energy.", + "context": "<Italic>Where will this ability to read and understand anomalies lead me?</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Female_Passive_2", + "name": "Anomaly Perception", + "type_name": "Passive Skill", + "desc": "Ultimate: Divide by Zero damage increases by <NumGreen>25%</>.", + "desc_short": "Increases Divide by Zero's damage by <NumGreen>25%</>.", + "context": "<Italic>Zeroth Sense Synchronization</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_palyer_01", + "name": "Five-Star Paragon", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_wxhr", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases Affinity gained from Gifts by <Green2>5%</> when Bond Level is <Green2>4</> or below." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>5</> or below." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>6</> or below." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>7</> or below." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>8</> or below." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Blooming Gaze", + "desc": "Deals <NumGreen>1</> additional hit of <NumGreen>200%</> ATK to enemies of lower level on first hit. This damage ignores <NumGreen>75%</> of the target's DEF.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Finding the Calling", + "desc": "Grants an additional <NumGreen>8</> Ultimate Energy after successfully casting Appraise and Engrave.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Anomalies Record", + "desc": "Increases Divide by Zero's Crit Chance by <NumGreen>50%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Undecided Factors", + "desc": "Every <NumGreen>1</> point of Zero's Base ATK increases Ultimate: Divide by Zero damage by <NumGreen>0.1%</>, up to a maximum of <NumGreen>25%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Theopneustos", + "desc": "Increases Zero's ATK by <NumGreen>10%</> for <NumGreen>20s</> when triggering Support Skill.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Deceptive Liberation", + "desc": "Increases Extra DMG Ratio of Appraise and Engrave to <NumGreen>300%</> of ATK.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Discern", + "desc": "Increases the skill level of Appraisal, Appraise and Engrave, and Divide by Zero by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Zero Display", + "desc": "Grants the team <NumGreen>12%</> ATK for <NumGreen>20s</> when Zero triggers any Cosmos Esper Cycle.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1046/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [], + "gift_reward": [], + "voices": { + "daily": [ + { + "name": "Character Ascension I", + "desc": "Feeling good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Learned a lot.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "There's still more to see in this world.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_ug_003" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Engrave!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Strike!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Mark!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Let's finish this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Fate splinter, and fracture.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Divided by zero.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "All set.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_containment_001" + }, + { + "name": "Containment II", + "desc": "Containment complete.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_containment_002" + }, + { + "name": "Nullification I", + "desc": "Commission complete.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_anomaly_002" + }, + { + "name": "Nullification II", + "desc": "Nicely done.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_anomaly_003" + }, + { + "name": "Unexpected Gains I", + "desc": "Keep it well.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Seems like luck is on my side today.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "The more, the merrier.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Hard work pays off.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "I don't have to report to the Security Office, do I?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "A pleasant surprise.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Hang in there.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_hp_001" + }, + { + "name": "Low Health II", + "desc": "It's not over yet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_hp_002" + }, + { + "name": "Low Health III", + "desc": "Focus! It's not time to give up yet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_hp_003" + }, + { + "name": "Heal I", + "desc": "Thanks for the support.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Mh_001" + }, + { + "name": "Heal II", + "desc": "Feeling much better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Mh_002" + }, + { + "name": "Down I", + "desc": "The Nexus… I couldn't see it…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_dead_001" + }, + { + "name": "Down II", + "desc": "Sorry, I couldn't…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_dead_002" + }, + { + "name": "Down III", + "desc": "The truth… is not yet…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_dead_003" + }, + { + "name": "Takedown I", + "desc": "No big deal.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_kill_001" + }, + { + "name": "Takedown II", + "desc": "The Nexus, it's here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_kill_002" + }, + { + "name": "Damaged I", + "desc": "It's fine.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_struck_001" + }, + { + "name": "Damaged II", + "desc": "Be careful.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Watch the timing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "My mistake.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Got it, leave it to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_deploy_002" + }, + { + "name": "Deploy II", + "desc": "What is it this time?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Appraise… then break!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Arc-light!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Begone!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_QTE_003" + }, + { + "name": "Glide I", + "desc": "Perfect angle.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Fly_001" + }, + { + "name": "Glide II", + "desc": "The wind's just right.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Fly_002" + }, + { + "name": "Switch I", + "desc": "Let me take over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Switch_001" + }, + { + "name": "Switch II", + "desc": "Trust me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Switch_002" + }, + { + "name": "Switch III", + "desc": "I will see through the Nexus.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Switch_003" + }, + { + "name": "Special Switch - Mint", + "desc": "Leave it to me, Mint.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_SSC_001" + }, + { + "name": "Special Switch - Adler", + "desc": "Adler, I'll let you handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_SSC_ADL_001" + }, + { + "name": "Special Switch - Daffodill", + "desc": "Shift change.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_SSC_DFDE_001" + }, + { + "name": "Special Switch - Hotori", + "desc": "Shopkeeper, you have a customer.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_SSC_XUN_001" + }, + { + "name": "Special Switch - Nanally", + "desc": "Boss, it's your turn.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_SSC_NNL_001" + }, + { + "name": "Special Switch - Edgar", + "desc": "Take care.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_SSC_ADJ_001" + }, + { + "name": "Special Switch - Sakiri", + "desc": "Make sure Kiroumaru doesn't starve.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_SSC_ZW_001" + }, + { + "name": "Teammate Down - Hotori", + "desc": "Your wine… Drink it later.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_TeammateDown_001" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "I won't let you down.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_TeammateDown_002" + }, + { + "name": "Teammate Down - Adler", + "desc": "Eibon will never give up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_TeammateDown_003" + }, + { + "name": "Teammate Down - Sakiri", + "desc": "Let's go home after this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_TeammateDown_004" + }, + { + "name": "Teammate Down - Nanally", + "desc": "The Coluccis still have me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_TeammateDown_005" + }, + { + "name": "Teammate Down - Edgar", + "desc": "Don't worry. I'll take over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_TeammateDown_006" + }, + { + "name": "Teammate Down - Mint", + "desc": "Mint, take a break.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_TeammateDown_007" + }, + { + "name": "Parry I", + "desc": "Perfect timing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Parry_001" + }, + { + "name": "Parry II", + "desc": "Now is the time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Feeling good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Hmm, not too difficult.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO_M/Play_Vo_Char_ZERO_M_DodgeCombo_002" + } + ] + } + }, + { + "id": "1051", + "name": "Zero", + "description": "The only esper in history without a detectable Wertheimer Index.", + "element": [ + { + "element_id": "Cosmos", + "name": "Cosmos" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_009", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_009x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_nvzhu", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Instant Cycle", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_huanhe" + }, + { + "name": "Burst DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_baofa" + } + ], + "arcs_tags": { + "type_id": "1", + "name": "Solid", + "icon": "/Game/UI/UI/player/YH_UI_icon_solid" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1051_0", + "characterId": "1051", + "name": "Beginning of the Story", + "desc": "Clean, sharp tailoring. Perfect for everyday wear.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nvzhu", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1051_2", + "characterId": "1051", + "name": "Hunter Off Duty", + "desc": "Playful yet stylish attire with layers and eye-catching accessories, showcasing a carefree personality.\r\n\"A first-rate hunter should have first-rate fashion sense too!\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_009_6_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_6", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_6_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nvzhu6", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu6", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_3", + "characterId": "1051", + "name": "City Wanderer", + "desc": "Light and fitted, clean and sharp styling that never goes wrong, helping you blend into crowds with ease.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_009_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nvzhu2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu2", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_4", + "characterId": "1051", + "name": "Unconventional Attire", + "desc": "Standard detention facility uniform with a well-fitted cut, comfortable fabric, and bright colors. If only I could wear it normally…", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Prison_Uniform_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nvzhu4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu4", + "sourceText": "Hethereau Detention Facility: Prisoner Spider Exchange", + "sourceLockText": "Hethereau Detention Facility: Prisoner Spider Exchange", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_5", + "characterId": "1051", + "name": "School Musings", + "desc": "Preppy academic attire with understated colors complemented by classic patterns, showcasing the refined aura of an honor student.\r\n\"Want to attend tomorrow's mixer together?\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_009_3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nvzhu3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu3", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_6", + "characterId": "1051", + "name": "Graffiti in Progress", + "desc": "A playful overalls set full of childlike charm, featuring unique printed patterns and an asymmetrical design with loads of personality. Even if you get paint splattered on it, it'll just look like part of the print.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_009_5_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nvzhu5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu5", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_7", + "characterId": "1051", + "name": "Perfect Partners", + "desc": "A sharply tailored racing suit, as irreplaceable as the partner at your side.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_009_7_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_7", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_7_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_nvzhu7", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu7", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_rpg_level1", + "characterId": "1051", + "name": "Unassuming Warrior", + "desc": "Fasten the last button, straighten the collar.\r\nThose setting out for the first time must learn such things before all else.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1051_rpg_level1_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_9", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_9_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/H_UI_shizhuang_lihui_nvzhu9", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu9", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_rpg_level2", + "characterId": "1051", + "name": "The Blademaster", + "desc": "The wind shall remember the swordsman's path.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1051_rpg_level2_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_8", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_8_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/H_UI_shizhuang_lihui_nvzhu8", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu8", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_rpg_level3", + "characterId": "1051", + "name": "Glory Days", + "desc": "Crowned in glory, the long night finds its light.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1051_rpg_level3_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_10", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_10_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/H_UI_shizhuang_lihui_nvzhu10", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu10", + "sourceText": "Neon Rift", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1051_swimsuit", + "characterId": "1051", + "name": "Cloudless Summer", + "desc": "A paper plane rides the sea breeze toward distant shores. What will this summer leave behind?", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_009_11_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_009_11", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_009_11_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/H_UI_shizhuang_lihui_nvzhu11", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_nvzhu11", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1250, + 1350, + 1450, + 1550, + 1650, + 1750, + 1850, + 1950, + 2050, + 2150, + 2250, + 2350, + 2450, + 2550, + 2650, + 2750, + 2850, + 2950, + 3050, + 3150, + 3250, + 3350, + 3450, + 3550, + 3650, + 3750, + 3850, + 3950, + 4050, + 4150, + 4250, + 4350, + 4450, + 4550, + 4650, + 4750, + 4850, + 4950, + 5050, + 5150, + 5250, + 5350, + 5450, + 5550, + 5650, + 5750, + 5850, + 5950, + 6050, + 6150, + 6250, + 6350, + 6450, + 6550, + 6650, + 6750, + 6850, + 6950, + 7050, + 7150, + 7250, + 7350, + 7450, + 7550, + 7650, + 7750, + 7850, + 7950, + 8050, + 8150, + 8250, + 8350, + 8450, + 8550, + 8650, + 8750, + 8850, + 8950, + 9050, + 9150 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 85, + 89, + 94, + 98, + 102, + 106, + 111, + 115, + 119, + 123, + 128, + 132, + 136, + 140, + 145, + 149, + 153, + 157, + 162, + 166, + 170, + 174, + 179, + 183, + 187, + 191, + 196, + 200, + 204, + 208, + 213, + 217, + 221, + 225, + 230, + 234, + 238, + 242, + 247, + 251, + 255, + 259, + 264, + 268, + 272, + 276, + 281, + 285, + 289, + 293, + 298, + 302, + 306, + 310, + 315, + 319, + 323, + 327, + 332, + 336, + 340, + 344, + 349, + 353, + 357, + 361, + 366, + 370, + 374, + 378, + 383, + 387, + 391, + 395, + 400, + 404, + 408, + 412, + 417, + 421 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": " ", + "description": " ", + "birthday": "Unknown", + "homePlace": "Eibon Antique Shop", + "abilityName": "Zeroth Sense", + "introduction": "The only esper in history without a detectable Wertheimer Index.", + "voiceChinese": "曾彤", + "voiceEnglish": "Suzie Yeung", + "voiceJapanese": "内田真礼", + "voiceKorean": "이은조" + }, + "profile_detail": [ + { + "name": "Profile locked", + "desc": "Profile locked" + } + ], + "melee": [ + { + "id": "GA_Female051_Melee", + "name": "Appraisal", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Appraisal - Severance</>", + "<Title>Basic Attack: Appraisal - Break</>", + "<Title>Critical Riposte: Flash of Inspiration</>" + ], + "desc": [ + "Channels energy through the weapon, performing up to <NumGreen>5</> consecutive attacks that deal <Guang>Cosmos DMG</>.", + "Wields the weapon mid-air and plunges, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Appraisal - Severance after a Critical Dodge. Seizes the opening from the enemy's missed attack and swings the weapon to counter, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area and reducing Break." + ], + "desc_short": [ + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</> with Basic Attacks after a Critical Dodge." + ], + "context": "<Italic>Handling a sword is the only way I feel in control.</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female051_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48 + ] + ] + }, + { + "id_stats": "GE_Player_Female051_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%*2", + "values": [ + [ + 22, + 24, + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56 + ], + [ + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42 + ] + ] + }, + { + "id_stats": "GE_Player_Female051_Melee4_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 14, + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 30, + 33, + 36 + ], + [ + 17, + 19, + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35, + 38, + 41, + 44 + ] + ] + }, + { + "id_stats": "GE_Player_Female051_Melee6_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 65, + 70, + 75, + 81 + ], + [ + 39, + 42, + 46, + 49, + 53, + 58, + 62, + 67, + 73, + 79, + 85, + 92, + 99 + ], + [ + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98 + ] + ] + }, + { + "id_stats": "GE_Player_Female051_Melee9_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 69, + 75, + 80, + 87, + 94, + 102, + 110, + 118, + 128, + 138, + 149, + 161, + 174 + ] + ] + }, + { + "id_stats": "GE_Player_Female051_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 65, + 70, + 75, + 81, + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151, + 163 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + ] + }, + { + "id_stats": "GE_Player_Female051_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 150, + 162, + 175, + 189, + 204, + 220, + 238, + 257, + 277, + 299, + 323, + 349, + 377 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Female051_Skill", + "name": "Appraise and Engrave", + "type_name": "Redirect Skill", + "desc": "Opening, exposed! Performs <NumGreen>3</> consecutive weapon strikes. Leaps into the air to charge. Fires an Esper Cannon that deals <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area. Deals an additional <NumGreen>1</> instance of <Guang>Cosmos DMG</> to the first enemy hit whose level is below Zero's own level.", + "desc_short": "Deals <Guang>Cosmos DMG</>, dealing an additional instance of <Guang>Cosmos DMG</> to the first enemy hit that is not higher level than the caster.", + "context": "<Italic>A surreal scene, outlined in slashes, emerges from thin air.</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_Skill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female051_Skill1_Damage", + "name": "Weapon Strike Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%+{3}%", + "values": [ + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ], + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ], + [ + 125, + 135, + 146, + 158, + 170, + 184, + 199, + 215, + 232, + 251, + 271, + 292, + 316 + ], + [ + 134, + 145, + 156, + 169, + 182, + 197, + 213, + 230, + 248, + 268, + 290, + 313, + 338 + ] + ] + }, + { + "id_stats": "GE_Player_Female051_Skill_Kill_Damage_lv1", + "name": "Extra DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200, + 200 + ] + ] + }, + { + "id_stats": "GA_Female_051_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Female051_UltraSkill", + "name": "Divide by Zero", + "type_name": "Ultimate", + "desc": "Sweeps away the unseen lines that connect the Nexus in a dance of blades. Deals multiple instances of <Guang>Cosmos DMG</> to an area.", + "desc_short": "Deals <Guang>Cosmos DMG</>.", + "context": "<Italic>I sense an Anomaly Nexus, bound by invisible, silent, intangible ties… All severed in an instant with a single graceful strike.</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female051_UltraSkill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% *4 + {2}% + {3}%", + "values": [ + [ + 132, + 143, + 154, + 167, + 180, + 195, + 210, + 227, + 245, + 265, + 286, + 309, + 334 + ], + [ + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 9, + 9, + 10, + 11, + 12, + 13 + ], + [ + 177, + 191, + 206, + 223, + 241, + 260, + 281, + 304, + 328, + 354, + 383, + 413, + 447 + ], + [ + 168, + 182, + 196, + 212, + 229, + 247, + 267, + 289, + 312, + 337, + 364, + 393, + 424 + ] + ] + }, + { + "id_stats": "GA_Female_051_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Female051_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Female051_QTE", + "name": "Rift Blossom", + "type_name": "Support Skill", + "desc": "Slashes through space and detonates a rift, dealing <NumGreen>2</> instances of <Guang>Cosmos DMG</> to an area.", + "desc_short": "Deals <Guang>Cosmos DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/Female_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Female051_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 83, + 90, + 97, + 105, + 113, + 123, + 132, + 143, + 154, + 167, + 180, + 195, + 210 + ], + [ + 116, + 125, + 135, + 146, + 158, + 170, + 184, + 199, + 215, + 232, + 251, + 271, + 292 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Female_Passive_1", + "name": "Appraiser", + "type_name": "Passive Skill", + "desc": "<TextHLT>Charge Enhancement</>: Restores HP equal to 50% of Zero's Base ATK when the active character gains Ultimate Energy.", + "desc_short": "<TextHLT>Charge Enhancement</>: Restores HP equal to 50% of Zero's Base ATK when the active character gains Ultimate Energy.", + "context": "<Italic>Where will this ability to read and understand anomalies lead me?</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Female_Passive_2", + "name": "Anomaly Perception", + "type_name": "Passive Skill", + "desc": "Ultimate: Divide by Zero damage increases by <NumGreen>25%</>.", + "desc_short": "Increases Divide by Zero's damage by <NumGreen>25%</>.", + "context": "<Italic>Zeroth Sense Synchronization</>", + "icon": "/Game/UI/UI_Icon/Skill/Female_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_palyer_01", + "name": "Five-Star Paragon", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_wxhr", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases Affinity gained from Gifts by <Green2>5%</> when Bond Level is <Green2>4</> or below." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>5</> or below." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>6</> or below." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>7</> or below." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Increases Affection gained from Gifts by <Green2>5%</> when Bond Level is <Green2>8</> or below." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Blooming Gaze", + "desc": "Deals <NumGreen>1</> additional hit of <NumGreen>200%</> ATK to enemies of lower level on first hit. This damage ignores <NumGreen>75%</> of the target's DEF.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Finding the Calling", + "desc": "Grants an additional <NumGreen>8</> Ultimate Energy after successfully casting Appraise and Engrave.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Anomalies Record", + "desc": "Increases Divide by Zero's Crit Chance by <NumGreen>50%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Undecided Factors", + "desc": "Every <NumGreen>1</> point of Zero's Base ATK increases Ultimate: Divide by Zero damage by <NumGreen>0.1%</>, up to a maximum of <NumGreen>25%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Theopneustos", + "desc": "Increases Zero's ATK by <NumGreen>10%</> for <NumGreen>20s</> when triggering Support Skill.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Deceptive Liberation", + "desc": "Increases Extra DMG Ratio of Appraise and Engrave to <NumGreen>300%</> of ATK.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Discern", + "desc": "Increases the skill level of Appraisal, Appraise and Engrave, and Divide by Zero by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Zero Display", + "desc": "Grants the team <NumGreen>12%</> ATK for <NumGreen>20s</> when Zero triggers any Cosmos Esper Cycle.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1051/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [], + "gift_reward": [], + "voices": { + "daily": [ + { + "name": "Character Ascension I", + "desc": "Feeling good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Learned a lot.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "There's still more to see in this world.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_ug_003" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Engrave!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Strike!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Mark!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Let's finish this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Fates splinter, and fracture!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Divided by zero.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "All set.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_containment_001" + }, + { + "name": "Containment II", + "desc": "Containment complete.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_containment_002" + }, + { + "name": "Nullification I", + "desc": "Commission complete.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_anomaly_002" + }, + { + "name": "Nullification II", + "desc": "Nicely done.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_anomaly_003" + }, + { + "name": "Unexpected Gains I", + "desc": "Keep it well.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Seems like luck is on my side today.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "The more, the merrier.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Hard work pays off.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "I don't have to report to the Security Office, do I?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "A pleasant surprise.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Hang in there.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_hp_001" + }, + { + "name": "Low Health II", + "desc": "It's not over yet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_hp_002" + }, + { + "name": "Low Health III", + "desc": "Focus! It's not time to give up yet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_hp_003" + }, + { + "name": "Heal I", + "desc": "Thanks for the support.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_fh_001" + }, + { + "name": "Heal II", + "desc": "Feeling much better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_fh_002" + }, + { + "name": "Down I", + "desc": "The Nexus… I couldn't see it…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_dead_001" + }, + { + "name": "Down II", + "desc": "Sorry, I couldn't…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_dead_002" + }, + { + "name": "Down III", + "desc": "The truth… is not yet…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_dead_003" + }, + { + "name": "Takedown I", + "desc": "No big deal.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_kill_001" + }, + { + "name": "Takedown II", + "desc": "The Nexus, it's here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_kill_002" + }, + { + "name": "Damaged I", + "desc": "It's fine.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_struck_001" + }, + { + "name": "Damaged II", + "desc": "Be careful.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Watch the timing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "My mistake.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Got it, leave it to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_deploy_002" + }, + { + "name": "Deploy II", + "desc": "What is it this time?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "Appraise… then break!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Arc-light!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Begone!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_QTE_003" + }, + { + "name": "Glide I", + "desc": "Perfect angle.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_Fly_001" + }, + { + "name": "Glide II", + "desc": "The wind's just right.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_Fly_002" + }, + { + "name": "Switch I", + "desc": "Let me take over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_Switch_001" + }, + { + "name": "Switch II", + "desc": "Trust me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_Switch_002" + }, + { + "name": "Switch III", + "desc": "I will see through the Nexus.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_Switch_003" + }, + { + "name": "Special Switch - Mint", + "desc": "Leave it to me, Mint.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_SSC_001" + }, + { + "name": "Special Switch - Adler", + "desc": "Adler, I'll let you handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_SSC_ADL_001" + }, + { + "name": "Special Switch - Daffodill", + "desc": "Shift change.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_SSC_DFDE_001" + }, + { + "name": "Special Switch - Hotori", + "desc": "Shopkeeper, you have a customer.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_SSC_XUN_001" + }, + { + "name": "Special Switch - Nanally", + "desc": "Boss, it's your turn.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_SSC_NNL_001" + }, + { + "name": "Special Switch - Edgar", + "desc": "Take care.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_SSC_ADJ_001" + }, + { + "name": "Special Switch - Sakiri", + "desc": "Make sure Kiroumaru doesn't starve.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_SSC_ZW_001" + }, + { + "name": "Teammate Down - Hotori", + "desc": "Your wine… Drink it later.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_TeammateDown_001" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "I won't let you down.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_TeammateDown_002" + }, + { + "name": "Teammate Down - Adler", + "desc": "Eibon will never give up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_TeammateDown_003" + }, + { + "name": "Teammate Down - Sakiri", + "desc": "Let's go home after this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_TeammateDown_004" + }, + { + "name": "Teammate Down - Nanally", + "desc": "The Coluccis still have me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_TeammateDown_005" + }, + { + "name": "Teammate Down - Edgar", + "desc": "Don't worry. I'll take over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_TeammateDown_006" + }, + { + "name": "Teammate Down - Mint", + "desc": "Mint, take a break.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_TeammateDown_007" + }, + { + "name": "Parry I", + "desc": "Perfect timing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_Parry_001" + }, + { + "name": "Parry II", + "desc": "Now is the time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Feeling good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Hmm, not too difficult.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/ZERO/Play_Vo_Char_ZERO_F_DodgeCombo_002" + } + ] + } + }, + { + "id": "1052", + "name": "Hotori", + "description": "The Boss of Eibon, who doesn't seem to be very sober.", + "element": [ + { + "element_id": "Cosmos", + "name": "Cosmos" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_013", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/player_013x100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_013_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_xun", + "tags": { + "char_tags": [ + { + "name": "Buff", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_fuzhu01" + }, + { + "name": "Burst DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_baofa" + }, + { + "name": "DMG Boost", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zengyi" + } + ], + "arcs_tags": { + "type_id": "1", + "name": "Solid", + "icon": "/Game/UI/UI/player/YH_UI_icon_solid" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1052_nighty", + "characterId": "1052", + "name": "Recreational Courtyard", + "desc": "Hotori's loungewear. Comfortable and lightweight—when lying around the house, comfort is paramount.\r\n\"Soft birdsong in the morning.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_013_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_013_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_013_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_xun2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_xun2", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1052_0", + "characterId": "1052", + "name": "Under the Bright Moon", + "desc": "Rumored to be a custom outfit specially designed for Hotori by a famous designer. Its value could open ten more Eibons. \r\n\"Under the bright moon, orchids weep in silence, mist drifts endlessly.\"", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_013", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_013_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_xun", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_xun", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1052_1", + "characterId": "1052", + "name": "Priceless Orchid", + "desc": "A high-end Ghost Orchid–themed custom outfit that produces striking results in studio shoots.\r\nBut it would only have been within reach when Eibon first opened and funds were still plentiful.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_052_3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_052_3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_052_3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_xun3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_xun3", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1330, + 1436, + 1543, + 1649, + 1756, + 1862, + 1968, + 2075, + 2181, + 2288, + 2394, + 2500, + 2607, + 2713, + 2820, + 2926, + 3032, + 3139, + 3245, + 3352, + 3458, + 3564, + 3671, + 3777, + 3884, + 3990, + 4096, + 4203, + 4309, + 4416, + 4522, + 4628, + 4735, + 4841, + 4948, + 5054, + 5160, + 5267, + 5373, + 5480, + 5586, + 5692, + 5799, + 5905, + 6012, + 6118, + 6224, + 6331, + 6437, + 6544, + 6650, + 6756, + 6863, + 6969, + 7076, + 7182, + 7288, + 7395, + 7501, + 7608, + 7714, + 7820, + 7927, + 8033, + 8140, + 8246, + 8352, + 8459, + 8565, + 8672, + 8778, + 8884, + 8991, + 9097, + 9204, + 9310, + 9416, + 9523, + 9629, + 9736 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 82, + 86, + 90, + 94, + 98, + 103, + 107, + 111, + 115, + 119, + 123, + 127, + 131, + 135, + 139, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 185, + 189, + 193, + 197, + 201, + 205, + 209, + 213, + 217, + 221, + 226, + 230, + 234, + 238, + 242, + 246, + 250, + 254, + 258, + 262, + 267, + 271, + 275, + 279, + 283, + 287, + 291, + 295, + 299, + 303, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 349, + 353, + 357, + 361, + 365, + 369, + 373, + 377, + 381, + 385, + 390, + 394, + 398, + 402, + 406 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 70, + 76, + 81, + 87, + 92, + 98, + 104, + 109, + 115, + 120, + 126, + 132, + 137, + 143, + 148, + 154, + 160, + 165, + 171, + 176, + 182, + 188, + 193, + 199, + 204, + 210, + 216, + 221, + 227, + 232, + 238, + 244, + 249, + 255, + 260, + 266, + 272, + 277, + 283, + 288, + 294, + 300, + 305, + 311, + 316, + 322, + 328, + 333, + 339, + 344, + 350, + 356, + 361, + 367, + 372, + 378, + 384, + 389, + 395, + 400, + 406, + 412, + 417, + 423, + 428, + 434, + 440, + 445, + 451, + 456, + 462, + 468, + 473, + 479, + 484, + 490, + 496, + 501, + 507, + 512 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_01", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": " ", + "description": " ", + "birthday": "December 20", + "homePlace": "Eibon Antique Shop", + "abilityName": "\"Duino Elegies\"", + "introduction": "The Boss of Eibon, who doesn't seem to be very sober.", + "voiceChinese": "杜晴晴", + "voiceEnglish": "Lindsay Sheppard", + "voiceJapanese": "伊藤静", + "voiceKorean": "이지현" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "The most unreliable adult (whose job, according to Sakiri, is to get completely wasted every day), the mysterious boss that Nanally admires, and the enigmatic boss for everyone else in Eibon.\nRight now, she's examining a frog-shaped cosmetic device.\n\n\"What excellent taste you have, dear customer! You picked the most valuable treasure from my entire collection straight away! Surely you've heard the legend of the 'Angel's Kiss'? That's right! The holy grail of skincare that makes you radiant and supple, the 'Pale Sacred Dew' long-sought after by elite nobles for centuries, is now resting in your very hands! If it weren't for… my urgent need for funds, forcing me to part with this treasure… Well, 50,000 Fons! And this treasure could be yours!\"\nHotori gave a dramatic gesture in a bold stance, suggesting she won't budge on the price. The merchant, who was speaking in flattering tones, made a pained expression and hesitated.\n\"Customer, you really don't hold back! In that case, 5,000 Fons. Let's be friends!\"\n\nWhenever she thinks she's getting a bargain, or whenever she believes she's found some treasure, she can never hide the smile appearing on her face as she slams the table and shouts \"Deal!\"\nPerhaps within half a day she'll discover she's been scammed, then become furious and drown her sorrows in alcohol.\nOr perhaps when she receives the bill at the end of the month, she'll furrow her brow with bitter regret.\n\nBut at least the moment of owning a brand new \"treasure\" is undoubtedly worth celebrating.\n\"As for the future… well, we'll deal with that when the future comes!\"" + }, + { + "name": "Live for Today", + "desc": "\"'All-you-can-drink' means you pay a fixed price based on the number of people in your group, and until you leave and settle the bill, you can take unlimited beverages from the drink area… that's what their menu says.\"\n\"Including alcohol? That's pretty generous! Everyone should really enjoy themselves today, and you kids better go grab the most expensive juice they have!\"\n\"…Restaurants definitely lose money when they run into shameless customers like Hotori who can really hold their liquor, right?\"\nOf course, this business model has countermeasures for dealing with customers who go overboard: besides the inventory limits for each type of beverage, there's also the time restriction… but when it comes to Hotori, that just happens to not be a problem.\nHowever, based on what happened later, when Hotori kept ordering table after table of appetizers to maximize the value of the all-you-can-drink deal… This rare dining-out experience still ended up with expenses far exceeding the budget." + }, + { + "name": "Fated Old Treasures", + "desc": "There are currently no late-night chat sessions happening between antiques in Eibon… probably. After all, not many of them can talk. This doesn't stop the Temporal Globe from rolling around when bored, surveying the other items in the shop and letting its imagination run wild.\n(Hey, newcomer, where are you from?)\n(I used to sleep in a dirty street until someone took a liking to me and bought me. The cost of my freedom was 998 Fons. Does that put me at the bottom of the hierarchy in this shop?)\n(There are plenty who don't even know their own worth. Like me, I stayed in a dark, cramped place for ages and ages… so long that the little crack I had grew bigger and successfully merged with the original carved patterns… until… light came in. That woman appeared, gently lifted me out, and smiled.)\n(Was it one of those scheming, triumphant smirks?)\n(No. It was a completely confident smile, like she was certain I'd be there. But for some reason, that smile made her seem somewhat… regretful?)\n(Haha, I bet she dusted off the dirt only to discover you weren't in as good condition as she imagined!)\nThe discussion that never happened and never will happen grows more animated, accompanied by the blinking sounds of the Temporal Globe. The Mirror of Anam simply reflects peacefully, capturing all the stillness and the passage of time across its surface." + }, + { + "name": "Enamel Pocket Watch", + "desc": "An exquisite pocket watch crafted with cloisonné enamel technique.\nAbove the ghost orchid pattern, an orange-red gemstone is set, like eyes that have grown gentle after fading through long years… Yet the watch face still retains bright and delicate colors, showing no signs of age.\nIt's neither an Anomaly nor an Esper creation. Though beautifully crafted, it's truly just an ordinary pocket watch without any special powers.\nHotori never discusses its actual value. Perhaps it's some precious treasure she keeps hidden away? Something she wouldn't sell for money unless Eibon was on the verge of bankruptcy… her ultimate backup insurance, maybe?" + }, + { + "name": "Best Time for Snow Viewing", + "desc": "The Tsukinoki family's courtyard pairs perfectly with fallen snow. The snow gives it an added sense of historical elegance, like covering displayed antiques with a blanket of dust—except this dust is pure white and pristine.\nUnfortunately, year after year, such scenery passes by in the blink of an eye. Hotori has always felt this way.\nEven at a young age, she was already deeply melancholic about the changing seasons and passing years. This was because she feared that the ever-changing outside world would bring unwanted changes to this reclusive family. How wonderful it would be if everything could freeze like a still life at its most perfect moment.\n\"The best time to appreciate snow is when it's melting. For that… you need to be in motion, don't you?\"\nMany years later, when she truly could make snowy scenes stand still, one early spring she encountered—not by chance—an old guest who had once stayed at their family estate for a time. Now an elderly man in his twilight years, he took a sip from his wine cup after every sentence during their casual conversation.\nHotori realized this would be their final meeting. She poured the wine and waited with rare solemnity to hear his next heartfelt words.\n\"What's most precious isn't what remains unchanged and eternal. It's the things that break… the things that are breaking right now.\"" + } + ], + "melee": [ + { + "id": "GA_Jin_Melee", + "name": "Misty Moon Style", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Misty Moon Style</>", + "<Title>Basic Attack: Non-Closed Timepiece</>", + "<Title>Basic Attack: Rippling Waves</>", + "<Title>Basic Attack: Crescent</>", + "<Title>Critical Riposte: Half Moment</>" + ], + "desc": [ + "Wields her weapon and performs up to <NumGreen>5</> consecutive attacks, dealing <Guang>Cosmos DMG</>.", + "Displays a <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> when Hotori is switched in. Rotates its pointer slowly clockwise over time, accumulating energy. Caps the energy the <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> can accumulate at 120.", + "Hold Basic Attack in combat to trigger. Gracefully dashes forward and attacks, dealing <NumGreen>4</> instances of <Guang>Cosmos DMG</> to an area.", + "Wields the weapon mid-air and plunges, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Misty Moon Style after a Critical Dodge. Raises the umbrella to counterattack opponents instantly, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> and reducing Break." + ], + "desc_short": [ + "Deals <Guang>Cosmos DMG</>.", + "Displays a <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> when Hotori is switched in, accumulating energy over time.", + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</>.", + "Deals <Guang>Cosmos DMG</>." + ], + "context": "<Italic>\"Finally, someone clueless comes along who actually wants to buy something from the shop, but if it wasn't for Hotori refusing to budge, hmph… this month's sales wouldn't be a big fat zero.\"</>\r\n<Italic>\"That little brat, didn't you see what kind of price he was trying to haggle? He's treating our Eibon like we're some charity case! I was being nice not calling Daff over to rough him up!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Jin_Melee", + "additional_desc": [ + { + "name": "Non-Closed Timepiece", + "desc": "Hotori's special energy bar for casting Time Skills." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Jin_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%*2+{2}%", + "values": [ + [ + 35, + 38, + 41, + 44, + 48, + 51, + 56, + 60, + 65, + 70, + 76, + 82, + 88 + ], + [ + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 10, + 11 + ], + [ + 72, + 78, + 84, + 91, + 98, + 106, + 114, + 123, + 133, + 144, + 155, + 168, + 181 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_Melee4_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%*5", + "values": [ + [ + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_Melee5_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%*2+{1}%", + "values": [ + [ + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 33, + 35 + ], + [ + 66, + 71, + 77, + 83, + 90, + 97, + 105, + 114, + 123, + 133, + 143, + 155, + 167 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_Melee7_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61 + ], + [ + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97, + 105, + 113 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37 + ] + ] + }, + { + "name": "Energy Cap", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + }, + { + "name": "Energy Recovery Per Second", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_Branch1_Damage", + "name": "Branch DMG Ratio", + "icon": "", + "value_name": "{0}% *4", + "values": [ + [ + 24, + 25, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 51, + 56, + 60 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 48, + 51, + 56, + 60, + 65, + 70, + 76, + 82, + 88, + 96, + 103, + 111, + 120 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 158, + 170, + 184, + 199, + 215, + 232, + 250, + 270, + 292, + 315, + 341, + 368, + 397 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Jin_Skill", + "name": "Present Replay", + "type_name": "Redirect Skill", + "desc": "Requires no cooldown for Present Replay.\r\nAllows Hotori to spend <NumGreen>60</> <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> energy to cast Present Replay when energy is greater than <NumGreen>60</>. Deals <NumGreen>7</> instances of <Guang>Cosmos DMG</> to an area. Records Support Skills and Redirect Skills used by allies for the next <NumGreen>5</>s, appreciating up to <NumGreen>3</> timings per use, with each character recorded at most once.\r\nRewinds the Non-Closed Timepiece pointer continuously during use. Stops recording after the pointer rewinds a certain amount, and continues rewinding a fixed amount if recording completes early. Clears records when entering or leaving battle. Overwrites existing records when using Present Replay again.", + "desc_short": "Casts Present Replay when <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> energy is greater than <NumGreen>60</>, dealing <Guang>Cosmos DMG</> and recording Support Skills and Redirect Skills used by allies for the next <NumGreen>5s</>.", + "context": "<Italic>Observe and Witness</>", + "icon": "/Game/UI/UI_Icon/Skill/Jin_Skill", + "additional_desc": [ + { + "name": "Non-Closed Timepiece", + "desc": "Hotori's special energy bar for casting Time Skills." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Jin_Skill3_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%*6+{1}%", + "values": [ + [ + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100 + ], + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Jin_UltraSkill", + "name": "World's Tide", + "type_name": "Ultimate", + "desc": "Has no cooldown or Ultimate Energy cost for World's Tide.\r\nAllows Hotori to unleash World's Tide when <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> energy is fully charged, dealing <NumGreen>10</> instances of <Guang>Cosmos DMG</> to an area. Draws a katana from the umbrella handle and changes attack mode. Slows surrounding time to near standstill for a period, disabling character switching. Cleanses any received time control debuffs and grants immunity to time control debuffs during Time Stop. Replays all attacks recorded by Present Replay <NumGreen>1</> time and clears the records if any exist.\r\nRewinds the <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> pointer continuously during Time Stop. Builds combo stacks with Hotori's katana attacks, increasing damage per hit. Deals Finisher DMG when combo stacks reach <NumGreen>10</>. Ends time stop when the pointer rewinds completely or when Finisher DMG is dealt.", + "desc_short": "Casts World's Tide when <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> energy is fully charged, dealing <Guang>Cosmos DMG</>, drawing the katana, and slowing surrounding time to near standstill. Builds combo stacks with katana attacks, and triggers <Guang>Cosmos DMG</> to end Time Stop when reaching <NumGreen>10</> stacks.", + "context": "<Italic>Then—proceed toward the predetermined future.</>", + "icon": "/Game/UI/UI_Icon/Skill/Jin_UltraSkillA", + "additional_desc": [ + { + "name": "Non-Closed Timepiece", + "desc": "Hotori's special energy bar for casting Time Skills." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Jin_UltraSkill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%*6+{1}%+{2}%+{3}%*2", + "values": [ + [ + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42 + ], + [ + 130, + 140, + 152, + 164, + 177, + 191, + 206, + 223, + 241, + 260, + 281, + 303, + 328 + ], + [ + 44, + 47, + 51, + 55, + 60, + 65, + 70, + 75, + 82, + 88, + 95, + 103, + 111 + ], + [ + 261, + 282, + 305, + 329, + 355, + 384, + 415, + 448, + 484, + 522, + 564, + 610, + 658 + ] + ] + }, + { + "name": "Time Stop Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_UltraSkillMelee1_Damage", + "name": "1st Katana Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 38, + 41, + 44, + 48, + 51, + 56, + 60, + 65, + 70, + 76, + 82, + 88, + 95 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_UltraSkillMelee2_Damage", + "name": "2nd Katana Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 58 + ], + [ + 63, + 68, + 74, + 80, + 86, + 93, + 101, + 109, + 117, + 127, + 137, + 148, + 160 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_UltraSkillMelee3_Damage", + "name": "3rd Katana Instance Ratio", + "icon": "", + "value_name": "{0}%*3+{1}%", + "values": [ + [ + 9, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 21, + 23 + ], + [ + 44, + 48, + 51, + 56, + 60, + 65, + 70, + 76, + 82, + 89, + 96, + 103, + 112 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_UltraSkillMelee4_Damage", + "name": "4th Katana Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%+{3}%", + "values": [ + [ + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59, + 64 + ], + [ + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 55, + 59, + 64, + 69, + 74 + ], + [ + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 54, + 59, + 64 + ], + [ + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_UltraSkillMelee5_Damage", + "name": "5th Katana Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 8, + 9, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 21 + ], + [ + 221, + 238, + 257, + 278, + 300, + 324, + 350, + 378, + 409, + 442, + 477, + 515, + 556 + ] + ] + }, + { + "id_stats": "GE_Player_Jin_UltraSkillMelee6_Damage", + "name": "Finisher DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 300, + 324, + 349, + 377, + 408, + 440, + 476, + 514, + 555, + 599, + 647, + 699, + 755 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Jin_QTE", + "name": "Shopkeeper's Authority", + "type_name": "Support Skill", + "desc": "Time to teach these rude guests some manners. Throws the umbrella, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> to an area.", + "desc_short": "Deals <Guang>Cosmos DMG</>.", + "context": "<Italic>For Hotori, this is merely a small display of her abilities, but difficult customers who threaten to complain will learn exactly why this humble little shop dares to impose such strict terms.</>", + "icon": "/Game/UI/UI_Icon/Skill/Jin_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Jin_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Jin_Passive_1", + "name": "Ghost Orchid Crest", + "type_name": "Passive Skill", + "desc": "<TextHLT>Blossom Enhancement</>: Prevents Vita Bud attacks from pausing during Time Stop.", + "context": "<Italic>At least when this proprietress, who can usually chatter on endlessly about every penny, finally quiets down and sits peacefully sipping wine while admiring the moon, you can still notice… she is an elegant and graceful person.</>", + "icon": "/Game/UI/UI_Icon/Skill/Jin_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Jin_Passive_2", + "name": "All Treasures Under Heaven", + "type_name": "Passive Skill", + "desc": "Increases World's Tide's Finisher DMG Ratio by <NumGreen>100%</>.", + "context": "<Italic>Cheers! Celebrate! Let's… let's celebrate again! My treasures… my precious treasures… they're all mine now! Deal… deal! Hehehe… hic… guard them all… for me… zzZ…</>", + "icon": "/Game/UI/UI_Icon/Skill/Jin_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Jin_Passive_3", + "name": "Frozen Snow Ritual", + "type_name": "Character Traits", + "desc": "Let the snow fall slower still. Activates time manipulation when Hotori is outside of battle and the <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> has accumulated energy greater than <NumGreen>0</>. Slows the flow of time while holding Basic Attack, causing the surrounding time to approach a standstill. Removes any received time control debuffs and grants immunity to time control debuffs during Time Stop.\r\nRewinds the <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> pointer continuously during Time Stop. Prevents Hotori from using other time-affecting skills. Ends Time Stop when the pointer fully rewinds, holding Basic Attack, entering battle, switching scenes, or performing other actions.", + "desc_short": "Slows the surrounding time to near standstill when Hotori is outside of battle and the <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> has accumulated energy greater than 0 while holding Basic Attack.", + "context": "<Italic>Walk alone outside of time, and see the truth of time.</>", + "icon": "/Game/UI/UI_Icon/Skill/Jin_Pas3", + "additional_desc": [ + { + "name": "Non-Closed Timepiece", + "desc": "Hotori's special energy bar for casting Time Skills." + } + ], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_jin_02", + "name": "Treasure Hunt", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_xbsk", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases auction items by <Green2>1</> extra per auction." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Grants <Green2>1</> additional attempt to refresh unpurchased auction items per auction." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Increases auction items by <Green2>2</> extra per auction." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Sets the number of attempts to refresh unpurchased auction items to <Green2>2</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Increases auction items by <Green2>3</> extra per auction." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Flourish", + "desc": "Increases Hotori's damage during Time Stop by <NumGreen>12%</> for each recorded Support Skill or Redirect Skill.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1052_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Distant Memories", + "desc": "Increases Hotori's damage by <NumGreen>20%</> during Time Stop.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1052_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Momentary Gaze", + "desc": "Recovers the energy spent on Present Replay after using it and completing the recording. Triggers at most once every <NumGreen>60s</>. Interrupts energy restoration if energy is spent during the recovery process.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1052_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Scattered Relics", + "desc": "Grants an additional <NumGreen>10</> energy to the <hot textstyle=\"TextEXPL\" param=\"nouns&JinTime\">Non-Closed Timepiece</> for every <NumGreen>1</> target defeated by the Team while the pointer is not rewinding, up to <NumGreen>3</> times. Resets the count when casting World's Tide.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1052_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Non-Closed Timepiece", + "desc": "Hotori's special energy bar for casting Time Skills." + } + ] + }, + { + "name": "All-Seeing", + "desc": "When Hotori is deployed, if there is only <NumGreen>1</> enemy on the field, the entire team's damage against that target is increased by <NumGreen>15%</>. This effect is lost when Hotori is down.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1052_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Time Takes Away", + "desc": "Hotori ignores <NumGreen>30%</> of the target's DEF during Time Stop.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1052_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Eternity Shattered", + "desc": "Increases the skill level of Misty Moon Style, Present Replay, and World's Tide by 1.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "The Ultimate Treasure of Clear Understanding", + "desc": "Grants all team members 30% ATK while Hotori is on the team and alive.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1052/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "DamageUpCosmosBase", + "name": "Cosmos DMG Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DamageUp_white", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_038", + "amount": 100 + }, + { + "item_id": "Food_098", + "amount": 100 + }, + { + "item_id": "Food_103", + "amount": 100 + }, + { + "item_id": "Flower0000", + "amount": 200 + }, + { + "item_id": "Furniture_FlowerPot_001", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_002", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "SpecialGift_1052", + "amount": 1200 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1029" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1029" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial", + "Furniture_draw_0034_KV_solo" + ], + "amount": [ + 20, + 5, + 1 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Likeprice_1029_0", + "Friendship_3_1029" + ], + "amount": [ + 20, + 20000, + 1, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1029" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1029", + "Friendship_4_1029" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1029" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1029", + "Fashion_character_1052_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "A new face… A guest…? …Wait… isn't that my Precious?! Ugh… I'm so dizzy I can't even tell… I need a hangover cure…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_meet_001" + }, + { + "name": "Chat: Reputation", + "desc": "When you're out on a job, make sure to protect our shop's rep. Cough… And for the record, I couldn't care less about the low ratings for Eibon on Hyelp. Numbers on a screen, nothing more! Real gratitude from real customers is what matters!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_chat_001" + }, + { + "name": "Chat: Fons", + "desc": "Fons, Fons, Fons… Who came up with that name? The more I say it, the better it sounds… \"Fons\"… what a lovely word.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_chat_002" + }, + { + "name": "Chat: Treasure Hunt", + "desc": "Look after the shop for me, I'm heading to the flea market at Bridge Crossings… What for? Heh, treasure hunting, of course.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_chat_003" + }, + { + "name": "Sunny", + "desc": "I'm not like those kids with endless energy to burn, running around every day. I'll wait for a nice, shady day before I go out again.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_weather_001" + }, + { + "name": "Rainy", + "desc": "Listening to this rain outside… I just had a great idea… Our yard feels a bit empty, doesn't it? What about a koi pond?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_weather_002" + }, + { + "name": "Cold", + "desc": "In this city, even the coldest season doesn't feel too bad… and snow's rare. Honestly, I kinda miss home sometimes.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_weather_003" + }, + { + "name": "Hot", + "desc": "Ugh, it's boiling out here… Let me know before you grab the chilled sake, okay? Otherwise it'll warm up in no time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Who is it?! That brat or Taygedo?! Clattering around downstairs at night… They're in for a lesson today.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Ugh… this is the drowsiest time of day. I'm gonna rest somewhere cool.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Today's revenue is… how is it in the red again?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_greet_003" + }, + { + "name": "Good Night", + "desc": "Great drink… Hmph, \"The glass is already empty\"? Yeah, I noticed. Just look at this moonlight. It's free. And hey, it offers unlimited refill, right? Fill it up again, to the brim.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_greet_004" + }, + { + "name": "Hobbies", + "desc": "These days, what hobby doesn't cost money? Honestly, chatting with Daff is more fun. Sip a little, tease her a bit, enjoy the reaction… now that's good entertainment.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_hobby_001" + }, + { + "name": "Worries", + "desc": "Why's the utility bill this high… Edgar, use that clever little brain of yours and double-check this number… What!? Commercial rates?! Tch… all these years and I'm only finding this out now…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_vexation_001" + }, + { + "name": "Topic: Anomaly - \"Melancholic Dandy\"", + "desc": "If you're bored, go chat with that painting. Try to be natural and say something nice. I'm tired of hearing it moan about how its face is cracking. Last time I passed by, it even asked for skincare cream to dab between the brushstrokes! Absurd!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_talk_001" + }, + { + "name": "Topic: Transaction Guidelines", + "desc": "There are a few lines in Eibon's terms of trading service that aren't exactly the best things to let customers know… Yeah, I know. When I first wrote them, I just jotted down what I felt… Still, trade's all about honesty, right? If anything sounds off, just cross it out before showing the client. No need to reprint. Printing shops these days are daylight robbery… Shops honest as Eibon aren't very likely to survive in this evil world…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_talk_002" + }, + { + "name": "Topic: Commission Agreement", + "desc": "Hey, Precious, come help me out. I'm thinking of adding a line to our commission form… something like, \"A 50% service fee applies if you request anomaly appraisal by our in-house Appraiser.\" What do you think?… What's with that head shake? Fine—80%! Deal!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "\"Time\" isn't just a path. It's also… a point of view.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_self_001" + }, + { + "name": "About Myself: Judgment", + "desc": "Through the lens of \"Time,\" I've appraised countless rare artifacts. You gotta have that kind of eye to run an antique shop… What? My judgments have been off lately? Hmm… Maybe it's 'cause Precious here is just too dependable and I've been letting my guard down too much…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_self_002" + }, + { + "name": "About Myself: Proprietress", + "desc": "What do you mean I'm a hands-off boss? Which brat told you that? I've always handled Eibon's inventory. And besides, Adler's managing the operations. My job is to make decisions for the business! That's where leadership is.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_self_003" + }, + { + "name": "About Adler", + "desc": "Look, look, look—see those fine lines around Adler's eyes? Popped up like mushrooms after rain since we opened. The little troublemakers have no idea how much we adults stress over them.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_001" + }, + { + "name": "About Daffodill", + "desc": "Daff doesn't drink much on her own, but if you say cheers and invite her to a toast, she'll down one after another. I told her, after toasting, you'll have to drink at least half a glass—it's basic etiquette. Heh heh… and then… who knows what fun you'll see? Her tolerance isn't what she thinks it is.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_002" + }, + { + "name": "About Sakiri", + "desc": "Sakiri's a clever one. She's got potential to be a great little shopkeeper. But this habit of undercutting me? I'll need to straighten that out properly someday…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_003" + }, + { + "name": "About Taygedo", + "desc": "When I first found Taygedo, I was thrilled. Thought I could save on buying a TV. But now the kids hog it every day, watching anime and what not… Sigh. One day, when I strike it rich, I'm getting a screen as big as a wall…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_004" + }, + { + "name": "About Nanally", + "desc": "Nanally! What did you break this time?! Why'd the compensation notice show up at our door without warning?! …Where'd that little rascal go… Tch, Adler! Listen, one month—argh, maybe one week! No eggrolls for her. Make her remember this time… and don't sneak her any!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_005" + }, + { + "name": "About Edgar", + "desc": "Edgar's such a quiet, well-behaved kid. Loves books, doesn't ask for much. How did his parents raise him so well? I need to take notes…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_006" + }, + { + "name": "About Alphard", + "desc": "Keep an eye on our dear Director. Don't let her catch you slipping. I don't want to get dragged into another \"parent-teacher meeting.\" Every time she pulls that cold face, even the premium guest couch starts feeling stiff… Honestly, it's probably less comfy than the ratty old one at home.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_007" + }, + { + "name": "About Eibon Antique Shop", + "desc": "I should've knew this location was no good. Cheap rent led me into a dead end—business is a bust! So why still choose to open Eibon here? Heh, because there's no such thing as \"should've known.\" It's fate.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_about_008" + }, + { + "name": "Character Ascension I", + "desc": "I'd say… the universe might just start working in this place's favor.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Gotta spend when it counts. Adler, bring me that bottle I've been saving!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "\"Now\" might just be the most memorable moment of all… who knows?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Ooh! Where did you get this? You have great taste! I like it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_gift_001" + }, + { + "name": "Gift Received II", + "desc": "This is the real deal! We got another precious one now!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Precious, you're trying really hard… Appreciate it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Well, we're family, right? Don't be a stranger!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "A little show-off.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Let me take a closer look.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Haven't gone rusty, have I?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_skill_003" + }, + { + "name": "Ultimate I", + "desc": "It'll only be a moment.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "The tides of the world, drawn to this place.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "And thus, time flows on.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_aoe_UI_003" + }, + { + "name": "Ultimate IV", + "desc": "Arriving at this very moment.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_aoe_UI_004" + }, + { + "name": "Ultimate V", + "desc": "The moon has set.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_aoe_UI_005" + }, + { + "name": "Ultimate VI", + "desc": "Heh…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_aoe_UI_006" + }, + { + "name": "Containment I", + "desc": "Let's see… what's it worth?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_containment_001" + }, + { + "name": "Containment II", + "desc": "Hmm… decent condition.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_containment_002" + }, + { + "name": "Nullification I", + "desc": "That should be good for a while.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Another complete mission.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Here comes the money!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "If you ask me, that one's the real deal…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Ignoring a good deal? That's just rude.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Something that good just fell into your lap?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Who cares if it's worth anything. Finders keepers!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Pretty good luck today!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Everything has its time and place…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_hp_001" + }, + { + "name": "Low Health II", + "desc": "Annoying. Price is still too low.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_hp_002" + }, + { + "name": "Low Health III", + "desc": "Drink something to warm yourself up a bit…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_hp_003" + }, + { + "name": "Heal I", + "desc": "Like fine wine.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_fh_001" + }, + { + "name": "Heal II", + "desc": "Mmm… that's the spot.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_fh_002" + }, + { + "name": "Down I", + "desc": "Shame… timing was off…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_dead_001" + }, + { + "name": "Down II", + "desc": "Here's… my moment…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_dead_002" + }, + { + "name": "Down III", + "desc": "Heh… I can see the old days…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_dead_003" + }, + { + "name": "Takedown I", + "desc": "Behaving now?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_kill_001" + }, + { + "name": "Takedown II", + "desc": "See you around.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_kill_002" + }, + { + "name": "Damaged I", + "desc": "Tsk.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_struck_001" + }, + { + "name": "Damaged II", + "desc": "Tch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Not bad at all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "What a drag.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Time to win back some reputation… and stretch a bit too.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_deploy_002" + }, + { + "name": "Deploy II", + "desc": "Can't let our folks at Eibon get pushed around out there.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_deploy_001" + }, + { + "name": "Entry Attack I", + "desc": "How rude.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "How rude!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Show them out.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_QTE_003" + }, + { + "name": "Glide I", + "desc": "Alright, let's go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_Fly_001" + }, + { + "name": "Glide II", + "desc": "Whew!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_Fly_002" + }, + { + "name": "Switch I", + "desc": "Here I am!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_Switch_001" + }, + { + "name": "Switch II", + "desc": "Did you need something?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_Switch_002" + }, + { + "name": "Switch III", + "desc": "Don't worry, we have plenty of time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_Switch_003" + }, + { + "name": "Special Switch I - Adler", + "desc": "You worked hard.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_001" + }, + { + "name": "Special Switch II - Adler", + "desc": "Help me keep an eye on the little ones.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_002" + }, + { + "name": "Special Switch I - Sakiri", + "desc": "Make sure to keep an eye on Kiroumaru!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_003" + }, + { + "name": "Special Switch II - Sakiri", + "desc": "So noisy, you troublemaker.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_004" + }, + { + "name": "Special Switch I - Nanally", + "desc": "What a handful!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_005" + }, + { + "name": "Special Switch II - Nanally", + "desc": "Another mess to clean up?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_006" + }, + { + "name": "Special Switch I - Daffodill", + "desc": "Just stay behind.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_007" + }, + { + "name": "Special Switch II - Daffodill", + "desc": "Let me give you a hand.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_008" + }, + { + "name": "Special Switch I - Edgar", + "desc": "Let's wrap this up soon.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_009" + }, + { + "name": "Special Switch II - Edgar", + "desc": "Don't push yourself too hard.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_010" + }, + { + "name": "Special Switch I - Zero", + "desc": "Don't hurt my precious!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_011" + }, + { + "name": "Special Switch II - Zero", + "desc": "Perfect timing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_SSC_012" + }, + { + "name": "Teammate Down - Adler", + "desc": "Nothing stays the same forever…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_TeammateDown_001" + }, + { + "name": "Teammate Down - Sakiri", + "desc": "See what happens when you try to act tough?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_TeammateDown_002" + }, + { + "name": "Teammate Down - Nanally", + "desc": "You still have a long way to go.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_TeammateDown_003" + }, + { + "name": "Teammate Down - Daffodill", + "desc": "Sleep now, my little Daff…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_TeammateDown_004" + }, + { + "name": "Teammate Down - Edgar", + "desc": "Good kid, you did your best.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_TeammateDown_005" + }, + { + "name": "Teammate Down - Zero", + "desc": "Precious… I will avenge you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_TeammateDown_006" + }, + { + "name": "Parry I", + "desc": "Still not quite enough power there!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_Parry_001" + }, + { + "name": "Parry II", + "desc": "The supple touch prevails over force.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "I saw through those little tricks ages ago!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "You honestly need more practice.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC009/Play_Vo_Char_NPC009_DodgeCombo_002" + } + ] + } + }, + { + "id": "1054", + "name": "Daffodill", + "description": "A ruthless bodyguard of few words, working exclusively for Eibon.", + "element": [ + { + "element_id": "Chaos", + "name": "Chaos" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_005", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_005_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_005_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_dafudier", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Burst DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_baofa" + }, + { + "name": "Break Boost", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_QingXiantisheng" + } + ], + "arcs_tags": { + "type_id": "2", + "name": "Liquid", + "icon": "/Game/UI/UI/player/YH_UI_icon_liquid" + } + }, + "reaction": [ + { + "name": "Nova", + "desc": "Inflicts Nova on the target for <NumGreen>5s</> after triggering Esper Cycle. When the effect ends, the target takes massive <bule>Mental Damage</>." + }, + { + "name": "Scorch", + "desc": "Upon triggering Esper Cycle, inflicts Scorch on the target for <NumGreen>15s</>, dealing DoT." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1054_0", + "characterId": "1054", + "name": "Self in the Mirror", + "desc": "Dark clothing designed for concealment. Daffodill spends an hour each morning making sure every piece of fabric is perfectly in place.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_005", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_005_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_dafudier", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_dafudier", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1054_1", + "characterId": "1054", + "name": "City Glimmer", + "desc": "Hotori personally purchased this outfit to brighten up Daff's rather dull wardrobe. In response, Daffodill bought five different eye patches just to match it.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_005_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_005_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_005_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_dafudier2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_dafudier2", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1054_2", + "characterId": "1054", + "name": "Self in the Mirror", + "desc": "Dark clothing designed for concealment. Daffodill spends an hour each morning making sure every piece of fabric is perfectly in place.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_005", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_005_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_dafudier", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_dafudier", + "sourceText": "", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1335, + 1442, + 1549, + 1655, + 1762, + 1869, + 1976, + 2083, + 2189, + 2296, + 2403, + 2510, + 2617, + 2723, + 2830, + 2937, + 3044, + 3151, + 3257, + 3364, + 3471, + 3578, + 3685, + 3791, + 3898, + 4005, + 4112, + 4219, + 4325, + 4432, + 4539, + 4646, + 4753, + 4859, + 4966, + 5073, + 5180, + 5287, + 5393, + 5500, + 5607, + 5714, + 5821, + 5927, + 6034, + 6141, + 6248, + 6355, + 6461, + 6568, + 6675, + 6782, + 6889, + 6995, + 7102, + 7209, + 7316, + 7423, + 7529, + 7636, + 7743, + 7850, + 7957, + 8063, + 8170, + 8277, + 8384, + 8491, + 8597, + 8704, + 8811, + 8918, + 9025, + 9131, + 9238, + 9345, + 9452, + 9559, + 9665, + 9772 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 81, + 85, + 89, + 93, + 97, + 101, + 105, + 109, + 113, + 117, + 122, + 126, + 130, + 134, + 138, + 142, + 146, + 150, + 154, + 158, + 162, + 166, + 170, + 174, + 178, + 182, + 186, + 190, + 194, + 198, + 203, + 207, + 211, + 215, + 219, + 223, + 227, + 231, + 235, + 239, + 243, + 247, + 251, + 255, + 259, + 263, + 267, + 271, + 275, + 279, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 365, + 369, + 373, + 377, + 381, + 385, + 389, + 393, + 397, + 401 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 72, + 78, + 84, + 89, + 95, + 101, + 107, + 112, + 118, + 124, + 130, + 135, + 141, + 147, + 153, + 158, + 164, + 170, + 176, + 181, + 187, + 193, + 199, + 204, + 210, + 216, + 222, + 228, + 233, + 239, + 245, + 251, + 256, + 262, + 268, + 274, + 279, + 285, + 291, + 297, + 302, + 308, + 314, + 320, + 325, + 331, + 337, + 343, + 348, + 354, + 360, + 366, + 372, + 377, + 383, + 389, + 395, + 400, + 406, + 412, + 418, + 423, + 429, + 435, + 441, + 446, + 452, + 458, + 464, + 469, + 475, + 481, + 487, + 492, + 498, + 504, + 510, + 516, + 521, + 527 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": " ", + "description": " ", + "birthday": "January 19", + "homePlace": "Eibon Antique Shop", + "abilityName": "Thousand Blades, Thousand Eyes", + "introduction": "A ruthless bodyguard of few words, working exclusively for Eibon.", + "voiceChinese": "陈彦亦", + "voiceEnglish": "Natalie Van Sistine", + "voiceJapanese": "大原さやか", + "voiceKorean": "이명호" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "The bodyguard at Eibon Antique Shop does not say much, always standing quietly beside everyone else. She seems to have a nickname, \"Daff,\" which Hotori occasionally calls her. Whenever Hotori calls her that, Daffodill looks away, her ears turning completely red. As for the others… if they want to be cut to pieces, they are welcome to try using that name.\n\nDaffodill owns many eyepatches. Though she wears them less now, she still keeps up her collecting habit. Nobody can tell the difference between those eyepatches, but she firmly believes in her taste. Leather ones, patterned ones, ones with especially neat stitching… she carefully sorts them by category and places them in her small collection box.\n\nDaffodill was not born with poor vision; rather, it was the price of her Esper Ability. At nineteen, cruel truth burst into her eyes like a kaleidoscope, and since then she could see through anomalies to perceive layers of essence across time and space. Sometimes, glimpsing the truth is not a good thing. She learned about her parents' cause of death, about her own wishful emotional attachments, about needing and being needed… and lost the faith she had relied on for survival. The red-cloaked hero in the picture book silently turned her blade toward Mother, toward that hateful, beating heart that had once falsely given her warmth. If the goddess of vengeance wanted to punish her for this… then so be it.\n\nDaff longed for a happy, beautiful place, and so accidentally embarked on a journey full of metaphors.\nSo then, what about the ending of the story?\nHer life until now was one monopolized by lies. It was a life in which no one needed her… there was no point in continuing. That was what Daffodill had been thinking when she met that slightly tipsy woman. The woman talked about a daffodil growing in the center of the lake, proud and aloof, seemingly impossible for anyone to pick. She naturally needed that flower too, but would not pick it.\nA strange woman and a strange flower. What reason did that daffodil have for growing alone there? It must depend on something. Surely it grew that way because it was rooted in others' need for it. When the wind rose, Daffodill heard a different sound of rustling leaves than before.\n\nWhy not follow the woman and seek answers in the life ahead?" + }, + { + "name": "The Woman in Red Gloves", + "desc": "She pushed the door open and went inside. The rust-red sea climbed up to her feet and dizziness soon followed, like staring into a kaleidoscope.\nAt that moment, a pair of hands wearing red gloves covered her eyes.\nMs. T, who happened to be visiting, witnessed the tragedy of her parents alongside her. In her heartbreak, she offered to adopt Daffodill as her daughter. The beautiful girl had lost both parents, and no other relatives would risk being implicated by taking in a child of misfortune… She had always been the one who was not needed. Only Ms. T reached out her hand to her, so she gratefully took her place by Ms. T's side." + }, + { + "name": "Mechanical March - I", + "desc": "The trials were cruel. Even though Daffodill was an exceptionally talented child, she still ended up covered in wounds.\nMadam T said that, compared to other children, Daffodill could feel pain closer to death itself, and on some level that brought her closer to her parents. The injuries she suffered were more valuable than anyone else's.\nBesides, Madam T needed her.\nDaffodill did not like pain, but Madam T's words gave her a reason to suffer. She forced herself to believe in Madam T and held her words as truth, devoutly throwing herself into the trials. Once she was ready, she became Madam T's blade, moving through various gray area missions." + }, + { + "name": "Mechanical March - II", + "desc": "\"Mother, are all charities like this? Like wolves in sheep's clothing from the stories?\"\n\"People have many sides. The brighter the light shines, the darker the shadow becomes. That is the real world.\"\n\"They… they cry so often. They wish Mother would not make them hurt so much.\"\n\"My flowers have no one to depend on except me. I am willing to provide nourishment, and all I ask in return is to select the one that survives longest and blooms most beautifully… it's only reasonable.\"\n\"Besides… crying is only temporary. Look at them, silly child. Are they not smiling now?\"\nDaffodill looked up and saw the girls laughing together, clustering around Madam T and herself, as if they were embracing a mother they truly loved." + }, + { + "name": "Sisters", + "desc": "They would rest together on Madam T's lap, one on each side.\r\nBefore sleep, they would clean each other's wounds from the day's trials or quests, like two small animals grooming one another.\r\nBut sometimes she would wonder… was she the same as Zankou? Did not resisting the trials and quests mean she was enjoying them?\r\nNo. What she enjoyed was the feeling of being needed, and from that lingering warmth, her thoughts drifted towards parental dependence…" + }, + { + "name": "Perfect Garden's Truth - I", + "desc": "Inconsistent patterns, wall marks with slightly broken lines, a subtle 3-millimeter gap from the bookshelf, a tilt angle differing by about 3 degrees… there was surely a hidden door here. Her eyesight had always been sharp, so she could perceive the truth more easily than most. She could see massive, spectacular, densely packed information files, including personal records of Daffodill and her parents.\nThey were detailed enough to make one's hair stand on end.\nShe saw scribbled notes beside her own photo: \"beautiful collectible,\" \"important tool for missions.\"" + }, + { + "name": "Perfect Garden's Truth - II", + "desc": "Using newborn Daffodill as leverage, Madam T forced Daffodill's parents to spend years away treasure hunting.\nFinally, one day, they could no longer bear it.\n\"Even if we're forced to wander with our daughter, we must tell her the truth… a family must stay together.\"\nHowever, the controller was watching everything. Daffodill had reached the right age to bloom, and the hunter couple had done all that she wanted. Rebellious pawns were useless. Better eliminate them." + }, + { + "name": "Daff", + "desc": "She had never known that a daffodil grew in the center of the lake. She had never seen it as a child. Had it grown after Ms. T took her away?\nThe woman smiled and raised her wine bottle, inviting her to toast. Daffodill looked at her swaying, carefree manner and felt inexplicably angry.\n\"I have already lost everything. What exactly am I supposed to toast to?\"\n\"Do toasts need reasons? Well… then… to the despair of having nothing, to skies never witnessed. And to the one and only daffodil in the center of this lake.\"\n\"…Do you want to pick that flower too?\"\n\"Mmm… I need that flower. But I will not pick it.\"\nMeeting Daffodill's look that clearly said this was contradictory, the woman tapped her forehead with the wet tip of her umbrella.\n\"Who decided that needing something means you must take it? I only need it to exist, so I can drink something fine while admiring it like this. That is enough for me.\"\nWhen the wind rose, she heard a different sound of rustling leaves than before.\nPerhaps… there really was a daffodil growing in the center of the lake." + } + ], + "melee": [ + { + "id": "GA_Daffodill_Melee", + "name": "Still Waters", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Still Waters</>", + "<Title>Basic Attack: Light Prism</>", + "<Title>Basic Attack: Mirror on Water</>", + "<Title>Basic Attack: Displaced Edge</>", + "<Title>Basic Attack: Crosshair Lock</>", + "<Title>Critical Riposte: Close Call</>" + ], + "desc": [ + "Her heart is as calm as still waters, long accustomed to battle. Wields her twin blades to perform up to 5 consecutive attacks, dealing <An>Chaos DMG</>.", + "Light and shadow exist in separate realms. Daffodill's Break Damage contribution is increased by 20%.", + "I am here. Hold Basic Attack to trigger. Dashes forward, performing a whirlwind slash and leaving behind marks, dealing <An>Chaos DMG</>.", + "Press dodge to trigger the special dodge action Displaced Edge during Still Waters. Grants invincibility during the action and does not interrupt the current combo.", + "Wields her weapon while airborne and plunges, dealing 1 instance of <An>Chaos DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when using Still Waters after performing a Critical Dodge. Instantly lifts her foot, pulling the rope to swing her blade toward the target, dealing 1 instance of <An>Chaos DMG</> and reducing Break." + ], + "desc_short": [ + "Deals <An>Chaos DMG</>.", + "Increases Daffodill's Break Damage.", + "Deals <An>Chaos DMG</>.", + "Press dodge to trigger a special dodge action during basic attacks. Grants invincibility during the action and does not interrupt the current combo.", + "Deals <An>Chaos DMG</>.", + "Deals <An>Chaos DMG</>." + ], + "context": "<Italic>Follow the muscle memory.</>", + "icon": "/Game/UI/UI_Icon/Skill/Daffodill_Melee", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Daffodill_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 30, + 33, + 36, + 38, + 42 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38 + ], + [ + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}% *2+{1}% *2+{2}%+{3}%", + "values": [ + [ + 13, + 14, + 15, + 16, + 18, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 33 + ], + [ + 6, + 6, + 7, + 7, + 8, + 9, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 32, + 35 + ], + [ + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61, + 66 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_Melee4_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}%", + "values": [ + [ + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 89, + 97, + 104, + 113, + 122, + 132 + ], + [ + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48 + ], + [ + 12, + 13, + 14, + 16, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}% *4+{1}% *2+{2}%", + "values": [ + [ + 10, + 10, + 11, + 12, + 13, + 14, + 16, + 17, + 18, + 20, + 21, + 23, + 25 + ], + [ + 10, + 10, + 11, + 12, + 13, + 14, + 16, + 17, + 18, + 20, + 21, + 23, + 25 + ], + [ + 47, + 51, + 55, + 59, + 64, + 69, + 75, + 81, + 87, + 94, + 102, + 110, + 119 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33, + 33 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_Branch5_Damage", + "name": "Branch Attack Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%+{3}% *5+{4}%", + "values": [ + [ + 15, + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39 + ], + [ + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 26, + 28 + ], + [ + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29 + ], + [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24 + ], + [ + 38, + 42, + 45, + 49, + 52, + 57, + 61, + 66, + 72, + 77, + 84, + 90, + 98 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 104, + 112, + 121, + 131, + 141, + 152, + 165, + 178, + 192, + 207, + 224, + 242, + 261 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_EntryAttack1_Damage", + "name": "Phantom Step Ratio", + "icon": "", + "value_name": "{0}%+{1}% *4+{2}%", + "values": [ + [ + 68, + 73, + 79, + 85, + 92, + 100, + 108, + 116, + 126, + 136, + 147, + 158, + 171 + ], + [ + 55, + 59, + 64, + 69, + 75, + 81, + 87, + 94, + 102, + 110, + 119, + 128, + 139 + ], + [ + 110, + 119, + 128, + 139, + 150, + 162, + 175, + 189, + 204, + 220, + 238, + 257, + 278 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Daffodill_Skill", + "name": "Resonance", + "type_name": "Redirect Skill", + "desc_name": [ + "<Title>Redirect Skill: Resonance</>", + "<Title>Redirect Skill: Echoes</>" + ], + "desc": [ + "Resonating with the blade. Deals damage to the target. Grants Resonance stacks and increases damage when any team member casts a Support Skill. Increases Resonance's DMG and Break per Support Skill cast, up to 2 stacks. Enhances Resonance and replaces it with Echoes when stacks reach the maximum.", + "Resonance carries sound, echo responds in kind. Swiftly shifts her stance, swinging her blade with the rope to deal <An>Chaos DMG</> to the target." + ], + "desc_short": [ + "Deals <An>Chaos DMG</>. Grants Resonance stacks and increases damage when any team member casts a Support Skill, up to 2 stacks. Enhances Resonance and replaces it with Echoes when stacks reach the maximum.", + "Deals <An>Chaos DMG</>." + ], + "context": "<Italic>A girl trapped in a beautiful garden was no more than a prisoner in a cave. Only after gaining kaleidoscope eyes that could see through all things did she feel her way along the walls and stumble into a new world.</>", + "icon": "/Game/UI/UI_Icon/Skill/Daffodill_Skill1", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Daffodill_Skill1_Damage", + "name": "Skill Ratio", + "icon": "", + "value_name": "{0}% *2+{1}% *5+{2}%", + "values": [ + [ + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 103 + ], + [ + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84 + ], + [ + 49, + 53, + 58, + 62, + 67, + 73, + 79, + 85, + 92, + 99, + 107, + 116, + 125 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "name": "DMG Bonus per Stack", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + ] + }, + { + "name": "Break Bonus per Stack", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25, + 1.25 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_Skill3_Damage", + "name": "Enhanced Skill Ratio", + "icon": "", + "value_name": "{0}% *6 + {1}%", + "values": [ + [ + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59, + 64, + 69, + 75, + 81, + 87 + ], + [ + 91, + 98, + 106, + 114, + 123, + 133, + 144, + 156, + 168, + 182, + 196, + 212, + 229 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "id_stats": "GA_Daffodill_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Daffodill_UltraSkill", + "name": "Finale", + "type_name": "Ultimate", + "desc": "Casts Finale, dealing <An>Chaos DMG</> to enemies in an area. Unseals her left eye, increasing damage and inflicting <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillInsight\">Insight</> on nearby enemies for the duration. Unlocks the skill <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillQTE\">Phantom Step</>, which can be used up to 2 times. Casting Finale resets Phantom Step charges.", + "desc_short": "Deals <An>Chaos DMG</> and unseals the left eye, increasing damage and inflicting <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillInsight\">Insight</> on nearby enemies for the duration. Unlocks the skill <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillQTE\">Phantom Step</>, which can be used up to 2 times. Casting Finale resets Phantom Step charges.", + "context": "<Italic>\"I have lost everything. What exactly am I supposed to toast to?\"</>\r\n<Italic>\"Do you need a reason to toast? Well… then let's toast to absolute despair, to skies we've never seen, and to the one and only narcissus blooming in the heart of this lake.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Daffodill_UltraSkill", + "additional_desc": [ + { + "name": "Insight", + "desc": "Deals additional Break Damage and removes the Insight effect if the target enters Break while affected by Insight." + }, + { + "name": "Phantom Step", + "desc": "Automatically casts Phantom Step when switching to Daffodill from another character during battle while targets are present. Deals high damage and Break and instantly charges Finale to full if Phantom Step successfully performs a Parry Attack on a target. Casts Crossed Blades first when it is present upon switching to Daffodill, then automatically casts Phantom Step. Treats a successful Parry Attack from Crossed Blades as a successful Phantom Step Parry Attack in this case." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Daffodill_UltraSkill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% *3 + {1}% *3 + {2}% *7 + {3}%", + "values": [ + [ + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106, + 114, + 124 + ], + [ + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 59, + 63 + ], + [ + 51, + 55, + 59, + 64, + 69, + 75, + 81, + 87, + 94, + 102, + 110, + 119, + 128 + ], + [ + 218, + 235, + 254, + 275, + 297, + 320, + 346, + 374, + 404, + 436, + 471, + 509, + 549 + ] + ] + }, + { + "id_stats": "GA_Daffodill_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Daffodill_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + }, + { + "name": "DMG Increase", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10, + 10 + ] + ] + }, + { + "id_stats": "GE_Player_Daffodill_AppearSuccess_Damage", + "name": "Parry Attack Extra DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 300, + 324, + 349, + 377, + 408, + 440, + 476, + 514, + 555, + 599, + 647, + 699, + 755 + ] + ] + }, + { + "name": "Parry Attack Extra Break", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "Insight duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45, + 45 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Daffodill_QTE", + "name": "Crossed Blades", + "type_name": "Support Skill", + "desc": "Leave the rest to me. Swings her blade in a slashing motion, dealing 1 instance of <An>Chaos DMG</> to the target.", + "desc_short": "Deals <An>Chaos DMG</>.", + "context": "<Italic>The bodyguard at Eibon Antique Shop has always been reliable. Her clean, efficient skills inspire confidence that, as long as she‘s trusted, any problem can be solved with ease.</>", + "icon": "/Game/UI/UI_Icon/Skill/Daffodill_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Daffodill_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Daffodill_Passive_1", + "name": "Blade Draw", + "type_name": "Passive Skill", + "desc": "<TextHLT>Discord Enhancement</>: Further reduces the target's Break cap by 10% for 30s while affected by Discord and restores it to normal upon leaving combat. Stacks Discord Enhancement effects up to a maximum reduction of 20% of the target's initial Break cap.", + "desc_short": "<TextHLT>Discord Enhancement</>: Further reduces the target's Break cap by 10% for 30s while affected by Discord and restores it to normal upon leaving combat. Stacks Discord Enhancement effects up to a maximum reduction of 20% of the target's initial Break cap.", + "context": "<Italic>Beneath her expressionless façade, fleeting moments of tenderness may appear, like sunlight dancing on snow.</>", + "icon": "/Game/UI/UI_Icon/Skill/Daffodill_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Daffodill_Passive_2", + "name": "Cicada Shell", + "type_name": "Passive Skill", + "desc": "Increases <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillQTE\">Phantom Step</> DMG by 80%.", + "desc_short": "Increases <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillQTE\">Phantom Step</> DMG by 80%.", + "context": "<Italic>She once wandered the gray borderlands like a machine, but now she has somewhere to call home.</>", + "icon": "/Game/UI/UI_Icon/Skill/Daffodill_Pas2", + "additional_desc": [ + { + "name": "Phantom Step", + "desc": "Automatically casts Phantom Step when switching to Daffodill from another character during battle while targets are present. Deals high damage and Break and instantly charges Finale to full if Phantom Step successfully performs a Parry Attack on a target. Casts Crossed Blades first when it is present upon switching to Daffodill, then automatically casts Phantom Step. Treats a successful Parry Attack from Crossed Blades as a successful Phantom Step Parry Attack in this case." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_05_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_Dafudier_01", + "name": "The Art of Hospitality", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_dkxx", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Daffodill increases traffic by <Green2>18</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Daffodill reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, customers are more likely to choose the highest-priced dishes." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Daffodill reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Daffodill increases traffic by <Green2>27</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Eye", + "desc": "Increases allies' Resonance's DMG by <NumGreen>100%</> and Break by <NumGreen>250%</> per Support Skill cast.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1054_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Mechanical March", + "desc": "Deals high damage to the target, generates Break, and fully charges Finale with the final attack if <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillQTE\">Phantom Step</> fails to Parry Attack the target.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1054_2", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Phantom Step", + "desc": "Automatically casts Phantom Step when switching to Daffodill from another character during battle while targets are present. Deals high damage and Break and instantly charges Finale to full if Phantom Step successfully performs a Parry Attack on a target. Casts Crossed Blades first when it is present upon switching to Daffodill, then automatically casts Phantom Step. Treats a successful Parry Attack from Crossed Blades as a successful Phantom Step Parry Attack in this case." + } + ] + }, + { + "name": "Assembly of Creations", + "desc": "Prevents <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillInsight\">Insight</> from being removed once applied, except when the target is neutralized or leaves combat. Allows repeated applications to stack, up to <NumGreen>2</> stacks.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1054_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Insight", + "desc": "Deals additional Break Damage and removes the Insight effect if the target enters Break while affected by Insight." + } + ] + }, + { + "name": "In Concealment", + "desc": "Increases Break DMG by <NumGreen>15%</> for each stack of <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillInsight\">Insight</> when a target enters Break while under the <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillInsight\">Insight</> effect.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1054_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Insight", + "desc": "Deals additional Break Damage and removes the Insight effect if the target enters Break while affected by Insight." + } + ] + }, + { + "name": "Perfect Truth", + "desc": "Deals <NumGreen>1</> additional instance of Break Damage per stack of <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillInsight\">Insight</> if the target enters Break while affected by <hot textstyle=\"TextEXPL\" param=\"nouns&DaffodillInsight\">Insight</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1054_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Insight", + "desc": "Deals additional Break Damage and removes the Insight effect if the target enters Break while affected by Insight." + } + ] + }, + { + "name": "Bloom in the Lake", + "desc": "Ignores <NumGreen>15%</> of the target's DEF when dealing damage.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1054_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Covert Operation", + "desc": "Increases the skill level of Still Waters, Resonance, and Witness This Finale by 1.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Sunlight and Sanctuary", + "desc": "Reduces a target's Chaos Resistance by <NumGreen>15%</> when they enter Break.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1054/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "DamageUpChaosBase", + "name": "Chaos DMG Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DamageUp_black", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_027", + "amount": 100 + }, + { + "item_id": "Food_066", + "amount": 100 + }, + { + "item_id": "Food_094", + "amount": 100 + }, + { + "item_id": "Flower0005", + "amount": 200 + }, + { + "item_id": "Furniture_draw_003", + "amount": 200 + }, + { + "item_id": "Furniture_draw_006", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1005" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1005" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1005" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1005" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1005" + ], + "amount": [ + 50000, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Hello, I'm Daffodill, Hotori's bodyguard… Too simple? Sorry, small talk isn't my strong suit. If you need anything, just reach out to Eibon, the antique shop.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_meet_001" + }, + { + "name": "Chat: Rest", + "desc": "You need to do something. Sitting idle won't do your body any good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_chat_001" + }, + { + "name": "Chat: Weapons", + "desc": "Even the best weapons need regular maintenance to stay sharp, and so do people.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_chat_002" + }, + { + "name": "Chat: Greetings", + "desc": "Dear customer… wel… welcome… Tch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_chat_003" + }, + { + "name": "Sunny", + "desc": "Good weather. Time for some outdoor training.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_weather_001" + }, + { + "name": "Rainy", + "desc": "It's raining? I can use rain to mask my presence…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_weather_002" + }, + { + "name": "Cold", + "desc": "The cold stiffens the body and numbs the senses… In such a moment, perhaps it's best for the roles of prey and hunter to be reversed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_weather_003" + }, + { + "name": "Hot", + "desc": "Argh… this temperature is annoying.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning, what's the plan for today?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "If you're tired, you can take a nap. I'll wake you up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "We can train a bit more. Want to join?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_greet_003" + }, + { + "name": "Good Night", + "desc": "Rest well, Eibon is safe at night.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_greet_004" + }, + { + "name": "Hobbies", + "desc": "I can't say I have any particular preferences, just survival needs. Compressed sweets are easy to carry and provide a lot of energy, so I bring some just in case. How they taste doesn't really matter.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_hobby_001" + }, + { + "name": "Worries", + "desc": "Some customers are harder to deal with than anomalies, but Hotori says we should always smile for Eibon's business… Huh? You think our commission success rate has been dropping lately? Ahem… that's absolutely not true.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_vexation_001" + }, + { + "name": "Topic: Anomalies", + "desc": "Truth often hides among lies. Both humans and anomalies are not what they seem on the surface. Merely \"seeing\" does not suffice. You must understand, perceive, and analyze. Only when you adopt a kaleidoscope of perspectives… can you fathom truth itself.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_talk_001" + }, + { + "name": "Topic: Training", + "desc": "I don't find all the daily training tedious. No pain, no gain, right? The only way to avoid screwing up again is by getting stronger.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_talk_002" + }, + { + "name": "Topic: Fishing", + "desc": "I've observed those anglers who sit by the shore all day with nothing to show for it. The weather, water temperature, conditions of the fish—so many uncontrollable factors can lead to failure. But patience is always a quality a good hunter should have. Your bucket is going to end up full eventually.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "Just a trade with some of my vision, doesn't affect my daily life too much. Sometimes you hear more than you see.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_self_001" + }, + { + "name": "About Myself: Dark Colors", + "desc": "Wondering why I wear dark clothes all the time…? It's not because I like them, but because they do a better job at hiding my injuries and deceiving my enemies.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_self_002" + }, + { + "name": "About Myself: Name", + "desc": "It seems to mean \"narcissus.\" Only one flower blooms on each stem. Hotori told me there's one in the lake near my place, though I've never seen it. If possible, I'd prefer you to call me Daffodill instead of…ahem.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_self_003" + }, + { + "name": "About Hotori: Concerns", + "desc": "I know Hotori will do whatever it takes to get what she wants, putting herself at risk along the way. But sometimes the way she goes about it is a bit over-the-top… Well, I guess I do have some catching up to do.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_about_001" + }, + { + "name": "About Hotori: First Meeting", + "desc": "She was already drunk the first time we met. I thought she was just another strange woman. But somehow… there was a sense of calm, a strange… trust. Maybe that's why I stayed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_about_002" + }, + { + "name": "About Nanally", + "desc": "That kid's always peeking at me when I train. I've caught her a few times, but she just finds another spot and keeps at it… Well, as long as she doesn't get in my way, I guess.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_about_003" + }, + { + "name": "About Zankou", + "desc": "She's very dangerous. Avoid any contact with her unless necessary.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_about_004" + }, + { + "name": "About Adler", + "desc": "Adler is a very respectable person. Before I met Hotori, he was always by her side. I have a lot to learn from him.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_about_005" + }, + { + "name": "About Eibon Antique Shop", + "desc": "Eibon is completely different from where I used to be. Here, you have to deal with difficult customers for a living, and your friends here are noisy all the time… but I can sleep here without worrying about anything at least.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_about_006" + }, + { + "name": "Character Ascension I", + "desc": "Hard work pays off.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "I can be stronger.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "This way, your safety is guaranteed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_ug_003" + }, + { + "name": "Gift Received I", + "desc": "I don't think I've told you, but I… like it a lot. Thank you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_gift_001" + }, + { + "name": "Gift Received II", + "desc": "This is precious for me. Many thanks.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Thanks for the effort.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Hotori told me I should gladly receive gifts from a friend. I shall receive it… gladly.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Saw it coming!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "No mercy!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Purge!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_skill_003" + }, + { + "name": "Redirect Skill IV", + "desc": "A futile attempt.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_skill_SE_001" + }, + { + "name": "Redirect Skill V", + "desc": "Judgment!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_skill_SE_002" + }, + { + "name": "Redirect Skill VI", + "desc": "Nothing can stand my blade!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_skill_SE_003" + }, + { + "name": "Ultimate I", + "desc": "Nowhere to hide!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "What you see is an illusion!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Thousand Eyes… Awaken.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Need an escort to the Bureau?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_containment_001" + }, + { + "name": "Containment II", + "desc": "Containment complete.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_containment_002" + }, + { + "name": "Nullification I", + "desc": "It's done.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_anomaly_002" + }, + { + "name": "Nullification II", + "desc": "Crisis averted.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_anomaly_003" + }, + { + "name": "Unexpected Gains I", + "desc": "Let's take it back to Eibon.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "It'll come in handy eventually.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "It's good to have gains.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Keep it well.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "A pleasant surprise.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Just what we needed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_windfall_006" + }, + { + "name": "Low Health I", + "desc": "I'm good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_hp_001" + }, + { + "name": "Low Health II", + "desc": "Don't worry.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_hp_002" + }, + { + "name": "Low Health III", + "desc": "It's… not a big deal.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_hp_003" + }, + { + "name": "Heal I", + "desc": "Thank you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_fh_001" + }, + { + "name": "Heal II", + "desc": "Recovering power.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_fh_002" + }, + { + "name": "Down I", + "desc": "Sorry… I failed you…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_dead_001" + }, + { + "name": "Down II", + "desc": "If I can be of any value…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_dead_002" + }, + { + "name": "Down III", + "desc": "I lost…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_dead_003" + }, + { + "name": "Takedown I", + "desc": "Annihilate.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_kill_001" + }, + { + "name": "Takedown II", + "desc": "How fragile.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_kill_002" + }, + { + "name": "Damaged I", + "desc": "I got careless.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_struck_001" + }, + { + "name": "Damaged II", + "desc": "No problem.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Just a scratch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Again.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "A new commission?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Standby.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Target locked.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Found it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Handover complete.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_QTE_003" + }, + { + "name": "Glide I", + "desc": "That place is…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_Fly_001" + }, + { + "name": "Glide II", + "desc": "Ahhh…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_Fly_002" + }, + { + "name": "Switch I", + "desc": "I'll handle this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_Switch_001" + }, + { + "name": "Switch II", + "desc": "Leave it to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_Switch_002" + }, + { + "name": "Switch III", + "desc": "Here I am.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_Switch_003" + }, + { + "name": "Special Switch - Hotori", + "desc": "It's my duty.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_SSC_001" + }, + { + "name": "Special Switch - Adler", + "desc": "Take care.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_SSC_002" + }, + { + "name": "Special Switch - Sakiri", + "desc": "I got it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_SSC_003" + }, + { + "name": "Special Switch - Nanally", + "desc": "Nice work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_SSC_004" + }, + { + "name": "Special Switch - Edgar", + "desc": "Catch your breath.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_SSC_005" + }, + { + "name": "Special Switch - Zero", + "desc": "Time for a breather, Appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_SSC_ZERO_001" + }, + { + "name": "Teammate Down - Hotori", + "desc": "You're going to regret this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_TeammateDown_001" + }, + { + "name": "Teammate Down - Adler", + "desc": "It's not over yet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_TeammateDown_002" + }, + { + "name": "Teammate Down - Sakiri", + "desc": "I'm going to take you back.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_TeammateDown_003" + }, + { + "name": "Teammate Down - Nanally", + "desc": "You did your best, leave the rest to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_TeammateDown_004" + }, + { + "name": "Teammate Down - Edgar", + "desc": "Don't stress, I'm taking over.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_TeammateDown_006" + }, + { + "name": "Teammate Down - Zero", + "desc": "I won't leave you behind.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_TeammateDown_007" + }, + { + "name": "Teammate Down - Zankou", + "desc": "Looks like you still need me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_TeammateDown_005" + }, + { + "name": "Parry I", + "desc": "Predictable.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_Parry_001" + }, + { + "name": "Parry II", + "desc": "Stay sharp.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Your moves are sloppy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "You don't know how to give up.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC013/Play_Vo_Char_NPC013_DodgeCombo_002" + } + ] + } + }, + { + "id": "1055", + "name": "Jiuyuan", + "description": "A smooth-talking and enigmatic Elite Courier of Sterry who also serves as Acting Manager.", + "element": [ + { + "element_id": "Nature", + "name": "Anima" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/player_104", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_104_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_104_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_jiuyuan", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Burst DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_baofa" + }, + { + "name": "Control", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_kongzhi" + } + ], + "arcs_tags": { + "type_id": "1", + "name": "Solid", + "icon": "/Game/UI/UI/player/YH_UI_icon_solid" + } + }, + "reaction": [ + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1055_nighty", + "characterId": "1055", + "name": "Self-Discipline Time", + "desc": "Jiuyuan's loungewear. Though it looks simple, this outfit was carefully tailored by a designer.\r\n\"Breathe in… breathe out… stretch your body, let your mind find peace…\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_104_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_104_2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_104_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_jiuyuan_2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_jiuyuan2", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1055_0", + "characterId": "1055", + "name": "With Oriole Song", + "desc": "A rose-scented dress with a wide brim, revealing only a hint of the eyes beneath.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_104", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_104_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_jiuyuan", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_jiuyuan", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1290, + 1393, + 1496, + 1600, + 1703, + 1806, + 1909, + 2012, + 2116, + 2219, + 2322, + 2425, + 2528, + 2632, + 2735, + 2838, + 2941, + 3044, + 3148, + 3251, + 3354, + 3457, + 3560, + 3664, + 3767, + 3870, + 3973, + 4076, + 4180, + 4283, + 4386, + 4489, + 4592, + 4696, + 4799, + 4902, + 5005, + 5108, + 5212, + 5315, + 5418, + 5521, + 5624, + 5728, + 5831, + 5934, + 6037, + 6140, + 6244, + 6347, + 6450, + 6553, + 6656, + 6760, + 6863, + 6966, + 7069, + 7172, + 7276, + 7379, + 7482, + 7585, + 7688, + 7792, + 7895, + 7998, + 8101, + 8204, + 8308, + 8411, + 8514, + 8617, + 8720, + 8824, + 8927, + 9030, + 9133, + 9236, + 9340, + 9443 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 82, + 86, + 90, + 94, + 98, + 103, + 107, + 111, + 115, + 119, + 123, + 127, + 131, + 135, + 139, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 185, + 189, + 193, + 197, + 201, + 205, + 209, + 213, + 217, + 221, + 226, + 230, + 234, + 238, + 242, + 246, + 250, + 254, + 258, + 262, + 267, + 271, + 275, + 279, + 283, + 287, + 291, + 295, + 299, + 303, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 349, + 353, + 357, + 361, + 365, + 369, + 373, + 377, + 381, + 385, + 390, + 394, + 398, + 402, + 406 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": " ", + "description": " ", + "birthday": "July 24", + "homePlace": "Sterry Express", + "abilityName": "Ordinance of Cycles", + "introduction": "A smooth-talking and enigmatic Elite Courier of Sterry who also serves as Acting Manager.", + "voiceChinese": "张安琪", + "voiceEnglish": "Baraka May", + "voiceJapanese": "田中理恵", + "voiceKorean": "방시우" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "After retiring from her previous job, Jiuyuan settled into a fairly relaxed life at Sterry.\r\nThe day-to-day tasks aren't complicated: sending and receiving packages, checking receipts, and passing around clipboards for signatures… As long as the process is clear and the staff reliable, none of the tasks pose much of a challenge. The real headaches come from commissions that can't be handled through any standard procedures: those involving intel, Anomalies, and the Anomaly Hunters who handle them. Clients with hidden agendas tapping their fingers on the counter, buyers using Anomalies as cover for covert handoffs, clients falsifying danger levels to drag Sterry into their schemes, not to mention the tangled web of factions at play… These may not seem a big deal, yet calculated troubles are far more vexing than any package delivery.\r\n\r\nStill, Jiuyuan handles them all with ease.\r\nOne moment she's making small talk with a contact at a banquet hall, and the next she's at the scene of a target's transaction, tidying up the mess. She never breaks a sweat, and leaves only the cool scent of roses in her wake. With her intel and finesse, she has quietly woven a web across the fabric of this city. Most ripples, no matter how faint, inevitably land in it.\r\n\r\nThough, what she excels at most is reading people.\r\nHathor, earnest to the point of stubbornness, is assigned to critical operations, handling high-risk Anomalies or missions where failure isn't an option.\r\nHaniel and Illica, lively and quick on their feet, are better suited for dealing with people or coming up with a spark of brilliance when situations go sideways.\r\nAs for Manager Jenson and what he's been up to lately…\r\nHe really should find a better hiding spot for that fishing rod." + }, + { + "name": "Public Quotes", + "desc": "\"Sterry… is about getting the right deliveries into the right hands.\" Kids who dream of saving the world tend to eat up lines like that.\r\n\"Great work.\" Simple, straightforward words like those make simple, straightforward kids feel praised and motivated.\r\n\"A smart person like you knows how to make the right choice.\" When dealing with complicated adults, a mix of pressure and persuasion, a low tone, and a certain rhythm can make them more… cooperative.\r\n\"You look a bit tired. Want to talk about it?\" A gentle, caring tone makes certain people let their guard down more easily.\r\nOf course, when handling things on behalf of the shop, no matter how many customers come through, the best line is always:\r\n\"Sterry Express, at your service!\"" + }, + { + "name": "Rose Collector", + "desc": "A violet-blue rose.\r\nIts color falls somewhere between deep purple and ashen blue, and its petals curl slightly at the edges, shimmering with a cold, metallic luster in the light. It sits in a plain white porcelain vase, kept fresh in clear water, stem standing straight, clearly well-tended. Yet the petals near the base have begun to wither and gray, as if some of its life force has been quietly siphoned away, leaving it barely holding its form.\r\n\r\nBeside the vase stand several other gifts from the past:\r\nA dark red rose, petals brittle as paper. It was once offered by a smiling guest during a toast, though the poison in his glass nearly spilled over as their hands touched.\r\nA gold-edged rose, petal tips singed with scorch marks. It came from a murmured ritual, its giver claiming to be a devotee, though the flames spiraled out of control the moment the prayer was spoken.\r\nA rose faded almost to pale gray, personally presented by a client as a token of sincerity, though beneath its petals lay a web of carefully crafted lies…\r\n\r\nEach of these flowers marks the beginning of an encounter, a testament to a confrontation. The intel, the energy, the killing intent hidden within them… she refines it all into bullets, then traces the arc of the moment they were given, and silently returns them to the ones who offered them." + }, + { + "name": "Non-Standard Answers", + "desc": "It took Jiuyuan a lot of effort to retrieve Hathor after she was taken by the Bureau for losing control of her Esper Abilities. The loss of control itself wasn't the issue. What mattered was how Hathor handled the aftermath, and this was the first lesson Jiuyuan, as Hathor's mentor, needed to teach.\r\nFrom that day on, Hathor doubled her training regimen on her own. Her movements grew faster and her decisions sharper as she shed off exhaustion for stability. Her expression remained calm, but her rhythm had become erratic. Jiuyuan knew this state all too well: the more one rushes to control one's powers, the easier it becomes for the powers to control them. She didn't stop Hathor’s training, nor did she warn her about overdoing it. Some students tend to mistake reminders for warnings or interpret concern as mentors thinking they aren’t trying hard enough. Rather than have Hathor quietly use such warnings as a new benchmark to push even harder, Jiuyuan thought it was better to let her train where she could watch. By keeping an eye on things, nothing would go wrong.\r\nBut the nature of Sterry's work meant Jiuyuan couldn't have Hathor's back forever. How could she pave the way before letting go? What she hadn't expected was that the solution would find its way to her. Haniel, who had stumbled onto the scene when Hathor lost control, unexpectedly had the ability to calm her. And as luck would have it, the girl was also interested in courier work…\r\nThings just fell into place.\r\n\r\nHathor's execution and combat abilities were impeccable, but interacting with others left her at a loss. When the two little owlets first arrived, Hathor faced them like someone flipping through a book with no instructions: cautious, yet clueless about where to begin. The awkwardness in the shop didn't elude Jiuyuan. In a rare move, she gave Hathor a special commission: make an effort to understand today's youth and assimilate.\r\nImagining the ever-methodical Hathor carrying out this commission, Jiuyuan, who was usually so adept at controlling her emotions, couldn't suppress a smile—her first one.\r\nWhat Jiuyuan had always known, but Hathor had yet to realize: that stubborn, almost clumsy honesty of hers, was exactly what she needed to connect with those two little owlets.\r\n\r\nChanges began to occur in Hathor’s daily life: popular comics started appearing on her desk, and on days off, she would go to livehouses with Haniel and Illica instead of staying alone in the training room. Occasionally, new words she'd never used before would slip into her conversations.\r\nThough Hathor still worried about losing control, much of her tension had vanished amidst the laughter and playfulness of everyday life at Sterry. After one Esper control lesson, Jenson, who had been watching, teased, \"You've been mentoring her for so long, and now she's getting more popular thanks to being 'led astray' by those two little owlets. How does that feel?\"\r\n\"I thought you only cared about fishing. Seems you haven't completely lost your sense as a spy.\"\r\nHathor's tone was as flat as ever: \"Would you like me to conduct another loss-of-control test right now?\"\r\nJiuyuan glanced at Jenson, who was silently calculating the renovation costs if Hathor decided to lose control on purpose. Jiuyuan couldn't help but smile. \"No need. Things are just fine the way they are.\"\r\nThere's no need to mold a student to fit some standard. She can find her own answer." + }, + { + "name": "A Leisurely Routine Takes Shape", + "desc": "The year-end shopping list was, as always, Jiuyuan's responsibility. But this year, when it came to what to buy, things were a little different from before. The moment Haniel and Illica, who had just recently joined, heard about the year-end shopping, they immediately insisted on adding a celebration party that wasn't part of the original plan. And so, what was once a neat and simple list turned into an outing for all five of them.\r\n\"Jiuyuan! We need flowers, balloons, spotlights… and cake!\"\r\n\"And a standee!\"\r\n\"…What's a standee?\"\r\n\"You know, one of those poster things with your photo on it that you put by the entrance. Hathor, wanna try it?\"\r\n\"That won't be necessary… Master.\"\r\n\r\n\"What about presents? There should at least be presents!\"\r\n\"Of course, everyone gets one.\"\r\n\"Hehe, Jiuyuan's the best!\"\r\n\"What about Jenson? Did he get us presents?\"\r\n\"Today's bill is going under his name.\"\r\n\"Jenson's so generous!\"\r\n\"Then I'm adding a few new comics!\"\r\n\"And the CD I didn't get last time!\"\r\n\"…Fine, get it all.\"\r\n\r\nThe list was checked, revised, and added to over and over again.\r\nAs the two little owlets eagerly confirmed every checkmark with Jenson, Jiuyuan stood off to the side and let out a soft sigh.\r\nA little noisy, a little chaotic.\r\nBut in moments like these, the accounts can wait, and the plans can be pushed back a bit.\r\nTimes like this… aren't so bad." + }, + { + "name": "Codename: Nightingale", + "desc": "By that time, Jiuyuan was no longer a novice just awakening to her Esper Abilities. Yet she still stood before the final barrier of a rigid hierarchy: she had to earn a codename that was truly her own.\r\n\r\nThe trial came swiftly. It was an alley skirmish, accompanied by the kind of betrayal and sellouts that were all too common in the trade. Her squad found themselves caught in a total hunt. The value of their intel, their reputation in the circle, and the enemy's frenzied intent to silence them all drove the entire squad deep into the shadows of the alley. Supplies cut off, forces depleted, the outside world a blur, and the cover of night draped over every disadvantage. What should have been the enemy's perfect cover became the rhythm Jiuyuan knew best.\r\nHer footsteps were near silent, yet she found every enemy with precision through the web woven of gunfire and bodies. A faint glow rippled through the dim air like water, followed by a clear, slender call. Cold and unwavering, piercing straight to the soul. Those who heard it felt their blood run cold in an instant.\r\nWhenever that sound swept past an ear or brushed a shoulder, a flicker of rose-colored light would bloom, then condense into a slender bullet before sinking into the target's body. No explosion, no struggle. The moment it struck, it was as if all sound had been drained away, leaving only silent finality.\r\nWhen the last note, like a bird's call, faded at the alley's end, the depths fell silent once more.\r\nThe surviving squad members leaned against the cold walls, watching the figure emerge from the smoke and darkness, the rhythm that had decided life and death still echoing in their ears.\r\n\"That was the only sound you could trust in the night.\"\r\n\r\nLater, the codename field on the mission report was filled in with neat handwriting:\r\nNightingale.\r\nShe sings in the deepest dark. Her voice is the prelude to death, and the dawn for those who survive." + } + ], + "melee": [ + { + "id": "GA_Kuhara_Melee", + "name": "When Secrets Take Shape", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: When Secrets Take Shape</>", + "<Title>Basic Attack: Bird's Eye View</>", + "<Title>Basic Attack: Info-Guided Arts</>", + "<Title>Basic Attack: Opportunity Lock-On</>", + "Critical Riposte: Turning the Tide" + ], + "desc": [ + "Dual-wields to perform up to <NumGreen>5</> consecutive attacks, dealing <Ling>Anima DMG</>. Grants <NumGreen>2</> <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</>. Establishes a <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> with the target when the final hit strikes.", + "Wields her weapon while airborne and plunges, dealing <NumGreen>1</> instance of <Ling>Anima DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Hold Basic Attack to trigger. Auto-targets and fires a bullet, dealing <NumGreen>1</> instance of <Ling>Anima DMG</>. Consumes <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</> for continuous fire and prioritizes targets with <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> when <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</> are available.", + "Press Aim to enter Aim mode. Fires a bullet that deals <NumGreen>1</> instance of <Ling>Anima DMG</> to the enemy in the crosshair.", + "Triggers when using When Secrets Take Shape after a Critical Dodge. Swings both arms and fires in a cross pattern at targets in front, binding them with <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> while dealing <NumGreen>1</> instance of <Ling>Anima DMG</>, reducing Break, and granting <NumGreen>2</> <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</>." + ], + "desc_short": [ + "Deals <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</>. Consumes <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</> for continuous fire and prioritizes targets with <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</>.", + "Deals <NumGreen>1</> instance of <Ling>Anima DMG</>.", + "Deals <Ling>Anima DMG</> with Basic Attacks after a Critical Dodge. Grants <NumGreen>2</> <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</>." + ], + "context": "<Italic>\"She glides through the city like a phantom, where light and shadow dance. Weaving secrets from whispers and fleeting leads, every move is a quiet vow to seal each deal in flawless harmony.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Kuhara_Melee", + "additional_desc": [ + { + "name": "Rose Pact Bullet", + "desc": "Available when Jiuyuan uses When Secrets Take Shape, Intel Hunter, Turning the Tide, or Intel Lock-On. Fires via Info-Guided Arts to trigger Pact Settlement on Lethal Rose Pact targets.\r\nAccelerates Lethal Rose Pact into the settlement stage if the target cannot be settled." + }, + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Kuhara_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 21, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 54 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 24, + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 60 + ], + [ + 9, + 10, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 20, + 21, + 23 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%", + "values": [ + [ + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 84 + ], + [ + 5, + 5, + 5, + 6, + 6, + 7, + 8, + 8, + 9, + 10, + 11, + 11, + 12 + ], + [ + 25, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 47, + 51, + 55, + 60, + 65 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_Melee4_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}%+{1}%+{2}%+{3}%", + "values": [ + [ + 12, + 13, + 14, + 15, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 31 + ], + [ + 24, + 26, + 28, + 30, + 33, + 36, + 38, + 42, + 45, + 49, + 52, + 57, + 61 + ], + [ + 17, + 18, + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35, + 37, + 40, + 44 + ], + [ + 10, + 11, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 20, + 22, + 23, + 25 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 76, + 82, + 88, + 95, + 103, + 111, + 120, + 130, + 140, + 151, + 164, + 177, + 191 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_AirAttack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_Branch_Damage", + "name": "Hold Basic Attack - Shooting DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 80, + 86, + 93, + 100, + 108, + 117, + 126, + 137, + 148, + 159, + 172, + 186, + 201 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_BranchPower_Damage", + "name": "Per Instance DMG Ratio of Rose Pact Bullet", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 33, + 36, + 38, + 41, + 45, + 48, + 52, + 57, + 61, + 66, + 71, + 77, + 83 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_AimAttack_Damage", + "name": "Aim DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 16, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 104, + 112, + 121, + 131, + 141, + 152, + 165, + 178, + 192, + 207, + 224, + 242, + 261 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_Seed_Damage", + "name": "Lethal Rose Pact DPS Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 15, + 16, + 17, + 18, + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35, + 37 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_BudBoom_Damage", + "name": "Pact Settlement DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GE_Player_Kuhara_BudEnd_Damage", + "name": "Pact Settlement DMG Ratio (Auto)", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Kuhara_Skill", + "name": "Intel Hunter", + "type_name": "Redirect Skill", + "desc": "Dashes across the battlefield, pulling the target into the range of control and attacking. Deals multiple instances of <Ling>Anima DMG</> and grants <NumGreen>4</> <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</> while establishing a <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</>.", + "desc_short": "Gathers targets, deals damage, grants <NumGreen>4</> <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</>, and establishes a <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</>.", + "context": "<Italic>We're pretty good at solving problems.</>", + "icon": "/Game/UI/UI_Icon/Skill/Kuhara_Skill", + "additional_desc": [ + { + "name": "Rose Pact Bullet", + "desc": "Available when Jiuyuan uses When Secrets Take Shape, Intel Hunter, Turning the Tide, or Intel Lock-On. Fires via Info-Guided Arts to trigger Pact Settlement on Lethal Rose Pact targets.\r\nAccelerates Lethal Rose Pact into the settlement stage if the target cannot be settled." + }, + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Kuhara_Skill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% *4 + {2}%", + "values": [ + [ + 36, + 38, + 42, + 45, + 49, + 52, + 57, + 61, + 66, + 72, + 77, + 83, + 90 + ], + [ + 38, + 41, + 44, + 48, + 52, + 56, + 60, + 65, + 70, + 76, + 82, + 89, + 96 + ], + [ + 111, + 120, + 129, + 140, + 151, + 163, + 176, + 190, + 206, + 222, + 240, + 259, + 280 + ] + ] + }, + { + "name": "Rose Pact Bullets Gained", + "icon": "", + "value_name": "4" + }, + { + "id_stats": "GA_Kuhara_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Kuhara_UltraSkill", + "name": "Final Reckoning", + "type_name": "Ultimate", + "desc": "Dashes across the battlefield at high speed, continuously firing on surrounding targets before ending with a large-scale explosion, dealing <Ling>Anima DMG</>.\r\nTriggers Final Reckoning, causing all <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> targets within range to enter a stage where <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaBudBoom\">Pact Settlement</> can be triggered, executing all settlements simultaneously on the final hit.", + "desc_short": "Deals large-scale <Ling>Anima DMG</> and causes all targets within range bound by <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> to undergo <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaBudBoom\">Pact Settlement</>.", + "context": "<Italic>A faint stir in the air. Alas… merely a fleeting foe.</>", + "icon": "/Game/UI/UI_Icon/Skill/Kuhara_UltraSkill", + "additional_desc": [ + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + }, + { + "name": "Pact Settlement", + "desc": "Triggers Lethal Rose Pact Settlement stage when hit by Rose Pact Bullets or the last instance of Final Reckoning, dealing high attachment-type <Ling>Anima DMG</> and greatly increasing Settlement DMG from Final Reckoning, and granting Jiuyuan massive Ultimate Energy.\r\nAutomatically triggers Pact Settlement after timeout if Lethal Rose Pact is not activated, dealing attachment-type <Ling>Anima DMG</> to the target." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Kuhara_UltraSkill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% *3 + {2}% *7 + {3}%", + "values": [ + [ + 61, + 66, + 72, + 77, + 84, + 90, + 98, + 105, + 114, + 123, + 133, + 144, + 155 + ], + [ + 78, + 84, + 91, + 98, + 106, + 115, + 124, + 134, + 145, + 156, + 169, + 182, + 197 + ], + [ + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61 + ], + [ + 132, + 142, + 154, + 166, + 179, + 194, + 209, + 226, + 244, + 264, + 285, + 308, + 332 + ] + ] + }, + { + "id_stats": "GA_Kuhara_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Kuhara_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + }, + { + "name": "Pact Settlement DMG increased to", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4 + ] + ] + }, + { + "name": "Pact Settlement grants Ultimate Energy.", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Kuhara_QTE", + "name": "Intel Lock-On", + "type_name": "Support Skill", + "desc": "Fires a curved bullet, dealing <NumGreen>1</> instance of <Ling>Anima DMG</> and granting <NumGreen>2</> <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</> upon hit.", + "desc_short": "Deals <NumGreen>1</> instance of <Ling>Anima DMG</> and grants <NumGreen>2</> <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaPowerBullet\">Rose Pact Bullets</>.", + "context": "<Italic>Don't worry, I've always had an excellent memory.</>", + "icon": "/Game/UI/UI_Icon/Skill/Kuhara_QTE", + "additional_desc": [ + { + "name": "Rose Pact Bullet", + "desc": "Available when Jiuyuan uses When Secrets Take Shape, Intel Hunter, Turning the Tide, or Intel Lock-On. Fires via Info-Guided Arts to trigger Pact Settlement on Lethal Rose Pact targets.\r\nAccelerates Lethal Rose Pact into the settlement stage if the target cannot be settled." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Kuhara_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Kuhara_Passive_1", + "name": "Seize the Moment", + "type_name": "Passive Skill", + "desc": "<TextHLT>Blossom Enhancement</>: Spawns 1 additional Vita Bud and increases Vita Bud limit on field to 6.", + "context": "<Italic>Went as smoothly as I thought it would.</>", + "icon": "/Game/UI/UI_Icon/Skill/Kuhara_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Kuhara_Passive_2", + "name": "Whispers at My Command", + "type_name": "Passive Skill", + "desc": "Binds targets not affected by <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Fatal Rose Pact</> when Vita Pistils hit them. Triggers an additional settlement on targets already bound, causing them to take an extra <NumGreen>15%</> × <Ling>Anima DMG</>.", + "context": "<Italic>People say opportunities are rare, but I've always been good at seizing them.</>", + "icon": "/Game/UI/UI_Icon/Skill/Kuhara_Pas2", + "additional_desc": [ + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_Jiuyuan_01", + "name": "Dealership VIP", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_chgb", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Reduces vehicle durability loss when damaged by <Green2>3%</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Reduces Rampage Players vehicle modification labor fees by <Green2>10%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Reduces vehicle durability loss when damaged by <Green2>3%</>." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Reduces Rampage Players vehicle modification labor fees by <Green2>10%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Reduces vehicle durability loss when damaged by <Green2>4%</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "To Know, To Balance", + "desc": "Increases Jiuyuan's ATK by <NumGreen>5%</> for each target on the field bound by <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</>, up to <NumGreen>15%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1055_1", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + } + ] + }, + { + "name": "Intel Turns Into Blades", + "desc": "Increases <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> DMG Ratio by <NumGreen>100%</>. Restores HP to the entire team equal to <NumGreen>5%</> of the total damage accumulated by that Rose Pact whenever <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaBudBoom\">Pact Settlement</> is triggered by casting Final Reckoning.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1055_2", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + }, + { + "name": "Pact Settlement", + "desc": "Triggers Lethal Rose Pact Settlement stage when hit by Rose Pact Bullets or the last instance of Final Reckoning, dealing high attachment-type <Ling>Anima DMG</> and greatly increasing Settlement DMG from Final Reckoning, and granting Jiuyuan massive Ultimate Energy.\r\nAutomatically triggers Pact Settlement after timeout if Lethal Rose Pact is not activated, dealing attachment-type <Ling>Anima DMG</> to the target." + } + ] + }, + { + "name": "Advantage Established", + "desc": "Deducts an additional <NumGreen>4</> Break from the settlement target when <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaBudBoom\">Pact Settlement</> is triggered by casting Final Reckoning.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1055_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Pact Settlement", + "desc": "Triggers Lethal Rose Pact Settlement stage when hit by Rose Pact Bullets or the last instance of Final Reckoning, dealing high attachment-type <Ling>Anima DMG</> and greatly increasing Settlement DMG from Final Reckoning, and granting Jiuyuan massive Ultimate Energy.\r\nAutomatically triggers Pact Settlement after timeout if Lethal Rose Pact is not activated, dealing attachment-type <Ling>Anima DMG</> to the target." + } + ] + }, + { + "name": "Strike to Kill", + "desc": "Increases DMG Ratio by <NumGreen>50%</> and affects targets within range when <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaBudBoom\">Pact Settlement</> is actively triggered.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1055_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Pact Settlement", + "desc": "Triggers Lethal Rose Pact Settlement stage when hit by Rose Pact Bullets or the last instance of Final Reckoning, dealing high attachment-type <Ling>Anima DMG</> and greatly increasing Settlement DMG from Final Reckoning, and granting Jiuyuan massive Ultimate Energy.\r\nAutomatically triggers Pact Settlement after timeout if Lethal Rose Pact is not activated, dealing attachment-type <Ling>Anima DMG</> to the target." + } + ] + }, + { + "name": "Intel Superiority", + "desc": "Jiuyuan's DMG against targets bound by <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> increases by <NumGreen>8%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1055_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + } + ] + }, + { + "name": "Know Every Secret", + "desc": "Deals <NumGreen>200%</> DMG Ratio to targets bound by <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> each time they cast a skill. This effect has a <NumGreen>5s</> cooldown.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1055_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + } + ] + } + ], + "resonance": [ + { + "name": "Doubled Capacity", + "desc": "Increases the skill level of When Secrets Take Shape, Intel Hunter, and Final Reckoning by 1.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Unhindered Passage", + "desc": "Reduces Anima Resistance of targets bound by <hot textstyle=\"TextEXPL\" param=\"nouns&KuharaAttachment\">Lethal Rose Pact</> by <NumGreen>10%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [ + { + "name": "Lethal Rose Pact", + "desc": "A type of attachment. Devours the target's HP continuously while active. Forces the target into the stage where Pact Settlement can be triggered after <NumGreen>5</>s. Lasts for <NumGreen>25</>s." + } + ] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1055/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 2, + "desc": "Increases {0} by {1}% for each Type II Module equipped.", + "special_desc": "Type II Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "value": 6 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_004", + "amount": 100 + }, + { + "item_id": "Food_054", + "amount": 100 + }, + { + "item_id": "Food_103", + "amount": 100 + }, + { + "item_id": "Flower0001", + "amount": 200 + }, + { + "item_id": "Furniture_FlowerPot_002", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_003", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1014" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1014" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Friendship_3_1014" + ], + "amount": [ + 20, + 20000, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1014" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1014" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1014" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1014", + "Fashion_character_1055_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Sterry Express at your service. Nice to meet you, you can call me Jiuyuan. We provide anomaly hunter delivery service, and also accept anomaly commissions. If those are what you come for, we can have some further discussion.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_meet_001" + }, + { + "name": "Chat: Sports Car Delivery", + "desc": "Behavior, manner, dressing… Tiny things manipulate people's attitude towards you more than you expect. Dealing with bussiness driving a Regalia seems to be showing off, but always makes way for you, so that things will go smoothly.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_chat_001" + }, + { + "name": "Chat: Personal Food Survey", + "desc": "In the aroma of fine dishes and wine, a casual chat can reveal a lot more than people think… Of course, I'm not there for work every time. Sitting down and savoring the moment isn't a bad thing to do sometimes.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_chat_002" + }, + { + "name": "Chat: Job Details", + "desc": "I'm in special deliveries for Sterry. The content… depends on the client. Different people have different needs.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_chat_003" + }, + { + "name": "Sunny", + "desc": "Delivering on a sunny day is always better than a gloomy one, don't you think?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_weather_001" + }, + { + "name": "Rainy", + "desc": "By yourself on a rainy day? Need a ride?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_weather_002" + }, + { + "name": "Cold", + "desc": "It's never easy working in this weather for me, as well as you anomaly hunters… However, we both know that troubles bring you chances.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_weather_003" + }, + { + "name": "Hot", + "desc": "People get more impatient under hot weather… Don't make them wait too long.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Our first client this morning! What would you like to know?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Ah. The high noon sun. Why don't we chat under some shades away from the blinding light?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "People tend to let their guard down in the evening… Are you paying attention to your surroundings?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_greet_003" + }, + { + "name": "Good Night", + "desc": "Nightfall… the perfect time to negotiate.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_greet_004" + }, + { + "name": "Hobbies", + "desc": "Nothing special. Just slowing down when I have the time. Drink some coffee, look at some people around, and pick up some interesting news.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_hobby_001" + }, + { + "name": "Worries", + "desc": "Troubles… probably those monthly parking tickets, damaged vases and decors at Sterry, and that limited edition perfume spilled out of curiosity… You think there are other things keeping me busy? Sharp eyes you have.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_vexation_001" + }, + { + "name": "Topic: Intel", + "desc": "I don't rush to judgement on intel. I see who is in it, who is into it… Focus on the line and wait, those who hide deeply but always concern will bite the hook.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_talk_001" + }, + { + "name": "Topic: Reading Silence", + "desc": "Silence is sometimes harder to handle than noise. It hides hesitation, fear, concealment… and truths that don't want to be revealed. For intel merchants, the challenge isn't listening, but discerning. What's worth pursuing, what should be ignored. Miss the mark, and those opportunities that should have been seized will quietly slip away.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_talk_002" + }, + { + "name": "Topic: Cheek Pouches", + "desc": "Every Sterry member has their own Cheek Pouch. These little guys are influenced by their contractor's personality. Observing their behavior is quite interesting sometimes.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_talk_003" + }, + { + "name": "About Myself: Esper Ability", + "desc": "My esper? Consider it like turning roses to bullets when necessary. To achieve a goal, there's no harm to use a direct approach.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_self_001" + }, + { + "name": "About Myself: Rose", + "desc": "The bullet that shot him was roses he gave me not long ago. What a pity… for the roses.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_self_002" + }, + { + "name": "About Myself: Nightingale", + "desc": "Smart birds know when to get lost.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_self_003" + }, + { + "name": "About Jenson", + "desc": "As one of Sterry's founders, his intel abilities are naturally impeccable. If only he could spend less time using \"intel gathering\" as an excuse for slacking off, and spend more time fulfilling his duties as shop owner, and maintain relationship with some VICs, AND deal with those pending high risk commissions… There comes my turn to have a vacation. After all, there's nothing worth \"investigating\" around the Caltrop Lake, is there?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_about_001" + }, + { + "name": "About Hathor", + "desc": "She always does things at her own pace, carrying out instructions. I just have her observe how others laugh, make noise, and mess up ordinary little things. These trivial moments are more important to her than any training.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_about_002" + }, + { + "name": "About Haniel", + "desc": "Looking for her to make deliveries? Open your Bagel, ask a few simple questions… Most of the time she'll show up and won't keep you waiting. As for causing trouble, she handles big things appropriately. For small matters, just watch if she's being overly helpful around the shop. That usually means she's making up for some minor mishap, quietly cleaning up the mess.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_about_003" + }, + { + "name": "About Illica", + "desc": "Illica… his problem isn't causing trouble but insisting on being smarter than everyone else. Especially when there's someone his age around, his little brain starts sparking. He's genuinely clever, but unfortunately uses it all for making trouble.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_about_004" + }, + { + "name": "About Sterry Express", + "desc": "Intel trading, anomalies, or ordinary items… Whatever the demand, we're happy to fulfill it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_about_005" + }, + { + "name": "Character Ascension I", + "desc": "Ah. Thanks to someone helping behind the scenes.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "This feels smoother than I expected.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Looks like we both got what we wanted.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_ug_003" + }, + { + "name": "Gift Received I", + "desc": "You knew me better than I expected.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_gift_001" + }, + { + "name": "Gift Received II", + "desc": "There aren't many gifts in this world that would make me this happy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_gift_002" + }, + { + "name": "Gift Received III", + "desc": "I guess this is fitting of your style.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I don't care much about the gift itself, but I do appreciate your effort.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Thank you for your patronage.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Exclusive delivery, please sign here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "I'll deliver this one myself.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Let's settle.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "I can see you all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Signed for delivery.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Phew! Hope someone will pay a good price for this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_containment_001" + }, + { + "name": "Containment II", + "desc": "Time's up. Back to where you belong.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_containment_002" + }, + { + "name": "Nullification I", + "desc": "I don't offer discounts for follow up services.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_anomaly_001" + }, + { + "name": "Nullification II", + "desc": "Mission complete. Now… shall we discuss payment?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_anomaly_002" + }, + { + "name": "Unexpected Gains I", + "desc": "Ah… this isn't your ordinary package.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Occasionally there are some unexpected gains.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "The off-the-books portion needs personal collection.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "This is our rightful share!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Beautiful prey. What should I collect next?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Good stuff in stock!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Opportunities always hide in the smallest details.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_hp_001" + }, + { + "name": "Low Health II", + "desc": "Improvisation is more interesting.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_hp_002" + }, + { + "name": "Low Health III", + "desc": "What else can I use?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_hp_003" + }, + { + "name": "Heal I", + "desc": "Perfect timing!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_fh_001" + }, + { + "name": "Heal II", + "desc": "A rare moment of harmony.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_fh_002" + }, + { + "name": "Down I", + "desc": "It's just… another kind of ending.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_dead_001" + }, + { + "name": "Down II", + "desc": "Heh… secrets brought me this far.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_dead_002" + }, + { + "name": "Down III", + "desc": "Even I… have moments when I'm helpless.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_dead_003" + }, + { + "name": "Takedown I", + "desc": "One at a time!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_kill_001" + }, + { + "name": "Takedown II", + "desc": "Pick your targets before blocking the way!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_kill_002" + }, + { + "name": "Damaged I", + "desc": "No big deal. Continue.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_struck_001" + }, + { + "name": "Damaged II", + "desc": "Pretty bold of you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Pretty agile, aren't you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Looks like this job needs some additional fees.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Every mess needs someone to clean it up… I don't work for free.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Invited guest here. I don't want this to be a wasted trip.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Your express delivery.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Here's your delivery!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Intel confirmed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_QTE_003" + }, + { + "name": "Glide I", + "desc": "Aren't things clearer when you're looking from above?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_Fly_001" + }, + { + "name": "Glide II", + "desc": "Feels good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_Fly_002" + }, + { + "name": "Switch I", + "desc": "Time for the professionals to take over!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_Switch_001" + }, + { + "name": "Switch II", + "desc": "Shift change. Don't make me clean up for too long.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_Switch_002" + }, + { + "name": "Switch III", + "desc": "Pretty lively here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_Switch_003" + }, + { + "name": "Special Switch - Hathor", + "desc": "Well done.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_SSC_001" + }, + { + "name": "Special Switch - Haniel", + "desc": "Perfect chance for us to shine.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_SSC_002" + }, + { + "name": "Teammate Down - Hathor", + "desc": "Hathor, relax.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_TeammateDown_001" + }, + { + "name": "Teammate Down - Haniel", + "desc": "Leave the rest to the adults.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_TeammateDown_002" + }, + { + "name": "Parry I", + "desc": "An opportunity served on a silver platter.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_Parry_001" + }, + { + "name": "Parry II", + "desc": "Perfect positioning.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "You'll need to try harder next time!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "You need to be faster than that.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC015/Play_Vo_Char_NPC015_DodgeCombo_002" + } + ] + } + }, + { + "id": "1070", + "name": "Aurelia", + "description": "A fun fact about Hethereau, thanks to meeting Aurelia: cruising the streets on a jellyfish isn't a traffic violation.", + "element": [ + { + "element_id": "Psyche", + "name": "Psyche" + } + ], + "rarity": 4, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_haiyue", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_haiyue_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_haiyue_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_fashionshop_haiyue1", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + } + ], + "arcs_tags": { + "type_id": "3", + "name": "Plasma", + "icon": "/Game/UI/UI/player/YH_UI_icon_plasma" + } + }, + "reaction": [ + { + "name": "Nova", + "desc": "Inflicts Nova on the target for <NumGreen>5s</> after triggering Esper Cycle. When the effect ends, the target takes massive <bule>Mental Damage</>." + }, + { + "name": "Stain", + "desc": "Increases the target's <bule>Psyche and Lakshana DMG</> taken by <NumGreen>20%</> for <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Discord", + "desc": "Deducts a percentage of the target's <bule>Break</> when they are simultaneously affected by Nova and Scorch." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1070_0", + "characterId": "1070", + "name": "Azure Sea Serenade", + "desc": "A loose outfit with emphasis on breathable fabric—when wearing it, it's almost as if you can hear the gentle rolling of waves.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_haiyue_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_haiyue", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_haiyue_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_haiyue", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_haiyue", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 980, + 1058, + 1137, + 1215, + 1294, + 1372, + 1450, + 1529, + 1607, + 1686, + 1764, + 1842, + 1921, + 1999, + 2078, + 2156, + 2234, + 2313, + 2391, + 2470, + 2548, + 2626, + 2705, + 2783, + 2862, + 2940, + 3018, + 3097, + 3175, + 3254, + 3332, + 3410, + 3489, + 3567, + 3646, + 3724, + 3802, + 3881, + 3959, + 4038, + 4116, + 4194, + 4273, + 4351, + 4430, + 4508, + 4586, + 4665, + 4743, + 4822, + 4900, + 4978, + 5057, + 5135, + 5214, + 5292, + 5370, + 5449, + 5527, + 5606, + 5684, + 5762, + 5841, + 5919, + 5998, + 6076, + 6154, + 6233, + 6311, + 6390, + 6468, + 6546, + 6625, + 6703, + 6782, + 6860, + 6938, + 7017, + 7095, + 7174 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 76, + 80, + 84, + 87, + 91, + 95, + 99, + 103, + 106, + 110, + 114, + 118, + 122, + 125, + 129, + 133, + 137, + 141, + 144, + 148, + 152, + 156, + 160, + 163, + 167, + 171, + 175, + 179, + 182, + 186, + 190, + 194, + 198, + 201, + 205, + 209, + 213, + 217, + 220, + 224, + 228, + 232, + 236, + 239, + 243, + 247, + 251, + 255, + 258, + 262, + 266, + 270, + 274, + 277, + 281, + 285, + 289, + 293, + 296, + 300, + 304, + 308, + 312, + 315, + 319, + 323, + 327, + 331, + 334, + 338, + 342, + 346, + 350, + 353, + 357, + 361, + 365, + 369, + 372, + 376 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 60, + 65, + 70, + 74, + 79, + 84, + 89, + 94, + 98, + 103, + 108, + 113, + 118, + 122, + 127, + 132, + 137, + 142, + 146, + 151, + 156, + 161, + 166, + 170, + 175, + 180, + 185, + 190, + 194, + 199, + 204, + 209, + 214, + 218, + 223, + 228, + 233, + 238, + 242, + 247, + 252, + 257, + 262, + 266, + 271, + 276, + 281, + 286, + 290, + 295, + 300, + 305, + 310, + 314, + 319, + 324, + 329, + 334, + 338, + 343, + 348, + 353, + 358, + 362, + 367, + 372, + 377, + 382, + 386, + 391, + 396, + 401, + 406, + 410, + 415, + 420, + 425, + 430, + 434, + 439 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_05", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Shop Street Manager", + "description": "The moment her phone battery hit zero, the map on the screen went completely dark.\r\nDuring those busy periods when work consumes everything, this can happen occasionally.\r\nHalf an hour later, Aurelia paused at a familiar-looking intersection: \"Didn’t I just pass that shop?\"\r\nNo matter how lost she feels, her optimism has always been her greatest strength.\r\nNo matter the challenge, she refuses to give up hope—the path forward is hers to choose and forge.\r\nRiding her jellyfish, Aurelia resolutely sets off again, even if it's in the wrong direction.", + "birthday": "3/9", + "homePlace": "Tamamochi Street Resident Association", + "abilityName": "Nostalgia for Youth", + "introduction": "A fun fact about Hethereau, thanks to meeting Aurelia: cruising the streets on a jellyfish isn't a traffic violation.", + "voiceChinese": "葛子瑞", + "voiceEnglish": "Kira Buckland", + "voiceJapanese": "高橋花林", + "voiceKorean": "정해은" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Aurelia's life has been anything but boring: she sang in a choir, started a band, worked as an Anomaly Hunter, and now she's a diligent salarywoman. With a resume that impressive, some might consider her life a bit too \"maxed out\" for someone her age—at least, that's what the regulars on Tamamochi Street often gossip to each other. \r\n\r\nOf course, her colorful background never prevented her from diving headfirst into whatever job she takes on. These days, as the street manager of Tamamochi Street, Aurelia can easily name every resident and recall their likes and dislikes—no matter how old or young. She's always the first to offer a helping hand to solve whatever daily problems the residents run into. Her dedication to her job often makes people wonder: just how much does the City Hall pay her? \r\n\r\nAfter work, Aurelia will sometimes be spotted wandering the streets alone. If you were to walk up and talk to her, nine times out of ten you'll find she's completely lost (and she'll be very grateful to any good samaritan that'd point her in the right direction)… Sometimes, though, Aurelia will pretend to know where she's going, though no one truly believes her. In the end, everyone on Tamamochi Street is Aurelia's friend. However, it seems that there isn't anyone who genuinely understands her.\r\n\r\nAs for the places she wishes to go but, for some reason or another, can't, and the words she wants to say but swallows them down every time… maybe only someone who stays by her side for a long, long time will ever be allowed to know. Then again, everyone keeps a few secrets locked away in their heart, right? Today, Aurelia is once again smiling, her head held high as she rides her beloved jellyfish down the street, cheerfully greeting everyone she meets. This is the life she chose, no matter what." + }, + { + "name": "The Song No One Remembers", + "desc": "Aurelia was born into a stable, happy family. Her parents loved each other very much, and the household was often peaceful. She was the little sweetheart her parents had prayed and prayed for. Their gentle, lovely little plum blossom. The only flaw in this picture-perfect family was… her parents' work schedule. As she grew older, both of her parents advanced their careers. The time they could spend with Aurelia grew less and less. Aurelia understood that her parents were working incredibly hard to give her a better life, so she knew not to throw tantrums or act overly spoiled.\r\nBut, now and again, when she saw kids her age walking down the street hand in hand with their parents, Aurelia couldn't help but stare. She knew the thing weighing her down was a \"First World Problem\"—she never had to worry about her next meal or a new pair of shoes. She got any toy she wanted right away, and even if she was picky about her food or stayed up too late, she never got punished. Wasn't that enough? Compared to her classmates whose parents were strict or distant, she already had so much. She shouldn't be greedy for more.\r\nSo, she'd only stare for a moment before looking away quickly and obediently heading toward her empty home. At an age when she didn't fully understand the meaning of \"lonely,\" Aurelia had already seemed to experience \"loneliness.\" \r\n\r\nShe got used to not expecting her parents to be around. However, on her birthday, she couldn't help but hope it might be different. Colorful presents, a huge teddy bear, and a triple-tier birthday cake kept her company while she waited. She continued waiting as the sun went down, the sky turning from blue to pink to violet. Soon enough, the moon climbed high into the sky, and the hands of the clock continued to tick inch by inch.\r\nEventually, Aurelia gave up. She lit the candle that was nearly sinking into the buttercream, sang \"Happy Birthday\" to herself, and then gently blew it out. For an instant, the room flared with a brilliant, bright glow before slipping back into darkness.\r\nIt seems that, even if you make a wish, nothing guarantees it coming true.\r\n\"Just once would be enough,\" She thought. I wish Mom and Dad could come home." + }, + { + "name": "The First Melody", + "desc": "Aurelia became friends with Akane and Suzuha on a springtime school trip. She was totally entranced by the jellyfish at the aquarium and, before she knew it, drifted away from the rest of her class's group. Just when she began to panic because she couldn't find a familiar face in the crowd, Akane and Suzuha spotted her. Each of them took one of her hands and led her back to the class rendezvous point, then sat on either side of her on the bus ride home.\r\nFrom that embarrassing moment onwards, Akane and Suzuha became Aurelia's best friends. \r\n\r\nOn the birthday that followed, Aurelia's living room wasn't empty anymore. In front of the incredible gift pile, two girls who'd never seen anything like it merely stared, wide-eyed. \"What are you two doing, hiding over there?\" The moment they heard Aurelia's voice, Akane immediately tried to shove the tiny present in her hands behind her back. But Aurelia, sharp-eyed as ever, caught her in the act.\r\n\"Is that for me? It has to be for me, right?!\" Aurelia darted over, making an effort to grab the little box.\r\n\"You already have so many presents! T-this one really isn't anything special…\"\r\n\"That doesn't matter!\" Aurelia shouted, full of indignation. She finally managed to get a hold of the gift, hugging it to her chest. \"This is my first-ever birthday present from a friend. It's mine, no takebacks!\"\r\n\"Really… it's nothing…\" Akane's voice grew quiet. \r\nBefore she could finish, Aurelia had already ripped the wrapping paper to shreds. Out of the palm-sized box rolled out a few shiny little pins: souvenirs from that same aquarium where they'd first met. The tiny jellyfish mascot wore a cutesy, pitiful expression that, funnily enough, looked like Aurelia when she couldn't stop crying that day. \r\nAurelia stared, unblinking, at the pins that had rolled onto the table. Beside her, Akane was so embarrassed she couldn't bear to stay a second longer. She grabbed Suzuha's hand and began to make a move for the door—but before they could even take a step, Aurelia barreled into both of them and wrapped them in a tight hug. The little crybaby was sobbing like the mascot on that pin again. \"T-this is perfect… the best thing in the entire world!\" She could barely get the words out between her tears.\r\n\r\nEven though her parents still couldn't be there for that birthday in particular, Aurelia no longer felt lonely. Suzuha lit the cake candles for her, and Akane set a party hat on her head. The birthday song they sang for her became the most beautiful melody Aurelia had ever heard.\r\nWhen she blew out the candles, she prayed with all her might that she'd be with these friends of hers forever." + }, + { + "name": "First Discordant Note", + "desc": "Aurelia's Esper ability awakened when she was fourteen. She couldn't remember exactly what was going on at the time, except that one time, when she was writing in class, her pen ran out of ink. Just as she gave her pen a shake, an entire school of jellyfish suddenly appeared. Both the teachers and students lost their trains of thought completely upon seeing this, their eyes wide and jaws to the floor. \r\nIn the middle of the crowd, Aurelia was the most confused of all. \"I just… did this?\"\r\nShe tried shaking her hand again. The jellyfish mimicked her hand movements perfectly. Her classmates shouted in excitement, \"Aurelia! Are you, like… did you just become…\"\r\n\"You're an Esper!\"\r\n\r\nAfter many tests, it was officially confirmed that Aurelia was indeed an Esper now. But, aside from registering her status at the Bureau of Anomaly Control, her life didn't seem to change at all—until she realized the price she had to pay for it.\r\nLosing her sense of direction turned Aurelia into a stranger in her own hometown. Though she walked the same route to and from school every day, she would forget where she was at any point again and again. The shops along the road all looked familiar, but when it came time to cross the street or turn a corner, her mind drew a complete blank. From then on, no matter where she had to go, Aurelia had to look up the route in advance and memorize every detail. \r\nInitially, everyone at her school thought Espers were super powerful and cool. They looked at Aurelia with envy and awe. But it turned out that Aurelia's Esper ability was pretty underwhelming. What situation would ever occur where someone needed to summon and control jellyfish? It was entirely useless. It didn't take long for their excitement about her being an Esper to die down, and instead, focus on her daily navigation disasters. Even though the classmates who knew about her condition did their best to look out for her on campus, the moment a shop changed its sign or some road got closed down for construction, Aurelia would end up scrambling around, asking anyone and everyone for directions. In the end, Akane and Suzuha got into the habit of going out of their way to pick Aurelia up and drop her off every day, terrified of her wandering around in the streets in the middle of the night. \r\n\"I don't want to keep bothering you with stuff like this…\" Aurelia muttered, her head hanging low. Suzuha held Aurelia's hand, giving it a little tug, signaling that they needed to turn left at the intersection. Walking alongside them, Akane let out a sigh. She lifted her hand and flicked Aurelia on the forehead. Aurelia shrank back, exclaiming, \"Ow! That hurt, you know!\"\r\n\"You became an Esper, that's all. You haven't changed as a person. You've always been a hassle, even since you were little!\"\r\nSuzuha burst out laughing next to them. Aurelia puffed out her cheeks in protest, \"Akane! You're so mean…\"\r\n\"Am I wrong? H-Hey! Stay back!\"\r\n\r\nWarmed by her friends' laughter, Aurelia let the topic go. However, though she stayed sunny and optimistic on the surface, a tiny bit of unease had gripped her heart.\r\nAm I truly the same as before? Can things really stay the same between us?" + }, + { + "name": "Though We Part, the Song Endures", + "desc": "Aurelia's chances of recovering the use of her legs were slim, but the doctor gently suggested that it wasn't entirely impossible. If more advanced medical technology emerged in the future, or if she encountered an Esper with profound healing powers…. Regardless, the possibility wasn't zero. \r\nDuring the breaks in her rehab, she often opened Bagel and stared at the little group chat with her, Akane, and Suzuha. Neither of them had sent a message to the other in a long, long time. Many times, Aurelia had typed out a message, only to delete it. What was she supposed to say to them?\r\nAfter countless bouts of agonizing over her phone, Aurelia made up her mind: once she recovered a bit more, to the point where she could be discharged from the hospital and take care of herself, she would go see her friends in person and surprise them. She had endless amounts of things she wanted to tell them about. \r\n\r\nHowever, even after some time had passed, there was still no improvement in her legs. She had learned to stop treating \"recovery\" as her only hope. Still, with the help of her Esper Ability, her life gradually returned to some semblance of normalcy. Though she couldn't play the drums like before, Aurelia thought nothing of it. With just a bit more effort, the day of her reunion with Akane and Suzuha wouldn't be far off.\r\nSuddenly, her phone buzzed with a special tone—the one she had set for Akane's messages specifically. Aurelia rushed to grab her phone, nearly fumbling it out of her hands in the process. But, the words that met her eyes once she opened the chat window were ones she never could have imagined: \"Suzuha is leaving. By the time she messaged me, her car had already driven off…\"\r\n…Huh? \r\nFor a moment, Aurelia couldn't comprehend the meaning of those words, as if they were nothing more than a string of meaningless symbols. What did Akane mean by \"leaving\"? Why would she say that? Her fingers trembled so much she could barely type out a reply, and a flood of questions sat heavy on the tip of her tongue. \r\n\"Where's Suzuha going?\"\r\nShe was going somewhere without them. Suzuha wouldn't be staying with them anymore. Aurelia… understood. Suzuha was a sensitive and thoughtful girl. If she kept living in Hethereau, a city filled with memories of their friendship, she would only tear open closed wounds. Aurelia knew this, so there was no need to ask. \r\n\"What about Lines?\"\r\nShe, deep down, knew the answer to that, too. Even if Suzuha stayed, without Aurelia as their drummer, the band would only have two paths going forward: going on a hiatus or disbanding. Of course, she could recommend something like \"find a new drummer,\" but she couldn't bring herself to say that. \"Lines\" was born from Aurelia's selfish wish, and it existed for the three of them. If one of them left, what meaning was there in the empty shell left behind? \r\n\"What about you?\"\r\n\r\nEven through her shaking fingers, she typed out those three words. \r\nIn the chat window, the \"someone is typing…\" bubble flickered for a long, long time. Akane, who always spoke her mind, must have been desperately searching for words to say, just like Aurelia had done prior. Akane, so straightforward and outspoken, had been pushed beyond her limits.\r\nIf it weren't for the fact that Aurelia feared being looked down upon or abandoned, if it weren't for her lack of courage… If it weren't for her…\r\nIt felt as though thousands of years had passed before a new message had finally appeared on the screen: \"I don't know. I'm sorry.\"\r\nAurelia felt herself begin to tremble. The words before her dissolved like paint in water. \r\nWhy? \r\nDon't disband. \r\nWeren't we supposed to be together forever? \r\nAkane loves singing so much—she should always be on stage. \r\nThere was so much Aurelia wanted to say, but she no longer felt she had the right to say it. The one who brought \"Lines\" to an end, the one who forced Suzuha to leave her hometown, the one who made it so Akane could never sing again… it wasn't fate. It was herself. \r\nAnd yet, even so, there was still one thing she wanted to convey. Even if the damage had already been done, even if it was far too late… \r\n\r\n\"I love your music, Akane. Please, even if you feel like stopping now, continue it in the future.\"\r\n\"I promise you, I'll definitely be waiting for you wherever you go.\"" + }, + { + "name": "Echoes of the Past", + "desc": "Away from the stage and all kinds of Anomaly Commissions, Aurelia found herself with nothing much to do. The thread that had always pulled her forward suddenly snapped. Aurelia had lost her direction all at once. \r\nShe used to think about the future: \"Lines\" would become the band best at dealing with anomalies and the best at playing music among anomaly hunter organizations… They would leave Hethereau, go on tour, and become legends! When it came to the imagination, there was no such thing as a \"limit.\" But now, nothing seemed to matter anymore.\r\nTo pass the boredom of being in the hospital, Aurelia started helping a busy elderly woman in the same ward as her with paperwork. Before being discharged, the old woman extended an invitation: \"how about continuing to help out at my business?\"\r\n…That didn't seem like a bad idea. It wasn't like she had anywhere else to go anyway.\r\n\r\nAs if bidding farewell to everything she knew, Aurelia began a brand new life on Tamamochi Street. Not far from StarSign, she became an ordinary part-time office worker.\r\nThe street itself was lively, with people constantly coming and going. She knew she had once been a member of the band \"Lines,\" but most residents knew absolutely nothing about her. For the current Aurelia, none of that mattered much anymore. Adults appreciated her professionalism, whereas children thought her riding around on jellyfish was the coolest thing in the world. Before she knew it, she had become \"Little\" or \"Big Sister\" Aurelia.\r\nOnly once in a while did she muster the courage to take a detour after work and visit StarSign. But, when she reached the steps she had once bounced down endlessly with excitement, she realized: her jellyfish was too big to squeeze down that long, narrow staircase.\r\nThe door to the past had permanently closed on her, and she could never go back. The words left unsaid, and tears left unshed, were all that remained in her heart.\r\nShe absolutely wished to see Akane and Suzuha again. To hear Akane's song, and see Suzuha's smile—yet she felt that if she ever uttered such a thing out loud, that tiny wish would warp into some kind of curse.\r\nAt the very least, she would allow herself to go to every \"Night of Moondog\"—an Anomalous Realm vast enough to hold all the songs and dreams in the world, or at least one big enough to accommodate one jellyfish. She scanned the list of songs each time she visited, searching for familiar names, only to be disappointed again and again. But, no matter what, Aurelia believed that someday, that little girl born for music would return." + } + ], + "melee": [ + { + "id": "GA_Mitsuki_Melee", + "name": "Cappella", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Legato</>", + "<Title>Basic Attack: Staccato</>", + "<Title>Basic Attack: Portamento</>", + "<Title>Critical Riposte: Syncopation</>" + ], + "desc": [ + "Sing smoothly and naturally! Wields her weapon and performs up to 4 consecutive attacks, dealing <Hun>Psyche DMG</>.", + "Sing loudly and fully! Hold Dodge while moving to ride a jellyfish, sprinting at high speed for the duration. Generates a jellyfish blast at intervals when targets are nearby, dealing <Hun>Psyche DMG</>.\r\nPerforms a special Dodge in this state, and \"Critical Dodge Riposte: Syncopation\" automatically fires four jellyfish blasts.\r\nEnds automatically when stamina drops below a certain amount.", + "Sing clearly and beautifully! Wields the weapon mid-air and plunges, dealing <NumGreen>1</> instance of <Hun>Psyche DMG</> to an area upon impact. Increases DMG based on fall height, up to 100%.", + "Triggers when casting Legato after a Critical Dodge.\r\nThink you can handle my rhythm? Wields her weapon to deal <NumGreen>1</> instance of <Hun>Psyche DMG</> to an area and reduces Break." + ], + "desc_short": [ + "Deals<Hun>Psyche DMG</>.", + "Hold Dodge while moving to enter a special state. Generates a jellyfish blast at intervals, dealing <Hun>Psyche DMG</>.\r\nPerforms a special Dodge in this state, and Syncopation automatically fires four jellyfish blasts.\r\nEnds automatically when stamina drops low.", + "Deals<Hun>Psyche DMG</>.", + "Deals <Hun>Psyche DMG</>." + ], + "context": "<Italic>Vocal technique is key for any conductor, so I keep practicing. Engage the core, relax the jaw, let the sound flow from the back of my head and out through my brow…</>\r\n<Italic>\"Ah—ah—\"</>\r\n<Italic>…Why does it feel like even my own voice is slipping away?</>", + "icon": "/Game/UI/UI_Icon/Skill/Mitsuki_Melee1", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Mitsuki_Melee1_Damage", + "name": "1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59, + 64, + 69, + 74, + 80, + 87 + ] + ] + }, + { + "id_stats": "GE_Player_Mitsuki_Melee2_Damage", + "name": "2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 108, + 116, + 125, + 136, + 146, + 158 + ] + ] + }, + { + "id_stats": "GE_Player_Mitsuki_Melee3_Damage", + "name": "3rd Instance Projectile DMG Ratio", + "icon": "", + "value_name": "{0}% *3", + "values": [ + [ + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 69, + 75 + ] + ] + }, + { + "id_stats": "GE_Player_Mitsuki_Melee4_Damage", + "name": "4th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *4", + "values": [ + [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 21, + 23, + 24 + ] + ] + }, + { + "id_stats": "GE_Player_Mitsuki_AirAttack_Damage", + "name": "Plunge Attack DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 130, + 140, + 151, + 163, + 176, + 191, + 206, + 222, + 240, + 259, + 280, + 303, + 327 + ] + ] + }, + { + "id_stats": "GE_Player_Mitsuki_EvadeBranch_Damage", + "name": "Hold Dodge - Projectile DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 25, + 27, + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 65 + ] + ] + }, + { + "id_stats": "GE_Player_Mitsuki_PerfectEvadeAtk_Damage", + "name": "Critical Riposte DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 195, + 210, + 227, + 245, + 265, + 286, + 309, + 334, + 360, + 389, + 421, + 454, + 491 + ] + ] + }, + { + "id_stats": "GE_Player_Mitsuki_PerfectAtkBullet_Damage", + "name": "Special Critical Riposte Projectile DMG Ratio", + "icon": "", + "value_name": "{0}% ×4", + "values": [ + [ + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + ] + }, + { + "id_stats": "None", + "name": "Hold Dodge - Stamina Cost per Second", + "icon": "", + "value_name": "5" + }, + { + "id_stats": "None", + "name": "Hold Dodge - Minimum Stamina Left", + "icon": "", + "value_name": "40" + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Mitsuki_Skill", + "name": "Cadenza Aria", + "type_name": "Redirect Skill", + "desc": "Transform the everyday into a rainbow melody and let it roar across the skyline. Deals <NumGreen>1</> instance of AoE <Hun>Psyche DMG</> and enters the <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">Cadenza</> state for <NumGreen>12</>s.", + "desc_short": "Deals <Hun>Psyche DMG</> and enters the <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">Cadenza</> state.", + "context": "<Italic>If she hadn't joined the Tamamochi Street Resident Association, Aurelia might have ended up as an administrator on Cadenza Street instead. In the end, perhaps it's all just a matter of fate.</>", + "icon": "/Game/UI/UI_Icon/Skill/Mitsuki_Skill", + "additional_desc": [ + { + "name": "Cadenza", + "desc": "Deals an additional <NumGreen>70%</> damage with jellyfish blasts and inflicts AoE DMG to enemies around the target." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Mitsuki_Skill_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "name": "Projectile Enhancement Ratio", + "icon": "", + "value_name": "70%" + }, + { + "name": "Buff Duration", + "icon": "", + "value_name": "12s" + }, + { + "id_stats": "GA_Mitsuki_Skill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Mitsuki_UltraSkill", + "name": "Canon Chorus", + "type_name": "Ultimate", + "desc": "Let's play the next verse together. Gathers nearby jellyfish, dealing 6 instances of AoE <Hun>Psyche DMG</> and slightly pulling targets together.", + "desc_short": "Deals <Hun>Psyche DMG</> and pulls enemies together.", + "context": "<Italic>Whether it was the school choir or that short-lived, chaotic band, these were Aurelia's most cherished memories. Even a brilliant solo would feel far too lonely.</>", + "icon": "/Game/UI/UI_Icon/Skill/Mitsuki_UltraSkill", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Mitsuki_UltraSkill_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% *5 + {1}%", + "values": [ + [ + 89, + 96, + 103, + 112, + 121, + 130, + 141, + 152, + 164, + 177, + 192, + 207, + 224 + ], + [ + 55, + 59, + 64, + 69, + 75, + 81, + 87, + 94, + 102, + 110, + 119, + 128, + 139 + ] + ] + }, + { + "id_stats": "GA_Mitsuki_UltraSkill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Mitsuki_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120, + 120 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Mitsuki_QTE", + "name": "Dissonance", + "type_name": "Support Skill", + "desc": "True command means never mistaking the timing. Commands the jellyfish to strike, dealing 1 instance of AoE <Hun>Psyche DMG</> on hit.", + "desc_short": "Deals <Hun>Psyche DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/Mitsuki_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Mitsuki_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Mitsuki_Passive1", + "name": "Harmonics", + "type_name": "Passive Skill", + "desc": "<TextHLT>Nova Enhancement</>: Deals 3 instances of <Hun>Psyche DMG</> to the target after their Nova status ends, each equal to 50% of ATK.", + "context": "<Italic>How do you prove that sound is a wave? Toss a stone into water and see the ripples spread; toss a stone at someone, and you’ll hear wave after wave of noise.</>\r\n<Italic>\"…Am I supposed to laugh?\"</>\r\n<Italic>\"Aurelia's jokes aren't funny at all—\"</>\r\n<Italic>\"No way! People used to eat that up… you kids just have your humor standards way too high.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Mitsuki_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Mitsuki_Passive2", + "name": "Crescendo", + "type_name": "Passive Skill", + "desc": "Increases Aurelia's ATK by <NumGreen>1%</> for <NumGreen>5</>s when a jellyfish blast hits a target, up to <NumGreen>10</> stacks.", + "context": "<Italic>Strong… stronger… Super Sound… Ultimate Sound! Want it even louder? Then the drummer will just have to throw themselves into the drum headfirst!</>", + "icon": "/Game/UI/UI_Icon/Skill/Mitsuki_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Mitsuki_Passive3", + "name": "Boundless Sound", + "type_name": "Character Traits", + "desc": "Aurelia rides a jellyfish, gliding effortlessly through the city's streets and alleys. She can't climb or vault over obstacles, but her jump is higher, and she gains special gliding and swimming abilities.", + "context": "<Italic>Being unable to take a single step doesn't mean you can't keep moving forward. Let your heart be as free and boundless as the world—once you set out, there's nowhere you can't reach.</>", + "icon": "/Game/UI/UI_Icon/Skill/Mitsuki_Pas3", + "additional_desc": [], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_Mitsuki_01", + "name": "Perfect Fit", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_zydk", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Aurelia increases dish prices by an additional <Green2>0.12</> Fons." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Aurelia increases traffic by <Green2>1%</> for every 2 Beverage tag on dishes." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, customers leave additional tips upon departure." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Aurelia reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Aurelia increases traffic by <Green2>1.5%</> for every 2 Beverage tags on dishes." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Futuristic Prelude", + "desc": "Increases Crit Rate by <NumGreen>15%</> while in the <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">Cadenza</> state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1070_1", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Cadenza", + "desc": "Deals an additional <NumGreen>70%</> damage with jellyfish blasts and inflicts AoE DMG to enemies around the target." + } + ] + }, + { + "name": "Unique Melody", + "desc": "Enters the <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">Cadenza</> state for <NumGreen>5</>s after a successful Critical Dodge or casting Dissonance. Extends the duration by <NumGreen>5</>s if the state's already active. The <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">Cadenza</> state lasts for up to <NumGreen>12</>s.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1070_2", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Cadenza", + "desc": "Deals an additional <NumGreen>70%</> damage with jellyfish blasts and inflicts AoE DMG to enemies around the target." + } + ] + }, + { + "name": "Trio Rest", + "desc": "Increases Canon Chorus DMG by <NumGreen>20%</> while in the <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">Cadenza</> state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1070_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Cadenza", + "desc": "Deals an additional <NumGreen>70%</> damage with jellyfish blasts and inflicts AoE DMG to enemies around the target." + } + ] + }, + { + "name": "Staff Gap", + "desc": "Increases Aurelia's DEF by <NumGreen>20%</> when casting Staccato.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1070_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Simple Melody", + "desc": "Increases Canon Chorus's Crit Rate by <NumGreen>15%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1070_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Bygone Fugue", + "desc": "Increases the maximum stacks of Crescendo to 20. Grants 10 Crescendo stacks after casting Cadenza Aria.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1070_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Universal Harmony", + "desc": " Increases the skill levels of Cappella, Cadenza Aria, and Canon Chorus by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Shared Melody", + "desc": "Increases all allies' <Hun>Psyche DMG</> by <NumGreen>8%</> for <NumGreen>15</>s when entering the <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">Cadenza</> state or when <hot textstyle=\"TextEXPL\" param=\"nouns&MitsukiSkill\">its</> duration is extended. Resets the duration when reapplied.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [ + { + "name": "Cadenza", + "desc": "Deals an additional <NumGreen>70%</> damage with jellyfish blasts and inflicts AoE DMG to enemies around the target." + } + ] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1070/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_009", + "amount": 100 + }, + { + "item_id": "Food_078", + "amount": 100 + }, + { + "item_id": "Food_103", + "amount": 100 + }, + { + "item_id": "Flower0002", + "amount": 200 + }, + { + "item_id": "Flower0009", + "amount": 200 + }, + { + "item_id": "BigPoster004", + "amount": 200 + }, + { + "item_id": "Furniture_Light_002", + "amount": 400 + }, + { + "item_id": "Furniture_draw_006", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1070" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold" + ], + "amount": [ + 20, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1070" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1070" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1070" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1070" + ], + "amount": [ + 50000, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Hi, my name is Aurelia… Oh, is this one scaring you? Sorry, it gets excited when it meets a new friend… I hope you don't mind. Hmm? You're not scared? Great!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_meet_001" + }, + { + "name": "Chat: Advice", + "desc": "When playing the drums, never wear wide-leg pants! If you hit the pedal too hard, the pants can easily get caught in the bass drum beater…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_chat_001" + }, + { + "name": "Chat: Night Out", + "desc": "I like going out at night. There aren't a lot of people on the streets, so I don't have to worry about bumping into anyone. Though if they saw me floating on the road that late, they might get spooked…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_chat_002" + }, + { + "name": "Chat: Music", + "desc": "Every music genre has its own charm, and every song carries the unique emotions of its creator. But if you're asking for my top band… I can't pick just one. Let me put together a playlist instead!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_chat_003" + }, + { + "name": "Sunny", + "desc": "Another good day! The sun is bright and I'm feeling bright too!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_weather_001" + }, + { + "name": "Rainy", + "desc": "The rain drops are like thin threads. How cozy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_weather_002" + }, + { + "name": "Cold", + "desc": "It's so cold… Should I take a detour to Crazy Cat for a hot drink…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_weather_003" + }, + { + "name": "Hot", + "desc": "It's so warm… my jellyfish are feeling tepid. Let's rest in the shade.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning. Did you have a good night's sleep?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Hehe, I made this cake! Isn't it cute? Lemme give you a slice!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "The sunset is mesmerizing. Should I go to the coast before the sun sets?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_greet_003" + }, + { + "name": "Good Night", + "desc": "A good day needs a good night's sleep. Sleep early. I'll see you tomorrow.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_greet_004" + }, + { + "name": "Hobbies", + "desc": "Oh, there's a lot! I love trying all sorts of new things, though I tend to lose interest quickly… If there's one thing that's stayed with me, it would have to be gazing at the sea. The distant line where the sky meets the water and the gentle rhythm of the waves… puts my heart at ease, as if I'm a tiny note in a grand and eternal choir… All my worries fade away when I gaze at the sea.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_hobby_001" + }, + { + "name": "Worries", + "desc": "My go-to navigation app has been updating lately and keeps glitching out. Now, I get lost all the time. I've shown up late to my part-time job many times this week… My kind boss hasn't docked my pay, but I still feel bad about it… I might just get a paper map until the app gets fixed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_vexation_001" + }, + { + "name": "Topic: Jellyfish", + "desc": "Every now and then, you'll find jellyfish washed up on the shore, left behind by the retreating tide. Perhaps they've lost their way too… If you ever come across a jellyfish on the beach, please don't touch it. They may look soft and harmless, but many of them are venomous. Oh, the ones around me are completely harmless though, so don't worry!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_talk_001" + }, + { + "name": "Topic: Dangerous Driving", + "desc": "This one is just too large to fit on most forms of transportation. Fortunately, it's fast, so even when there's something urgent, not being able to board a vehicle isn't an issue… Hm? You're asking how fast? W-Well, let's just say, not fast enough to get lectured by Officer Whiskers for speeding through the city on a jellyfish.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_talk_002" + }, + { + "name": "Topic: Anomaly", + "desc": "If I hadn't taken on the mission to nullify Swallowtail that day, perhaps none of this would have happened. That anomaly was just as dangerous as it was beautiful… I know you're a very capable Anomaly Hunter, but please take good care of yourself. Not just for your own sake, but for the people who care about you and love you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "My ability is rather weak. I can only control jellyfish. But thanks to these little ones, I was able to return to a normal life. When I'm all by myself, they keep me company, so I never feel lonely. That's why I'm truly grateful to have an ability like this. It's just like they say, \"What suits you is what's best for you.\" It's that simple.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_self_001" + }, + { + "name": "About Myself: Rehabilitation", + "desc": "The doctor said I'll likely never make a full recovery. But if I keep up with rehab and get medical treatment, one day I might be able to stand again. You might think it's nothing more than a fleeting wish, and that I'm foolish for holding on to it… but I believe that before life reaches its end, anything is possible. If a miracle were to come, and I wasn't ready for it, wouldn't that be a shame?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_self_002" + }, + { + "name": "About Myself: Delicacies", + "desc": "There are many great eateries along Tamamochi Street where I work. The roast duck at Din's is always crispy on the outside and tender on the inside; Nekomaru Ramen is wonderful, but you need to watch out for the hot broth. My favorite is the custard buns from Bigmouth Baozi. I love holding one in my hands on cold days, then taking a bite to to warm, fragrant sweetness… it's pure bliss. Though if I eat too many and put on weight, I might burden this little one… I suppose I'll have to control myself.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_self_003" + }, + { + "name": "About Akane", + "desc": "Thank you for supporting Akane's return to the stage. It means a great deal to me as well. You're a drummer, too. I'm sure you understand. Akane is always so shiny on stage when I look from behind. It's as if she was born to perform… From now on, I'll keep on cheering for The Whoots!!!! Don't forget I've been your number one fan since your very first gig!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_about_001_01" + }, + { + "name": "Character Ascension I", + "desc": "As refreshing as the breeze!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Hmm, I can do better!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Hehe, the jellyfish are dancing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_ug_003" + }, + { + "name": "Gift Received I", + "desc": "What a thoughtful gift! Does that mean… we're already good friends?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Oh, I wanted this! Are you a fairy that makes my wishes come true?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Thank you! I'll prepare a gift for you too. It's going to be good!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "What a special gift…! Is today a special day?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "It's show time!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Let the ocean's anthem ring.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Hear the song that we must sing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Turn with galaxies in flight.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Draw the tides into the night.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "And let the melody take wing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Hehe, gotcha!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_containment_001" + }, + { + "name": "Containment II", + "desc": "Stay put in the container.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_containment_002" + }, + { + "name": "Nullification I", + "desc": "I hope the next one is just as easy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Mission accomplished. Thanks for helping!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Not bad at all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Don't forget to take it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Looks like good stuff.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Mhm, I'll keep it safe.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Feeling lucky. Will I get another free Refresh if I buy one?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "A token for today.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_windfall_006" + }, + { + "name": "Low Health I", + "desc": "I can… do this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_hp_001" + }, + { + "name": "Low Health II", + "desc": "Getting dizzy…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_hp_002" + }, + { + "name": "Low Health III", + "desc": "Ugh… must not… lose.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_hp_003" + }, + { + "name": "Heal I", + "desc": "Time for a bonus song!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_fh_001" + }, + { + "name": "Heal II", + "desc": "Phew, much better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_fh_002" + }, + { + "name": "Down I", + "desc": "Must be… on stage… again…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_dead_001" + }, + { + "name": "Down II", + "desc": "I haven't… learned…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_dead_002" + }, + { + "name": "Down III", + "desc": "Not like this…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_dead_003" + }, + { + "name": "Takedown I", + "desc": "Phew, dealt with!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_kill_001" + }, + { + "name": "Takedown II", + "desc": "Don't underestimate me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_kill_002" + }, + { + "name": "Damaged I", + "desc": "I'm alright.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_struck_001" + }, + { + "name": "Damaged II", + "desc": "It's just a scratch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "I'm okay… it doesn't hurt.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Can't be careless…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "When you're ready.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_deploy_001" + }, + { + "name": "Deploy II", + "desc": "I'll give you a hand.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Enter on the downbeat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "At your positions!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Everybody in sync!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_QTE_003" + }, + { + "name": "Glide I", + "desc": "Just like a bird.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_Fly_001" + }, + { + "name": "Glide II", + "desc": "Gotta land safe.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_Fly_002" + }, + { + "name": "Switch I", + "desc": "Safety first. Get some rest.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_Switch_001" + }, + { + "name": "Switch II", + "desc": "Time for the next set!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_Switch_002" + }, + { + "name": "Switch III", + "desc": "We'll take care of this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_Switch_003" + }, + { + "name": "Parry I", + "desc": "Ow, that was close!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_Parry_001" + }, + { + "name": "Parry II", + "desc": "Just on beat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "We're fast, you know!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Perfect rhythm!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC1029/Play_Vo_Char_NPC1029_DodgeCombo_002" + } + ] + } + }, + { + "id": "1072", + "name": "Linko", + "description": " ", + "element": [ + { + "element_id": "Nature", + "name": "Anima" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_lingke", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_lingke_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_fashionshop_lingke", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Burst DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_baofa" + }, + { + "name": "Follow-up Attack", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuijiagongji" + } + ], + "arcs_tags": { + "type_id": "3", + "name": "Plasma", + "icon": "/Game/UI/UI/player/YH_UI_icon_plasma" + } + }, + "reaction": [ + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1072_nighty", + "characterId": "1072", + "name": "Couch Potato", + "desc": "Linko's loungewear. The loose, comfy fit gives her plenty of room to stretch.\r\n\"When inspiration comes knocking, you have to be ready to answer.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_1_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_lingke_1", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_1_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_lingke1", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_lingke1", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1072_0", + "characterId": "1072", + "name": "Out of Range", + "desc": "Linko's lightweight everyday outfit. The \"TV\" on her back is a bit heavy, but it makes more sense if you think of it as a pet carrier.\r\n\"Beep-boop. 'Pet' Xiaozhen is ready to go.\"\r\n\"How many times do I have to tell you? I'm an evil spirit! An evil spirit!\"", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_lingke", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_lingke", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_lingke", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1072_school", + "characterId": "1072", + "name": "Faded Spring", + "desc": "Linko's school-inspired outfit. A crisp uniform, a spring in her step, and a route that never quite goes as planned.\r\n\"Take the scenic route. You might find a surprise or two.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_lingke_3", + "headIconBig": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_lingke3", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_lingke3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_lingke3", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1072_space", + "characterId": "1072", + "name": "Surfing Among Stars", + "desc": "Linko's imagination knows no limits. Ever since she found this outfit, she's wondered whether she can tune in to signals from beyond this world.\r\nHer backpack holds a tiny garden and the courage to keep going. Plants grow, and so does the journey.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_2_256", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_lingke_2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_lingke2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_lingke2", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1280, + 1382, + 1485, + 1587, + 1690, + 1792, + 1894, + 1997, + 2099, + 2202, + 2304, + 2406, + 2509, + 2611, + 2714, + 2816, + 2918, + 3021, + 3123, + 3226, + 3328, + 3430, + 3533, + 3635, + 3738, + 3840, + 3942, + 4045, + 4147, + 4250, + 4352, + 4454, + 4557, + 4659, + 4762, + 4864, + 4966, + 5069, + 5171, + 5274, + 5376, + 5478, + 5581, + 5683, + 5786, + 5888, + 5990, + 6093, + 6195, + 6298, + 6400, + 6502, + 6605, + 6707, + 6810, + 6912, + 7014, + 7117, + 7219, + 7322, + 7424, + 7526, + 7629, + 7731, + 7834, + 7936, + 8038, + 8141, + 8243, + 8346, + 8448, + 8550, + 8653, + 8755, + 8858, + 8960, + 9062, + 9165, + 9267, + 9370 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 82, + 86, + 90, + 94, + 98, + 103, + 107, + 111, + 115, + 119, + 123, + 127, + 131, + 135, + 139, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 185, + 189, + 193, + 197, + 201, + 205, + 209, + 213, + 217, + 221, + 226, + 230, + 234, + 238, + 242, + 246, + 250, + 254, + 258, + 262, + 267, + 271, + 275, + 279, + 283, + 287, + 291, + 295, + 299, + 303, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 349, + 353, + 357, + 361, + 365, + 369, + 373, + 377, + 381, + 385, + 390, + 394, + 398, + 402, + 406 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 76, + 82, + 88, + 94, + 100, + 106, + 112, + 119, + 125, + 131, + 137, + 143, + 149, + 155, + 161, + 167, + 173, + 179, + 185, + 192, + 198, + 204, + 210, + 216, + 222, + 228, + 234, + 240, + 246, + 252, + 258, + 264, + 271, + 277, + 283, + 289, + 295, + 301, + 307, + 313, + 319, + 325, + 331, + 337, + 344, + 350, + 356, + 362, + 368, + 374, + 380, + 386, + 392, + 398, + 404, + 410, + 416, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 496, + 502, + 508, + 514, + 520, + 526, + 532, + 538, + 544, + 550, + 556 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_04", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": " ", + "description": " ", + "birthday": "November 7", + "homePlace": "Eibon Antique Shop", + "abilityName": "Ghosteater", + "introduction": "Unrivaled at Eibon and as scary as she looks.", + "voiceChinese": "胡影佳,洪海天", + "voiceEnglish": "Emi Lo,Salli Saffioti", + "voiceJapanese": "小倉唯,村瀬迪与", + "voiceKorean": "김서현,김예림" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "The main obstacles to Eibon owner Hotori's dreams of getting rich are, aside from the owner's own issues, the unavoidable compensation fees after every commission from the \"Eibon Ace Trio (self-proclaimed),\" especially for things Sakiri breaks. What Kiroumaru swallows is small stuff, but when Sakiri gets really mad and swings Kiroumaru around, well…\nOf course, Sakiri gets a good scolding from Hotori for pulling stunts like that, but judging from Eibon's monthly bills and Adler's furrowed brow, the effect probably isn't great.\n\nEven though Sakiri brings all sorts of trouble to Eibon every time she goes on quests, if you leave her idle in the shop…\nOne second she's reading \"Weekly Fantasy,\" the next she might grab some scene from the manga and get Nanally to take her out for fun, ahem, building The Coluccis. If she doesn't follow Nanally out to cause trouble, then poor Taygedo gets it instead. And even if Sakiri miraculously stays put in the shop for once, Kiroumaru can still create some accidents…\n\nTrouble seems to follow Sakiri wherever she goes, but unlike Nanally, Sakiri never causes major disasters and can even bail Nanally out when it counts. While it looks like Nanally is the one dragging Sakiri and Edgar around everywhere for The Coluccis, when you really think about it… maybe Sakiri is actually the most reliable one?\n\nOh, and if you don't want to get hit with Kiroumaru's \"Memory Correction Technique,\" remember this well: don't get curious about the things Sakiri sneakily throws away every day, or else…" + }, + { + "name": "Colucci Family, Second in Command", + "desc": "Personally certified by the Ichi-daime of the Coluccis, the cornerstone of growing bigger, getting stronger, and reaching new heights!\n\"Sakiri! Edgar! I just thought of a new plan for the family!\"\n\"Seriously? Again? Should we make a run for it while we can?\"\n\"If we don't listen… Nanally's gonna keep going on about it next time…\"\n\"Give me a break…\"\n\"Come on! This'll be the meeting that decides the Coluccis' fate!\"" + }, + { + "name": "Honest Popping Candy", + "desc": "\"Hehe, Edgar, what exactly did Sakiri say after she ate that Honest Popping Candy last time? Taygedo said I missed quite a show!\"\n\"Um… Sakiri told me not to say…\"\n\"Oh come on, it's fine, Sakiri's not…\"\n\"Dummy! What are you whispering about with Nanally?! Time to get to work, Kiroumaru!\"\n\"No no no no no no! I don't know anything yet!\"" + }, + { + "name": "Kiroumaru", + "desc": "An Anomaly that seems born just to eat! It eats food, it eats radios, it eats bike wheels, it eats tires, eat eat eat eat eat eat eat eat eat!\n\"Sakiri, can I eat this? Sakiri, can I eat that?\"\nAnyway, as long as it can stay by Sakiri's side and eat eat eat, it's happy! Always following Sakiri around, eat eat eat!" + }, + { + "name": "\"With everyone now…\"", + "desc": "A melody few have ever heard, Sakiri never hums this nursery rhyme in front of others.\nFor someone who acts too mature for her age most of the time, this is one of those rare moments when she actually shows her inner child.\nThough Sakiri always keeps quiet about it, perhaps we can glimpse something from this song…\nFrom this lonely and eerie nursery rhyme, we might see some hints of her past." + }, + { + "name": "\"A place that won't abandon me\"", + "desc": "At the end of the \"Pawn Moonlight\" incident, Otro gave Sakiri a gift: a box containing little bears designed to look like Eibon members.\nSometimes Sakiri hides in her room and takes out the bears to play with them, surrounded by the little figures like she's playing house.\nThough she's never said it out loud, she really loves this gift." + } + ], + "melee": [ + { + "id": "GA_Radio072_Melee", + "name": "Basic Attack: Poltergeist CQC", + "type_name": "Basic Attack", + "desc_name": [ + "Basic Attack: Poltergeist CQC", + "Basic Attack: Spectral Smack", + "Basic Attack: Spectral Entrance", + "Basic Attack: Spectral Rush", + "极限反击:挨打必须还「手」!" + ], + "desc": [ + "Casts Poltergeist CQC to perform up to 5 consecutive attacks, dealing <Ling>Anima DMG</>. Builds up Modulation points with each hit.\r\nCasts Full-Frequency Pulse to consume Modulation points and enhance the <hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">Synced Strike</> it triggers.", + "「普通攻击:恶灵CQC」释放期间,长按普通攻击触发,灵可双掌拍击当前目标,造成<Ling>灵属性异能伤害</>。", + "灵可滞空时点按普通攻击,落地后造成1次范围性的<Ling>灵属性异能伤害</>,伤害随下落高度升高而提升,最高提升1倍。", + "灵可处于后台时,每隔8秒,将会派出小贞偷袭目标,进行一次攻击并施加<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoXiaozhenMark\">「小鬼打这里!」</>标记。", + "触发极限闪避后使用「普通攻击:恶灵CQC」触发,灵可冲向目标造成4次范围性的<Ling>灵属性异能伤害</>并积攒「谐频」点数。" + ], + "desc_short": [ + "造成<Ling>灵属性异能伤害</>,积攒「谐频」点数。", + "「普通攻击:恶灵CQC」释放期间长按普通攻击,造成<Ling>灵属性异能伤害</>。", + "造成<Ling>灵属性异能伤害</>。", + "灵可处于后台时,定期给敌人施加<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoXiaozhenMark\">「小鬼打这里!」</>标记。", + "造成<Ling>灵属性异能伤害</>,积攒「谐频」点数。" + ], + "context": "<Italic>\"Xiaozhen, Xiaozhen, I've got an idea… What if you threw punches like Ora Puncher? So fast, your fists would be nothing but afterimages!\"</>\r\n<Italic>\"…Why bother? Wouldn't it be faster to knock them out with one good punch?\"</>\r\n<Italic>\"You just don't get it! It's an art form!\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Linko_Melee", + "additional_desc": [ + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + }, + { + "name": "Hit 'Em Here!", + "desc": "「小鬼打这里!」是一种施加给敌方目标的标记,队伍前台角色使用变轨技能命中目标时,将消耗该标记,并触发灵可的「同频合击」攻击目标,同时积攒「谐频」点数与环合值。场上同时最多存在1个「小鬼打这里!」标记,标记可持续10秒。" + } + ], + "stats": [ + { + "id_stats": "GE_Player_Radio072_Melee1_Damage", + "name": "「普通攻击:恶灵CQC」一段伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 85, + 91, + 99, + 107, + 115, + 124 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_Melee2_Damage", + "name": "「普通攻击:恶灵CQC」二段伤害倍率", + "icon": "", + "value_name": "{0}%*2", + "values": [ + [ + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_Melee3_Damage", + "name": "「普通攻击:恶灵CQC」三段伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 40, + 43, + 47, + 50, + 55, + 59, + 64, + 69, + 74, + 80, + 87, + 94, + 101 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_Melee4_1_Damage", + "name": "「普通攻击:恶灵CQC」四段伤害倍率", + "icon": "", + "value_name": "{0}%+{1}%+{2}%*5+{3}%", + "values": [ + [ + 13, + 14, + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33 + ], + [ + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59, + 64, + 69, + 75 + ], + [ + 13, + 15, + 16, + 17, + 18, + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35 + ], + [ + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 59, + 63, + 68, + 74, + 80, + 86 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_Melee5_Damage", + "name": "「普通攻击:恶灵CQC」五段伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 74, + 79, + 86, + 93, + 100, + 108, + 117, + 126, + 137, + 147, + 159, + 172, + 186 + ] + ] + }, + { + "name": "环合值", + "icon": "", + "value_name": "{0}" + }, + { + "name": "积攒「谐频」点数", + "icon": "", + "value_name": "25" + }, + { + "id_stats": "GE_Player_Radio072_Branch_Damage", + "name": "「普通攻击:恶灵大巴掌」伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_AirAttack_Damage", + "name": "下落攻击伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 55, + 59, + 64, + 69, + 74, + 80, + 87, + 94, + 101, + 109, + 118, + 128, + 138 + ] + ] + }, + { + "id_stats": "GE_Xiaozhen_Skill1_Damage", + "name": "小贞攻击伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100, + 107, + 116, + 125 + ] + ] + }, + { + "name": "消耗标记积攒「谐频」点数", + "icon": "", + "value_name": "34" + }, + { + "name": "消耗标记积攒环合值", + "icon": "", + "value_name": "15" + }, + { + "id_stats": "GE_Player_Radio072_PerfectEvadeAttack_Damage", + "name": "极限反击倍率", + "icon": "", + "value_name": "{0}%*3+{1}%", + "values": [ + [ + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59, + 64 + ], + [ + 121, + 131, + 141, + 153, + 165, + 178, + 192, + 208, + 224, + 242, + 262, + 283, + 306 + ] + ] + }, + { + "name": "积攒「谐频」点数", + "icon": "", + "value_name": "16" + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Radio072_Skill", + "name": "Redirect Skill: Full-Frequency Pulse", + "type_name": "Redirect Skill", + "desc": "释放「变轨技能:瞬息全频振」,灵可激发异能,用幽灵能量体轰击目标,造成最多4段<Ling>灵属性异能伤害</>,并呼唤小贞或一名队友发动<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>;此时,将出现可选择发起攻击者的轮盘,可通过点按选择一名队友或者小贞,来释放该角色的<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>,造成对应的属性伤害。该次<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>将获得伤害增益,且会消耗此前积攒的「谐频」点数,转化为额外的伤害增益。\r\n在点选队友、发动<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>的这段时间内,将有短暂的暂停计时效果。\r\n队友不可行动或未编入队伍时,小贞会替代轮盘中队友的位置,每额外有一个小贞,选择小贞触发的<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>额外获得一次伤害增益。", + "desc_short": "点按发动,造成<Ling>灵属性异能伤害</>,选择并发动小贞或一名同队角色的<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>,造成对应属性异能伤害,并消耗已有「谐频」点数,增幅此次<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>的伤害。", + "context": "<Italic>「瞧好了!这就是我们热血沸腾的组合技——」</>\r\n<Italic>「……话说小鬼,刚刚那个人我们真的认识吗?」</>\r\n<Italic>「我没看清楚是谁——但总之接上了!」</>", + "icon": "/Game/UI/UI_Icon/Skill/Linko_Skill", + "additional_desc": [ + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + } + ], + "stats": [ + { + "id_stats": "GE_Player_Radio072_Skill1_Damage", + "name": "轰击伤害倍率", + "icon": "", + "value_name": "{0}%+{1}%+{2}%+{3}%", + "values": [ + [ + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44 + ], + [ + 13, + 14, + 16, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32, + 34 + ], + [ + 23, + 25, + 27, + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 59 + ], + [ + 44, + 48, + 52, + 56, + 60, + 65, + 70, + 76, + 82, + 89, + 96, + 104, + 112 + ] + ] + }, + { + "name": "「谐频」点数上限", + "icon": "", + "value_name": "100" + }, + { + "name": "「谐频」基础增伤", + "icon": "", + "value_name": "{0}%" + }, + { + "name": "「谐频」最大额外增伤", + "icon": "", + "value_name": "40%" + }, + { + "name": "每个小贞额外增伤", + "icon": "", + "value_name": "{0}%" + }, + { + "name": "轰击伤害环合值", + "icon": "", + "value_name": "{0}" + }, + { + "id_stats": "GA_Radio072_Skill", + "name": "冷却时间", + "icon": "", + "value_name": "{0}秒", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Radio072_UltraSkill", + "name": "Oversync", + "type_name": "Ultimate", + "desc": "释放「极轨终结:超负荷共鸣」,灵可进入异能过载状态,展开持续一定时间的「共鸣领域」,并与至多3名同队角色达成同频。可以通过点按变轨技能依次呼唤队友释放的<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>造成范围伤害,最多释放3次;\r\n等待异能过载状态结束、或者点按「极轨终结:超负荷共鸣」提前结束时,灵可释放过载的噪波,对「共鸣领域」内的所有敌方单位造成多次范围性的<Ling>灵属性异能伤害</>和一次<Ling>灵属性爆发伤害</>。该<Ling>灵属性爆发伤害</>根据目标身上的负面状态种类数提升。\r\n在「超负荷共鸣」持续时间结束后,灵可的「共鸣领域」将延续一段时间。「共鸣领域」内队伍角色触发的援护技均视为<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>,视为追加攻击伤害,并额外享受「精确调频」、「星星也说悄悄话!」、「世界将予你回声!」的加成。", + "desc_short": "点按发动,展开持续一定时间的「共鸣领域」;点按变轨技能发动同队角色<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>,最多发动三次;再次点按极轨终结技能,造成范围性<Ling>灵属性异能伤害</>。\r\n「共鸣领域」内,角色援护技均视为<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>。", + "context": "<Italic>No signal is ever truly lost. No one is ever beyond reach. No call goes unheard, and no distance can keep us apart…</>\r\n<Italic>The airwaves will always bring us together, until meeting for the first time feels like finding each other again.</>", + "icon": "/Game/UI/UI_Icon/Skill/Linko_UltraSkill", + "additional_desc": [ + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + } + ], + "stats": [ + { + "id_stats": "GE_Player_Radio072_UltralSkillLTE_AOE_Damage", + "name": "范围伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 73, + 79, + 85, + 92, + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_UltraSkill2_Damage", + "name": "多段伤害倍率", + "icon": "", + "value_name": "{0}%*6", + "values": [ + [ + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106, + 115, + 124, + 134, + 145 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_UltraSkill3_Damage", + "name": "爆发伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 735, + 794, + 857, + 926, + 1000, + 1080, + 1166, + 1260, + 1361, + 1469, + 1587, + 1714, + 1851 + ] + ] + }, + { + "name": "每种负面伤害增伤", + "icon": "", + "value_name": "{0}%" + }, + { + "name": "负面增伤上限", + "icon": "", + "value_name": "20%" + }, + { + "id_stats": "GA_Radio072_UltraSkill", + "name": "冷却时间", + "icon": "", + "value_name": "{0}秒", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GA_Radio072_UltraSkill", + "name": "消耗终结能量", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + }, + { + "name": "领域持续时间", + "icon": "", + "value_name": "8秒" + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Radio072_QTE", + "name": "Spectral Cross", + "type_name": "Support Skill", + "desc": "灵可与小贞对目标打出认真一拳,造成1次范围性<Ling>灵属性异能伤害</>。\r\n灵可在战斗中可通过:\r\n击碎<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoXiaozhenMark\">「小鬼打这里!」</>标记,释放「变轨技能:瞬息全频振」,释放「极轨终结:超负荷共鸣」三种方式召唤队友进行<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>,<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>的伤害倍率受灵可「援护技:恶灵左直拳!」技能等级影响。", + "desc_short": "造成<Ling>灵属性异能伤害</>。\r\n<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>的伤害倍率受灵可「援护技:恶灵左直拳!」技能等级影响。", + "context": "<Italic>\"What if some creep comes after me when you're not around…?\"</>\r\n<Italic>\"Run. Those tiny legs of yours can really move.\"</>\r\n<Italic>\"No way! Wait, I know. I'll hit them with the TV!\"</>\r\n<Italic>\"No. Absolutely not. Under any circumstances.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Linko_QTE", + "additional_desc": [ + { + "name": "Hit 'Em Here!", + "desc": "「小鬼打这里!」是一种施加给敌方目标的标记,队伍前台角色使用变轨技能命中目标时,将消耗该标记,并触发灵可的「同频合击」攻击目标,同时积攒「谐频」点数与环合值。场上同时最多存在1个「小鬼打这里!」标记,标记可持续10秒。" + }, + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + } + ], + "stats": [ + { + "id_stats": "GE_Player_Radio072_QTE_Damage", + "name": "「恶灵左直拳!」伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_LTE_Damage", + "name": "灵可「同频合击」伤害倍率", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 500, + 540, + 583, + 629, + 680, + 734, + 793, + 856, + 925, + 999, + 1079, + 1165, + 1259 + ] + ] + }, + { + "id_stats": "GE_Player_Radio072_Skill1_ThrowXiaozhen_Damage", + "name": "小贞「同频合击」伤害倍率", + "icon": "", + "value_name": "{0}%*3+{1}%", + "values": [ + [ + 33, + 36, + 38, + 41, + 45, + 48, + 52, + 57, + 61, + 66, + 71, + 77, + 83 + ], + [ + 100, + 108, + 116, + 126, + 136, + 146, + 158, + 171, + 185, + 199, + 215, + 233, + 251 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Radio072_Passive_1", + "name": "Weakness Radar", + "type_name": "Passive Skill", + "desc": "灵可在队伍中时,覆纹的额外追加攻击伤害提升至30%;受覆纹状态影响的目标,所受追加攻击伤害提高10%。", + "desc_short": "灵可在队伍中时,覆纹的额外追加攻击伤害提升至30%;受覆纹状态影响的目标,所受追加攻击伤害提高10%。", + "context": "<Italic>The faint static in that frequency felt like a crack no one else could see. How had it formed? And why did it refuse to heal?</>\r\n<Italic>Sometimes, for just a moment, the thought left her quietly heartsick.</>", + "icon": "/Game/UI/UI_Icon/Skill/Linko_Passive1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Radio072_Passive_2", + "name": "Precision Tuning", + "type_name": "Passive Skill", + "desc_name": "Precision Tuning", + "desc": "触发<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>时,将根据触发此次<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>的角色,降低目标对应属性8%的异能抗性,持续12秒。目标身上可同时存在多种属性的减抗效果,<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>造成的同种属性的减抗效果不可叠加,重复触发将刷新持续时间。", + "desc_short": "触发<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>时,将根据触发此次<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>的角色,降低目标对应属性8%的异能抗性,持续12秒。目标身上可同时存在多种属性的减抗效果,<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>造成的同种属性的减抗效果不可叠加,重复触发将刷新持续时间。", + "context": "<Italic>Words could never come close to expressing what we feel. But in this moment, our souls finally meet without distance between them.</>", + "icon": "/Game/UI/UI_Icon/Skill/Linko_Passive2", + "additional_desc": [ + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Radio072_Passive_3", + "name": "Linko Rockethead Mk I", + "type_name": "Character Traits", + "desc_name": "Linko Rockethead Mk I", + "desc": "非战斗状态下长按普通攻击,灵可借助小贞的幽灵手臂蓄力,松开后会将灵可弹射出去,蓄力时间越长,弹射力度越大,最多蓄力2秒。", + "desc_short": "非战斗状态下长按普通攻击,灵可借助小贞的幽灵手臂蓄力,松开后会将灵可弹射出去,蓄力时间越长,弹射力度越大,最多蓄力2秒。", + "context": "<Italic>\"Shoot, we're late! Xiaozhen, fire up the emergency launch system! Aim for the BAC's second-floor window!\"</>\r\n<Italic>\"…Or you could just take the phone booth like a normal person.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Linko_SpecialAbility", + "additional_desc": [], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_Radio072_01", + "name": "<!>10", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_cqmx", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> <!>11" + }, + { + "level": "2", + "desc": "<Term>Level 2:</> <!>12" + }, + { + "level": "3", + "desc": "<Term>Level 3:</> <!>13" + }, + { + "level": "4", + "desc": "<Term>Level 4:</> <!>14" + }, + { + "level": "5", + "desc": "<Term>Level 5:</> <!>15" + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + }, + { + "id": "City_Ability_Radio072_02", + "name": "<!>16", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_fxy", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> <!>17" + }, + { + "level": "2", + "desc": "<Term>Level 2:</> <!>18" + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "All Frequencies Live", + "desc": "灵可处于后台时,「普通攻击:恶灵闪击战!」的出现间隔缩短<NumGreen>25%</>。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1072_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Friendly Haunting", + "desc": "「极轨终结:超负荷共鸣」的<Ling>灵属性爆发伤害</>的倍率提升<NumGreen>15%</>。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1072_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Across the Airwaves", + "desc": "释放「极轨终结:超负荷共鸣!」将刷新「变轨技能:瞬息全频振」冷却时间。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1072_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Starlit Whispers", + "desc": "在「共鸣领域」内,每次触发<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>时额外造成一次<NumGreen>100%</>倍率的范围性<Ling>灵属性异能伤害</>。该攻击可消耗<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoXiaozhenMark\">「小鬼打这里!」</>标记并触发<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1072_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + }, + { + "name": "Hit 'Em Here!", + "desc": "「小鬼打这里!」是一种施加给敌方目标的标记,队伍前台角色使用变轨技能命中目标时,将消耗该标记,并触发灵可的「同频合击」攻击目标,同时积攒「谐频」点数与环合值。场上同时最多存在1个「小鬼打这里!」标记,标记可持续10秒。" + } + ] + }, + { + "name": "Love, Loud and Clear", + "desc": "「变轨技能:瞬息全频振」触发的<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>可以触发环合效果。若所选队友与灵可无法发生环合,则本次<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>获得20%增伤。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1072_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + } + ] + }, + { + "name": "The World Answers", + "desc": "灵可在队伍时,队伍角色的<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>额外增加<NumGreen>25%</>暴击率,并且队友的<hot textstyle=\"TextEXPL\" param=\"nouns&LinkoLTE\">「同频合击」</>可以获得充能效果。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1072_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Synced Strike", + "desc": "「同频合击」是一种特殊的援护技,造成的伤害视为追加攻击伤害,伤害属性为发起「同频合击」角色的属性,如果由小贞发起「同频合击」,则伤害为灵属性。\r\n通常情况下,「同频合击」不会触发环合反应,且伤害受灵可面板和援护技技能等级影响。" + } + ] + } + ], + "resonance": [ + { + "name": "Shared Pulse", + "desc": "「援护技:恶灵左直拳!」,「变轨技能:瞬息全频振」,「极轨终结:超负荷共鸣」等级+1;灵可自身的攻击力提升10%。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Perfect Reception", + "desc": "「共鸣领域」持续时间延长5秒,期间全队获得12%灵和咒属性增伤。", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + -1, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "value": 8 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Furniture_Gacha_Pink_005", + "amount": 100 + }, + { + "item_id": "Food_027", + "amount": 100 + }, + { + "item_id": "Food_093", + "amount": 100 + }, + { + "item_id": "Flower0009", + "amount": 200 + }, + { + "item_id": "BigPoster004", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_Pink_002", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_002", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "SpecialGift_1072", + "amount": 1200 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1072" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1072" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Friendship_3_1072", + "Gold" + ], + "amount": [ + 20, + 1, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1072" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1072", + "Friendship_4_1072" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1072" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1072", + "Fashion_character_1072_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Beep-boop, beep-boop—Calling the Appraiser, this is Linko from ETD-6, currently working on operation \"Let's Hang Out.\" Please respond… or give me a nod.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_meet_001" + }, + { + "name": "Chat: Field Duty", + "desc": "The next section to patrol is… Umm… I'll just go with the flow.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_chat_001" + }, + { + "name": "Chat: Movies", + "desc": "Appraiser, Appraiser! There's a new paranormal movie at Floe Cinema! Wanna see it together?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_chat_002" + }, + { + "name": "Chat: Hethereau", + "desc": "Hethereau is a pretty accepting city. I run into all kinds of fun stuff on my patrols, and the citizens are used to strange things happening from time to time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_chat_003" + }, + { + "name": "Sunny", + "desc": "They say that if you let the sun shine on your face, you'll get this warm and fuzzy feeling, like a cat whisking its tail on your face…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_weather_001" + }, + { + "name": "Rainy", + "desc": "I really love the sound of rain falling on empty soda cans… if I lined up a few cans with different pitches, could I compose a song?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_weather_002" + }, + { + "name": "Cold", + "desc": "So cold… If only Xiaozhen's ghost fire could warm me up…\r\n(Xiaozhen:Huh? How can I do that? I'm not some scorching spirit!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_weather_003" + }, + { + "name": "Hot", + "desc": "It's so warm… If I wrapped Xiaozhen around my neck, I'd feel a lot better… Xiao… zhen…\r\n(Xiaozhen:No way! Not even a ghost will leave her TV in this hot weather!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Morning, Appraiser… Oof… I went to bed late last night, hah…\r\n(Xiaozhen: The little scamp stayed up late again. Even ghosts go to bed earlier…)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Appraiser, Appraiser, are dreams from naps different from the ones you have at night? Do dreams work like movies in theaters, with matinee showings and late-night showings?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "The sun's setting. Soon, the city's many signals will slowly quiet down, just like the white foam of the waves hissing away as the tide returns to the sea.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_greet_003" + }, + { + "name": "Good Night", + "desc": "The universe sings a lullaby every night, sometimes it's the stars, sometimes it's the moon… Appraiser, if only you could hear it too.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_greet_004" + }, + { + "name": "Hobbies", + "desc": "I got this big cabinet at home stuffed with movie discs. Each night, I pick one randomly and watch it with Xiaozhen. I love alien and paranormal stuff, but Xiaozhen hates them. She always says why bother watching fake special effects when she, an actual spirit, is the real deal…\r\n(Xiaozhen: Hmph! If they ever cast this evil spirit as the antagonist, I'll make a movie that's a thousand times scarier!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_hobby_001" + }, + { + "name": "Worries", + "desc": "Worries… I've never thought about any. If I must say, I guess I don't have the answers to certain questions. Like… where to catch a shiny Tamachi, why Exe is always mad at Elyms, how to get Xiaozhen to admit she's cute, what the radio waves from deep space actually sound like… and, whether people tuned to different frequencies can really understand each other… so many questions, so few answers.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_vexation_001" + }, + { + "name": "Topic: Frequency", + "desc": "The world is like a radio station. Humans, anomalies, and everything else all broadcast their unique signal on their private channels. Whenever I pick up an interesting signal, I go look for where it came from… Usually, the stranger the signal, the more surprising its source turns out to be: like a philosophical water bird standing by the river, contemplating life; or some local resident standing in a wheat field with a pot on their head, trying to summon aliens; or a location anomaly that hates being alone and craves visitors.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_talk_001" + }, + { + "name": "Topic: Headset", + "desc": "The Bureau gave me this customized headset. I think it's called… the \"Static Sifter Headset\"? I turn this dial, and it clears out the noise, letting me focus and search for a specific frequency, kind of like a radio. It also doubles as regular headphones. I use it to listen to rock music from anomalies, compilations of oddity calls, or white noise from anomalous realms… stuff like that. The sound quality's great.\r\n(Xiaozhen:What in Hethereau do you listen to…)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_talk_002" + }, + { + "name": "Topic: Tamachi", + "desc": "Tamachi GO is a game about electronic pets. It used to be insanely popular. Tons of players flooded the streets to catch pets and battle. Not a lot of people play it these days… Heheh, In fact, before you stands one of Hethereau's top five Tamachi masters—just one step away from catching them all—well, counting shiny ones and variants, more like—three or four steps away!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "I can sense the frequencies of the people around me. If I focus and listen closely to one of them, there's this resonance that gradually sharpens, until at some point, everything feels transparent and encompassing, like a heartbeat perfectly in sync, linking me straight to the source of that signal, understanding everything, sharing everything—no more misunderstandings or barriers in the way… I long for that feeling, even just for a fleeting moment.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_self_001" + }, + { + "name": "About Myself: Battle", + "desc": "I hope the way Xiaozhen and I fight alongside each other doesn't scare you. Those big hands are actually Xiaozhen's. As for how we make it work… if I'm synced enough with a certain frequency, sometimes I can fully resonate with its source… It's like we share emotions, feelings, powers, and act as one… It feels like some kind of power-up state? It's hard to keep that going though. Right now, Xiaozhen's the only one I can keep a stable resonance with…\r\n(Xiaozhen:Huh? Am I not enough for you? Why don't you go ask those baddies you arrested about how I scared the heck outta them! Can't believe this scamp wants more, humph…)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_self_002" + }, + { + "name": "About Myself: Family", + "desc": "Both my mom and dad are Espers. Dad's power is sinking into the couch for a whole day and binging through movies quietly. Mom's power is talking nonstop while walking through a dozen streets without needing rest. I inherited both of their powers, but maybe because they are total opposites, I just got a watered-down power. Compared to them, I just have an ordinary love for movies and going out for fun…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_self_003" + }, + { + "name": "About Myself: Work", + "desc": "Unit-6's job… simply put, is catching people who use anomalies or their Esper Ability to do bad things. My day-to-day is using my powers to search for baddies and track them down. Usually, Exe shares with me intel about a target, like where they've been spotted, aliases they've used, or what websites they've browsed, and what kind of music they like, stuff like that. Once I get a feel, I can figure out what their frequencies sounds like, then I just go around the city listening for where they're coming from… How does it actually work? Um… I don't know, it's basically just… going with the vibe?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_self_004" + }, + { + "name": "About Chaos", + "desc": "Frequency from Chaos tends to be noisy—it goes on and on, like just his chatters. His channel only goes quiet when he faces Esper criminals. In those times, his signal rumbles and growls, almost like some wild beast… Though we team up for many missions, we often end up splitting up because he wanders off while tailing a target… I mean, obviously he's the one who gets lost when I'm the one on the right path.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_about_002" + }, + { + "name": "About Xiaozhen", + "desc": "The first time I met Xiaozhen was deep inside an anomalous realm. Back then, I picked up a frequency that felt like… a CRT TV screen that was just switched off—warm but with some static. I listened as I searched for the source, then I found an old TV. Once I plugged it in, Xiaozhen appeared on the screen, curled up like a stray cat sleeping in a tattered cardboard box… Yep, it's the little TV I carry on my back, that's her home, and I'm the one who carries her home around. That makes me her family.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_about_005" + }, + { + "name": "About ETD-6", + "desc": "You want to know more about us? Let me think… Actually, Exe does smile. Sometimes when we talk about old games, he gets this nostalgic smile, but then he sinks right back into gloom… Big sis Elyms is very kind, but sometimes I catch her telling Exe things too difficult for me to understand. I really hope she's not bullying the captain… As for Chaos, he always says Dally is nothing but a construct he created with his power, but honestly, he treats the hound really well… As for me, umm… Oh right, I'm actually an alien.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_about_006" + }, + { + "name": "Character Ascension I", + "desc": "Oh, this feeling… That's a first.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "What? Linko is… evolving!\r\n(Xiaozhen:She's evolving! Just backwards.)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Linko's final evolution—umm, what should I evolve into… Ultimate Linko!\r\n(Xiaozhen:You never get bored…)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Oh, wow! Appraiser, how did you know I wanted this? Does that mean… you're receiving my frequency?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_gift_001" + }, + { + "name": "Gift Received II", + "desc": "I like this a lot. Thank you, Appraiser… I knew we were in sync.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Oh, the unlimited bounties of nature!\r\n(Xiaozhen: Oi, that's from the Appraiser, not from mother nature.)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I'll treasure this. Thank you, Appraiser.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Time to eat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Knock them all away!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Hey yah! (Yahoo!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_skill_003_01" + }, + { + "name": "Ultimate I", + "desc": "Get 'em, Kiroumaru!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Watch out, fools!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Watch your step… (Gotcha!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_aoe_UI_003_01" + }, + { + "name": "Containment I", + "desc": "Anomaly contained. Time to catch Tamachis.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_containment_001" + }, + { + "name": "Containment II", + "desc": "My containment index is more complete!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_containment_002" + }, + { + "name": "Nullification I", + "desc": "Its frequency… gone.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Mission accomplished, Linko gets an EXP boost!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Appraiser, Appraiser! There's good stuff here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "It's been here all the time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "The source of the signal… found it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Phew. Glad I didn't miss it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "It's been waiting for us for a while.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Lalala!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Concen… trate…\r\n(Xiaozhen: Scamp, hang in there!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_hp_001" + }, + { + "name": "Low Health II", + "desc": "(Xiaozhen: Hey, this is bad!)\r\nIt's not… over!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_hp_002" + }, + { + "name": "Low Health III", + "desc": "(Xiaozhen: Scamp, don't take any more hits!)\r\nI can… do this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_hp_003" + }, + { + "name": "Heal I", + "desc": "Phew—I'll keep going.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_fh_001" + }, + { + "name": "Heal II", + "desc": "Mm, much better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_fh_002" + }, + { + "name": "Down I", + "desc": "Xiao… zhen… sorry…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_dead_001" + }, + { + "name": "Down II", + "desc": "I can't… hear…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_dead_002" + }, + { + "name": "Down III", + "desc": "(Xiaozhen: Hey, scamp… scamp!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_dead_003_xz" + }, + { + "name": "Takedown I", + "desc": "Phew… all done.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_kill_001" + }, + { + "name": "Takedown II", + "desc": "(Xiaozhen:Join the dead!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_kill_001" + }, + { + "name": "Damaged I", + "desc": "……\r\n(Xiaozhen:It's payback time!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_struck_001" + }, + { + "name": "Damaged II", + "desc": "I got hit…\r\n(Xiaozhen:Then hit back!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "(Xiaozhen:Tch, scamp!?)\r\nI'm… alright!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Uh… ngh…\r\n(Xiaozhen:You thug!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Let's make a scene together!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Kiroumaru, now you may eat!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Taking off!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Over here!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Kiroumaru Overdrive!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC008/Play_Vo_Char_NPC008_QTE_003_glw" + }, + { + "name": "Glide I", + "desc": "Weee!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_Fly_001" + }, + { + "name": "Glide II", + "desc": "Destination, where?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_Fly_002" + }, + { + "name": "Switch I", + "desc": "Orders received.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_Switch_001" + }, + { + "name": "Switch II", + "desc": "It's our turn!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_Switch_002" + }, + { + "name": "Switch III", + "desc": "(Xiaozhen:Who should I beat up?)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_Switch_003_xz" + }, + { + "name": "Special Switch - Zero", + "desc": "Appraiser, we're here to help!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_SSC_ZERO_001" + }, + { + "name": "Special Switch - Chaos", + "desc": "Can I pet Dally when we're off duty?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_SSC_Chaos_001" + }, + { + "name": "Teammate Down - Zero", + "desc": "Appraiser's signal… gone…\r\n(Xiaozhen:Scamp! Focus!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_TeammateDown_001" + }, + { + "name": "Teammate Down - Chaos", + "desc": "No, it's not time to part ways.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_TeammateDown_004" + }, + { + "name": "Parry I", + "desc": "Punish counter!\r\n(Xiaozhen:What kind of game are you playing…)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_Parry_001" + }, + { + "name": "Parry II", + "desc": "(Xiaozhen:Not so fast!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_Parry_002_xz" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "I'm in sync!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "(Xiaozhen: Nice movement, scamp!)", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC027/Play_Vo_Char_NPC027_DodgeCombo_002_xz" + } + ] + } + }, + { + "id": "1073", + "name": "Chiz", + "description": "Though she may seem a bit timid, she's the Pink Paws Bank's most dependable manager.", + "element": [ + { + "element_id": "Cosmos", + "name": "Cosmos" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_073", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_073_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_073_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_character_xiaozhi", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + } + ], + "arcs_tags": { + "type_id": "4", + "name": "Gas", + "icon": "/Game/UI/UI/player/YH_UI_icon_gas" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1073_nighty", + "characterId": "1073", + "name": "Velvet Spring Day", + "desc": "Chiz's loungewear. Soft, skin-friendly material—staying at home is the right way to spend a day off.\r\n\"I'm not going out tomorrow either, but… I hope the sun still comes out!\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_xiaozhi2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_xiaozhi2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_xiaozhi2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_xiaozhi2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_xiaozhi2", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1073_0", + "characterId": "1073", + "name": "Weekday Bubbles", + "desc": "An updated Pink Paws Bank employee uniform, redesigned to match the brand's signature color scheme. Chiz spends at least an hour every morning ensuring her outfit is spotless and perfectly pressed.", + "quality": "purple", + "icon": "", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_073", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_073_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_xiaozhi", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_xiaozhi", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1073_1", + "characterId": "1073", + "name": "Verdant Grace", + "desc": "Performance outfit from Pink Paws Bank's annual gala. At the time, Mr. Giovanni had developed an unusual fascination with a particular black-and-white animal \r\n\"Are we… are we partnering with Panda Hotpot now?\"", + "quality": "orange", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_xiaozhi3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_xiaozhi3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_xiaozhi3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_xiaozhi3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_xiaozhi1", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1280, + 1382, + 1485, + 1587, + 1690, + 1792, + 1894, + 1997, + 2099, + 2202, + 2304, + 2406, + 2509, + 2611, + 2714, + 2816, + 2918, + 3021, + 3123, + 3226, + 3328, + 3430, + 3533, + 3635, + 3738, + 3840, + 3942, + 4045, + 4147, + 4250, + 4352, + 4454, + 4557, + 4659, + 4762, + 4864, + 4966, + 5069, + 5171, + 5274, + 5376, + 5478, + 5581, + 5683, + 5786, + 5888, + 5990, + 6093, + 6195, + 6298, + 6400, + 6502, + 6605, + 6707, + 6810, + 6912, + 7014, + 7117, + 7219, + 7322, + 7424, + 7526, + 7629, + 7731, + 7834, + 7936, + 8038, + 8141, + 8243, + 8346, + 8448, + 8550, + 8653, + 8755, + 8858, + 8960, + 9062, + 9165, + 9267, + 9370 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 83, + 87, + 91, + 95, + 100, + 104, + 108, + 112, + 116, + 120, + 125, + 129, + 133, + 137, + 141, + 145, + 149, + 154, + 158, + 162, + 166, + 170, + 174, + 178, + 183, + 187, + 191, + 195, + 199, + 203, + 208, + 212, + 216, + 220, + 224, + 228, + 232, + 237, + 241, + 245, + 249, + 253, + 257, + 261, + 266, + 270, + 274, + 278, + 282, + 286, + 291, + 295, + 299, + 303, + 307, + 311, + 315, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 349, + 353, + 357, + 361, + 365, + 369, + 374, + 378, + 382, + 386, + 390, + 394, + 398, + 403, + 407, + 411 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Pink Paws Bank Lobby Manager", + "description": "She may look like an intern, but her badge reads \"Pink Paws Bank (New Herland District HQ) - Lobby Manager.\" It might make you question the bank's professionalism at first, but once Chiz starts talking, all doubt vanishes instantly. Wait, someone can actually memorize all those terms and conditions?!\n\"H-Hello, would you like to apply for a card… W-Wait, it's not a scam, I swear!\"", + "birthday": "February 28", + "homePlace": "Dvořák Family", + "abilityName": "A World of Dew", + "introduction": "Though she may seem a bit timid, she's the Pink Paws Bank's most dependable manager.", + "voiceChinese": "则灵", + "voiceEnglish": "Alice Himora", + "voiceJapanese": "小原好美", + "voiceKorean": "권다예" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "Chiz stands, professionally dressed, in the gleaming lobby of a bank.\r\nChiz walks the corners where the streetlights don't reach, sewage pooling under the cracks in the pavement.\r\n\"Chiz, Chiz, where are you going?\"\r\n\r\nOnce Chiz learned to run without stumbling, she had to leave home and help her older siblings find food outside. Shiny bread wrapped in plastic… Chiz only saw that once. Most of the time, all she could find were wild vegetables and mushrooms. When even those were gone, they had no choice but to hunt \"Apocha.\" That's what they called the edible Anomalies. But Apocha were dangerous; it was common to get hurt, and medicine was even harder to find than food. And then there was that saying: \"Eat too many Apocha, and you'll become an Esper.\" Espers, like Anomalies, were outsiders to be driven away; because, just like Anomalies, Espers attack. After dinner, Chiz watched her mother cradle her newborn baby sister; patting her, soothing her, singing to her. Chiz remembered when she was little, so little that the whole world was no bigger than her mother's embrace, her mother would gently pat her, soothe her, and sing to her.\r\n\"Chiz, Chiz, grow up quick.\"\r\n\r\nFaster, faster. Chiz pressed her palm against the bleeding wound on her neck, glancing back at the Apocha that was closely tailing her. She ran as hard as she could, away from home. Farther, farther—until she couldn't run anymore. Chiz tripped on a rock and fell hard to the ground. The Apocha had vanished somewhere along the way. She didn't have the strength to stand, so she just lay there, nibbling at the food she'd found. She could only eat a little. She had to bring the rest home. Her family was waiting for her. She had to get home… Chiz couldn't remember how she found her way back. But somehow, she made it home with the food… and a new Ability. Maybe, just like the stories said, she had eaten too many Apocha. On her last night home, she used her new Esper Ability to put on a little fireworks show for her younger siblings. She remembered their eyes shining bright, their soft gasps; fighting over who got to play with their magical big sister.\r\nThe next day, her mother brought Chiz to the shore. A boat would take her away from home, carry her to a new world. Even after her mother's silhouette had completely disappeared from sight, Chiz could still hear someone calling out in the salty sea breeze.\r\n\"Chiz, Chiz, you must…\"\r\n\r\nChiz now lives in the heart of Hethereau. Even at night, the whole New Herland District blazes with lights. Chiz often turns off all her lights indoors and leans against the window, watching the flow of cars outside. Back in her homeland, nights were deathly silent. Light didn't mean streetlamps or the moon; light meant danger. It could be an Anomaly's lure. It could be dangerous Espers and their weapons.\r\nChiz sits in the darkness of her room, while a glittering world sparkles outside her window. She hugs herself, imitating her mother from memory, softly humming a melody still warm with feeling.\r\n\"Chiz, Chiz, you must be happy.\"" + }, + { + "name": "Old Wounds and Bandages", + "desc": "\"The outside world is dangerous.\" Chiz learned this when she was very young, back when food at home wouldn't just appear on the table. Sometimes, her older siblings would go out and never come back. And then Chiz reached the same age. It was her turn to go outside.\r\nThe number of wounds on her body grew faster than her height. The first wound was on her left arm, left by a branch that caught at her while she tried to flee an Anomaly. The second was on her right foot; she stepped in a trap while bumbling down the wrong path through the woods. The third was on her left thigh, where an Apocha bit her before becoming their family's dinner… Some wounds healed and disappeared. Others became scars. The last wound her homeland gave her was on her neck: a scar that remained deep even after healing. In the end, just like her siblings, Chiz went out and never came back.\r\nChiz boarded a ship headed who knows where; their routes were never fixed, after all. Chiz was unlucky: She became an Esper. But she was lucky enough to find a ship leaving the very next day. All of her mother's love became a thin stack of money pressed into the kind captain's hands. Leave, leave. Staying here will only bring more pain. Chiz began living on the ship with others from her homeland. Some were Espers like her. Others were ordinary people who could no longer bear the strain of staying. But they never really connected, even in such close proximity. One day, two days, three days… One month, two months… Then she lost count. People got on. People got off. The kind captain brought her to a clean, safe city. Chiz was almost landsick.\r\nChiz arrived at her new home. Here, there were lovely clothes, a warm bed. Delicious food appeared, almost magically, on the table. She sat quietly in a corner, eavesdropping, and learned this was the Dvořák family's orphanage. Chiz loved Dvořák. She loved the orphanage. She made new friends here, and every day they wore the same clothes and ate the same food.\r\n\"Why don't you wash your hands?\" a friend asked Chiz one evening after dinner. \"You should stay clean. You'll trouble the caretakers.\"\r\nChiz hid her sauce-stained hands behind her back in alarm. She finally realized that even wearing the same clothes and eating the same food, they were still different. She was a little mouse that had drifted for so long before being being washed ashore here. \"Mice are the dirtiest of all!\" said the picture books. Of course, her friend was kind. She led Chiz to the bathroom and helped wash the sauce off her hands. Chiz was very grateful.\r\n\"You have to wash your hands. If you don't, people won't like you.\"\r\nChiz was smart. She remembered this. From then on, she washed her hands spotlessly clean every day. Three rounds of soap. No slacking. Clean between the fingers and under the nails. Wash before bed, wash after waking up, wash before meals, wash after meals, wash before playing with toys, wash after playing with toys… As time went on, just like those old wounds, Chiz's hands became wrapped in bandages. The caretakers cautioned her that she couldn't wash her hands so often. Her friends were worried too, gently blowing on her hands and asking if it hurt. Chiz smiled at all of them. \"It doesn't hurt,\" she promised, saying she'll remember.\r\nMuch more time passed. Even after all the wounds on her hands had healed, Chiz still kept the habit of wearing bandages." + }, + { + "name": "Fons and Letters Home", + "desc": "In an age when digital payments are everywhere, Chiichan still insists on withdrawing her salary from the bank each month, exchanging it for cash, and dividing it into a thin stack and a thick stack. She picks up the thin stack and counts it carefully. Once, twice, three times. Then she takes a few bills from it and adds them to the thick stack before tucking it all into a sturdy envelope.\r\n\"This address…\" she says. \"We don't have direct delivery there.\" The post office clerk looks at the destination with some difficulty.\r\n\"Th-That's okay.\"\r\n\"There's a good chance it could get lost with that many transfers, you know?\"\r\n\"…Yes, I know.\"\r\nChiichan hands the envelope to the clerk. The envelope is stamped; she receives a mailing receipt in return. Walking home with the receipt, a map slowly unfolds in her mind. Chiichan has looked at many maps. On them, the place where she was born is just a tiny dot. If she left from Hethereau, she would have to take a very, very long boat ride to reach a new city, then transfer to a train and ride for a very, very long time to yet another city… If she chose to fly partway, she would have to take a very, very long bus ride… But even once she's figured out the route home, she has to think about the travel costs, and the savings needed so her family could live happily together without ever having to hunt Apocha again. She calculates how much she can save each month, how long it will take… By the time she's done with all the calculations, she's arrived.\r\nChiichan stands in front of the mailbox by her door, breathing deeply. Whenever she moves somewhere new, the first thing she does is send her new address back home. Then she waits. Maybe today will bring a letter…\r\n\"Knock knock.\" Chiichan taps lightly on the mailbox. \"Knock knock.\" Two more taps.\r\nThis is a secret code between the siblings: it means \"I found you.\" When they couldn't speak, they would answer each other with soft knocks instead.\r\nChiichan opens the mailbox. Inside is nothing but dust. So it is, every month.\r\nChiichan closes the mailbox and goes home with another mailing receipt. There are a dozen identical ones in her bedside drawer. So it is, every month.\r\nChiichan doesn't know when she will receive a letter from home. Maybe tomorrow. Maybe next month. Maybe never." + }, + { + "name": "Diaries and Proof", + "desc": "Chiz keeps a diary. She hasn't stopped writing since receiving her first journal. She writes down everything worth remembering, so that when she sees her family again someday, she can tell them everything. Then, she'll finally say the words she's been preparing for so long: \"Yes, I've been doing well out here.\"\r\nBut her diary isn't just words: there are rice ball wrapper labels, flower petals that landed on her shoulder, and stickers from coworkers. They're all proof that she's doing well. Chiz feels that only by recording things this way can she truly feel like she's not just stumbling through a pleasant dream.\r\nAt first, Chiz's diary entries were very short.\r\n\"M: XX, D: XX. Food was good.\"\r\n\"M: XX, D: XX. Clothes were pretty.\"\r\n\"M: XX, D: XX. Flowers smelled nice.\"\r\nShe didn't know what else to write, so she just honestly recorded how she felt. Once, a friend found out and suggested, \"If you don't know what to write, why not try drawing?\" But Chiz didn't think her drawings were all that good, either. She was still troubled.\r\nOne day, Chiz ate a delicious candy. She couldn't bear to throw away even the crinkled wrapper, so she put it in her diary. The candy was delicious, and her problem was solved. She's continued to this day.\r\n\"Ahhh, how is it this late already? I have work tomorrow!\"\r\nChiz hurriedly closes her diary. Her entries have been longer and longer, lately. There's more and more worth recording. That tasty milk tea has to be written down. Getting praised by her manager has to be written down. The first sunny day of spring, the first sunny day of summer, the first sunny day of fall, and the first snowfall of winter all have to be properly recorded. Chiz doesn't like rainy days. She only likes sunny days, because on rainy days, food is hard to find.\r\nBut Chiz really likes snowy days in Hethereau. Snow is clean and white." + }, + { + "name": "Cat and Mouse", + "desc": "After completing basic employee training, Chiz's first task at Pink Paws Bank was to get a customer to sign up for a card.\r\n\"It's easy,\" said Mayu, her mentor, patting her on the shoulder. \"Our bank has the best benefits in all of Hethereau. You've got this.\"\r\n\"Sorry, I don't need one.\"\r\n\"No thank you.\"\r\n\"Uh-huh, okay, okay, uh-huh, okay, I understand, okay, okay.\"\r\nChiz collected dozens of polite refusals and cold shoulders. The air conditioning blasted in the bank lobby; Chiz felt cold inside, too. She huddled in a corner, wondering about resigning. Maybe she wasn't cut out for this job. She was always bad at so many things. She didn't even know how to write a resignation letter.\r\nChiz would probably remember the day she met Kolinsna forever, with her beautiful golden hair and dazzling red dress. Chiz felt like she was looking at Fons herself walking among mortals. She remembered how Mayu had described it: \"Someone who looks like they'd definitely sign up for a card.\" Chiz really wanted to stay. She just had to try a little harder. So she gathered her courage and walked up. \"H-Hello!\" she started, \"Welcome to Pink Paws Bank… Would you like to sign up for a card?\"\r\nThe girl with the golden hair and red dress seemed startled by her. She stared at Chiz for a good while, then spoke. Her voice was lovely… until she proceeded to point out Chiz's every flaw; from the way she talked, to her outfit and appearance, to her posture and the angle she was standing at. Chiz felt stares coming from every direction. Tears were already welling up in her eyes. She really wasn't suited for this job after all…\r\n\"I'll sign up for a card.\"\r\nWould Mayu teach her how to write a resignation letter…?\r\n\"Hey, don't you even know how to process a card?\"\r\n\"S-sorry!\" Chiz apologized on reflex, then kept responding yes, over and over. Before her brain could catch up, she was already standing in front of the machine. Somehow, despite her fumbling, she managed to successfully issue a card.\r\n\"Th-thank you for coming.\" She didn't know why things had turned out this way, but the result was delightful. After seeing off the young noblewoman, Mayu finally found her chance to approach. She looked at Chiz, who was especially happy about successfully signing up her first customer, with an indescribable expression. \"Chiz, do you know who that was?\"\r\n\"She was… That lady just now?\"\r\n\"She's the Dvořák family's young lady.\"\r\nChiz's smile slowly faded. Pink Paws Bank belonged to the Dvořáks.\r\nUnder Mayu's pitying gaze, Chiz choked out: \"M-Mayu, do you know how to write a resignation letter?\"" + }, + { + "name": "Gatherings and Friends", + "desc": "Chiz is terrified of loud noises. She's been afraid of thunder since she was little, but it got so much worse after she became an Esper. This is the price she pays for her powers. The sound of popcorn machines, fireworks going off, even karaoke—any overly-noisy environment makes her heart race. Only her soundproof home soothes her. Because of this, Chiz never attends gatherings.\r\n\"Chiz, want to grab dinner together this weekend?\"\r\nMayu was inviting her again. Chiz did want to go. She was so grateful to Mayu, the first person to show her kindness after she joined Pink Paws Bank. And it wasn't just Mayu; there was Haruna, Grace… All her coworkers were wonderful people. Chiz had always wanted to treat them to a meal and properly express her thanks. But someone like her…\r\n\"I should probably…\"\r\n\"How about coming to my place? I'll show you my cooking. Come on, Chiz, come on.\"\r\nIf it was at someone's home, it probably wouldn't be too loud…\r\nChiz finally accepted. She stayed up all night reading posts on Bagel to learn how to be a polite houseguest. If she never got another chance, she had to make this one count.\r\n\"Welcome! You didn't have to bring anything!\"\r\n\"Chiz's here? Come in, come in!\"\r\n\"Um… H-Hello, everyone…\"\r\nThe house was warm. There was the smell of home cooking and the chatter of coworkers. So this is what a gathering was like. How nice. Just as Chiz was secretly feeling happy, Grace handed her a box.\r\n\"F-for me?\"\r\n\"Of course! Open it, quick.\" Haruna leaned in close to Chiz, urging her to open it.\r\nChiz untied the ribbon. Inside the box was a pair of noise-canceling earplugs. They were beautiful. And pink.\r\n\"Pretty, right? We all picked them out together.\"\r\n\"Other than being cute, they're almost completely useless. The noise-canceling is extremely average.\"\r\n\"But they're perfect for our Chiz, right?\"\r\nYes, the noise-canceling was perfectly average… Just enough for Chiz to hear the sound of fireworks blooming in the sky without being so scared that she had to cover her ears and run away." + } + ], + "melee": [ + { + "id": "GA_Chiichan073_Melee", + "name": "Exiled Swordplay", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Exiled Swordplay</>", + "<Title>Basic Attack: Blighted Vale</>", + "<Title>Basic Attack: Bountiful Grain</>", + "<Title>Critical Riposte: Minsky Moment</>" + ], + "desc": [ + "Swings the short staff to perform up to 5 consecutive attacks, dealing <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</> on hit.", + "Press Blighted Vale to throw Brown Sugar Boba to devour the target, dealing 2 instance of Cosmos DMG, granting a certain amount of Grain and Fons. Triggers up to once every 2.5s.\r\nHold Blighted Vale during any instance of Exiled Swordplay attacks to create a branch attack, dealing 2 instance of Cosmos DMG and granting a certain amount of Grain and Fons.\r\nGrants bonus Fons if this skill defeats the target.\r\nUp to 250,000 Fons can be earned this way. Increasing the Tycoon Level to 25 raises the cap to 500,000 Fons. Grants 1 Fons per use once the daily cap is reached. After reaching the total limit, no more Fons can be obtained this way.", + "Press Basic Attack while airborne to plunge, dealing 1 instance of <Guang>Cosmos DMG</> to an area upon impact, while granting a certain amount of <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</>. Increases DMG based on fall height, up to 100%.", + "Triggers when pressing Basic Attack after a Critical Dodge. Leaps to evade and swings the staff, sending Brown Sugar Boba crashing into the target, dealing 1 instance of <Guang>Cosmos DMG</>, reducing Break, and granting <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</>." + ], + "desc_short": [ + "Deals <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</> on hit.", + "Deals <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</> on hit. Grants Fons on the first hit against the same target. Grants bonus Fons if this skill defeats the target.\r\nFons obtained through this method has a daily limit and a total limit. Increase acquisition limits by raising Tycoon Level.", + "Deals <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</> on hit.", + "Deals <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</> on hit." + ], + "context": "<Italic>Jade for good times, grain for lean times.</>", + "icon": "/Game/UI/UI_Icon/Skill/chiichan_melee", + "additional_desc": [ + { + "name": "Grain", + "desc": "A special combat resource possessed by Chiz after joining the team. Generates Grain when using Exiled Swordplay, Blighted Vale, Bountiful Grain, Minsky Moment, or through interest." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Chiichan073_Melee1_Damage", + "name": "1st Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 59, + 63, + 69, + 74, + 80, + 86 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Melee2_Damage", + "name": "2nd Instance Ratio", + "icon": "", + "value_name": "{0}% *3", + "values": [ + [ + 17, + 18, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 43 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Melee3_Damage", + "name": "3rd Instance Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 56, + 60, + 65, + 70, + 76, + 82, + 88, + 96, + 103, + 111, + 120, + 130, + 141 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Melee4_Damage", + "name": "4th Instance Ratio", + "icon": "", + "value_name": "{0}% *5", + "values": [ + [ + 20, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Melee5_Damage", + "name": "5th Instance Ratio", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 39, + 42, + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100 + ] + ] + }, + { + "id_stats": "Chiichan_CoinMelee1", + "name": "Per Instance of Normal Attack: Grain Count", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 34, + 35, + 36, + 37, + 38, + 40, + 45, + 51, + 56, + 62, + 68, + 73, + 79, + 84, + 86, + 90, + 93, + 100, + 110, + 120, + 125, + 135, + 145, + 155, + 165, + 170, + 183, + 196, + 209, + 222, + 235, + 248, + 261, + 274, + 287, + 300, + 306, + 312, + 318, + 324, + 330, + 336, + 342, + 348, + 354, + 360, + 366, + 372, + 378, + 384, + 390, + 396, + 402, + 408, + 414, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27, + 27 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Branch2_Damage", + "name": "Branch DMG Ratio (Press Normal Attack)", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 96, + 103, + 112, + 120, + 130, + 141, + 152, + 164, + 177, + 191, + 207, + 223, + 241 + ] + ] + }, + { + "id_stats": "Chiichan_CoinBranch", + "name": "Branch Attack: Grain Count (Press Normal Attack)", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 34, + 35, + 36, + 37, + 38, + 40, + 45, + 51, + 56, + 62, + 68, + 73, + 79, + 84, + 86, + 90, + 93, + 100, + 110, + 120, + 125, + 135, + 145, + 155, + 165, + 170, + 183, + 196, + 209, + 222, + 235, + 248, + 261, + 274, + 287, + 300, + 306, + 312, + 318, + 324, + 330, + 336, + 342, + 348, + 354, + 360, + 366, + 372, + 378, + 384, + 390, + 396, + 402, + 408, + 414, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Branch_Damage", + "name": "Branch DMG Ratio (Press)", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 77, + 83, + 90, + 97, + 105, + 113, + 123, + 132, + 143, + 154, + 167, + 180, + 195 + ] + ] + }, + { + "id_stats": "Chiichan_CoinBranch", + "name": "Branch Attack: Grain Count (Press)", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 34, + 35, + 36, + 37, + 38, + 40, + 45, + 51, + 56, + 62, + 68, + 73, + 79, + 84, + 86, + 90, + 93, + 100, + 110, + 120, + 125, + 135, + 145, + 155, + 165, + 170, + 183, + 196, + 209, + 222, + 235, + 248, + 261, + 274, + 287, + 300, + 306, + 312, + 318, + 324, + 330, + 336, + 342, + 348, + 354, + 360, + 366, + 372, + 378, + 384, + 390, + 396, + 402, + 408, + 414, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450 + ] + ] + }, + { + "id_stats": "Chiichan_FixFons_1", + "name": "Branch Attack: Grants Fons", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 500 + ] + ] + }, + { + "id_stats": "Chiichan_FixFons_Kill_1", + "name": "Branch Attack: Kill Grants Fons", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 500 + ] + ] + }, + { + "id_stats": "Chiichan_DailyMaxFons", + "name": "Daily Efficient Fons Cap", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 40000 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_AirAttack1_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 90, + 97, + 105, + 113, + 122, + 132, + 142, + 154, + 166, + 179, + 194, + 209, + 226 + ] + ] + }, + { + "id_stats": "Chiichan_CoinMelee1", + "name": "Plunge Attack: Grain Count", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 34, + 35, + 36, + 37, + 38, + 40, + 45, + 51, + 56, + 62, + 68, + 73, + 79, + 84, + 86, + 90, + 93, + 100, + 110, + 120, + 125, + 135, + 145, + 155, + 165, + 170, + 183, + 196, + 209, + 222, + 235, + 248, + 261, + 274, + 287, + 300, + 306, + 312, + 318, + 324, + 330, + 336, + 342, + 348, + 354, + 360, + 366, + 372, + 378, + 384, + 390, + 396, + 402, + 408, + 414, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_PerfectEvadeAttack1_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 69, + 75 + ], + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 119, + 129, + 139, + 151 + ] + ] + }, + { + "id_stats": "Chiichan_CoinEvadeAttackshow", + "name": "Critical Riposte: Grain Count", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 34, + 35, + 36, + 37, + 38, + 40, + 45, + 51, + 56, + 62, + 68, + 73, + 79, + 84, + 86, + 90, + 93, + 100, + 110, + 120, + 125, + 135, + 145, + 155, + 165, + 170, + 183, + 196, + 209, + 222, + 235, + 248, + 261, + 274, + 287, + 300, + 306, + 312, + 318, + 324, + 330, + 336, + 342, + 348, + 354, + 360, + 366, + 372, + 378, + 384, + 390, + 396, + 402, + 408, + 414, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Chiichan073_Skill", + "name": "Pink Paws Priority Principle", + "type_name": "Redirect Skill", + "desc": "The more, the merrier; the more, the better. Stacks Redirect Skill attempts, up to 3 stacks\r\n\r\nPress Redirect Skill to consume 1 stack and cast No Grain, dealing Cosmos DMG once. Press Redirect Skill consecutively to consume stacks and cast No Grain, Half Grain, and Full Grain in order, up to 3 times in a row.\r\nPress to cast Pink Paws Priority Principle while in the <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes2\">Surplus</> state, dealing bonus <Guang>Cosmos DMG</> based on available <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grains</> using Redirect Skills. Cannot Crit.\r\n\r\nHold Redirect Skill to consume 2 stacks and cast No Grain and Half Grain. Continuously consumes <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grains</> while Half Grain is active, dealing consecutive bonus <Guang>Cosmos DMG</> based on available Grains. Cannot Crit. Consumes all available Grains (including all <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes4\">Grain Loans</> from the <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes3\">Debt</> state) when Half Grain ends. Press Redirect Skill again to consume 1 stack and end Half Grain early, allowing Full Grain to be cast without consuming Grains. Hold Redirect Skill to consume 3 stacks and use all available Grains (including all Grain Loans from the Debt state). Casts No Grain, Half Grain, and Full Grain in order.\r\nHold to cast Pink Paws Priority Principle while Surplus is active, dealing bonus <Guang>Cosmos DMG</> with No Grain based on remaining Grains. Cannot Crit.", + "desc_short": "Redirect Skill can accumulate up to 3 charges.\r\n\r\nPress consecutively to cast 3 instances of the skill, consuming corresponding skill charges and dealing additional <Guang>Cosmos DMG</> to the target based on current Grain count. Cannot Crit.\r\n\r\nHold to consecutively cast 3 instances of the skill, consuming corresponding skill charges. During the second instance, <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grain</> is continuously consumed, dealing consecutive bonus <Guang>Cosmos DMG</> based on the Grain consumed. Cannot Crit.", + "context": "<Italic>Frontispiece of the Pink Paws Bank Employee Handbook: In tribute to the great Lord Ladon.</>", + "icon": "/Game/UI/UI_Icon/Skill/chiichan_skill1", + "additional_desc": [ + { + "name": "Surplus", + "desc": "Chiz enters this state when Grain is available." + }, + { + "name": "Grain", + "desc": "A special combat resource possessed by Chiz after joining the team. Generates Grain when using Exiled Swordplay, Blighted Vale, Bountiful Grain, Minsky Moment, or through interest." + }, + { + "name": "Debt", + "desc": "Chiz enters this state when Grain is not available." + }, + { + "name": "Grain Loan", + "desc": "A special combat resource possessed by Chiz after consuming all Grains. Deals DMG by consuming Grain Loan." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Chiichan073_Skill1_1Damage", + "name": "DMG Ratio of No Grain", + "icon": "", + "value_name": "{0}%+{1}%", + "values": [ + [ + 19, + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35, + 38, + 41, + 44, + 47 + ], + [ + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74, + 80, + 86, + 93, + 100 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Skill2_2Damage", + "name": "Hit DMG Ratio of Half Grain", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 53, + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106, + 114, + 124, + 134 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Skill2_Damage", + "name": "Per Instance DMG Ratio of Half Grain", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42, + 46, + 50, + 54, + 58, + 63 + ] + ] + }, + { + "id_stats": "GE_Player_Chiichan073_Skill3_Damage", + "name": "DMG Ratio of Full Grain", + "icon": "", + "value_name": "{0}% + {1}% *3", + "values": [ + [ + 28, + 30, + 33, + 35, + 38, + 41, + 44, + 48, + 52, + 56, + 61, + 66, + 71 + ], + [ + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97, + 105 + ] + ] + }, + { + "name": "Bonus DMG per Grain", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "Per Instance Cost of Half Grain", + "icon": "", + "value_name": "{0}% Grain", + "values": [ + [ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6 + ] + ] + }, + { + "name": "Bonus DMG per Grain Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "id_stats": "GA_Chiichan073_Skill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "Cycle Energy of No Grain", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "name": "Hit Cycle Energy of Half Grain", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9 + ] + ] + }, + { + "name": "Cycle Energy of Full Grain", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Chiichan073_UltraSkill", + "name": "Zero-Sum Game", + "type_name": "Ultimate", + "desc": "No turning back, max the leverage. Throws Brown Sugar Boba to strike, dealing AoE <Guang>Cosmos DMG</> once and entering Grain Market for 7s. During this time, the first Grain Settlement DMG is guaranteed to Crit.\r\nConverts all remaining <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes4\">Grain Loans</> into <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes1\">Grains</> and enters the <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes2\">Surplus</> state after casting Zero-Sum Game. Invests all Grains into the Grain Market. Afterward, press Pink Paws Priority Principle to gain Grains based on current <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes5\">Grain Price</> fluctuations during <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes6\">Grain Settlement</>. Hold Pink Paws Priority Principle to trigger Grain Settlement once based on the Grain Price on first activation.\r\nLeaves the Grain Market and prioritizes repaying Grain Loans with all available Grains when Grain Market duration ends.\r\nGrants access to the Grain Market while in <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes3\">Debt</> state and holding any Grain Loans.", + "desc_short": "Deals <Guang>Cosmos DMG</> and enters the Grain Market for 7s. During this time, the first Grain Settlement DMG is guaranteed to Crit. Immediately grants <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes4\">Grain Loan</>.\r\n\r\nPress Redirect Skill to settle the current Grain amount based on the <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes5\">Grain Price</> on first activation. Triggers <hot textstyle=\"TextEXPL\" param=\"nouns&ChiichanRes6\">Grain Settlement</> when starting the next Redirect Skill \r\n\r\nHold Redirect Skill to settle the current Grain amount based on the Grain Price on first activation. Grain Settlement will not be triggered when starting the next Redirect Skill.", + "context": "<Italic>I will be the only one to win this battle.</>", + "icon": "/Game/UI/UI_Icon/Skill/chiichan_ultraskill", + "additional_desc": [ + { + "name": "Grain Loan", + "desc": "A special combat resource possessed by Chiz after consuming all Grains. Deals DMG by consuming Grain Loan." + }, + { + "name": "Grain", + "desc": "A special combat resource possessed by Chiz after joining the team. Generates Grain when using Exiled Swordplay, Blighted Vale, Bountiful Grain, Minsky Moment, or through interest." + }, + { + "name": "Surplus", + "desc": "Chiz enters this state when Grain is available." + }, + { + "name": "Grain Price", + "desc": "Displays a fluctuating price chart upon entering the Grain Market, showing the current Grain price. The chart forecasts price trends every 0.5s for the next 3.5s.\r\nWhile the chart is active, the Grain price randomly fluctuates within a range of −50% to +50% based on the previous price." + }, + { + "name": "Grain Settlement", + "desc": "Press Redirect Skill after entering the Grain Market to settle based on the current Grain price shown on the chart, gaining the corresponding amount of Grain. Hold Redirect Skill to settle all current Grain, dealing bonus Cosmos DMG based on the amount of Grain consumed.\r\nEach press of Redirect Skill triggers one Grain Settlement. Holding Redirect Skill triggers only one Grain Settlement." + }, + { + "name": "Debt", + "desc": "Chiz enters this state when Grain is not available." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Chiichan073_UltraSkill1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% *4 + {1}% + {2}%", + "values": [ + [ + 44, + 48, + 52, + 56, + 60, + 65, + 70, + 76, + 82, + 89, + 96, + 104, + 112 + ], + [ + 44, + 48, + 52, + 56, + 60, + 65, + 70, + 76, + 82, + 89, + 96, + 104, + 112 + ], + [ + 277, + 299, + 323, + 349, + 377, + 407, + 439, + 474, + 512, + 553, + 598, + 646, + 697 + ] + ] + }, + { + "name": "Grain Market Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ] + ] + }, + { + "id_stats": "GA_Chiichan073_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + }, + { + "id_stats": "GA_Chiichan073_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Chiichan073_QTE", + "name": "Temporary Entry", + "type_name": "Support Skill", + "desc": "Hope I can m-make it in time…\r\nBrown Sugar Boba carries Chiz and crashes into the target, dealing 1 instance of <Guang>Cosmos DMG</>.", + "desc_short": "Deals <Guang>Cosmos DMG</>.", + "icon": "/Game/UI/UI_Icon/Skill/chiichan_qte", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Chiichan073_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Chiichan073_Passive_1", + "name": "Hanahaki Disease", + "type_name": "Passive Skill", + "desc": "<TextHLT>Charge Enhancement</>: Grants active characters 4 additional Ultimate Energy.", + "desc_short": "<TextHLT>Charge Enhancement</>: Grants active characters 4 additional Ultimate Energy.", + "context": "<Italic>Longing… it's a white bird rising from a wound. If only you could see.</>", + "icon": "/Game/UI/UI_Icon/Skill/chiichan_pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Chiichan073_Passive_2", + "name": "Hoarding", + "type_name": "Passive Skill", + "desc": "Increases Chiz's Charge Efficiency by 20% while on the field.", + "desc_short": "Increases Chiz's Charge Efficiency by 20% while on the field.", + "context": "<Italic>The past is a bottomless ravine. No matter how many stones you throw, not a single echo ever returns.</>", + "icon": "/Game/UI/UI_Icon/Skill/chiichan_pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [], + "city": [ + { + "id": "City_Ability_Xiaozhi_01", + "name": "Lobby Manager", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_kkgj", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Chiz increases traffic by <Green2>18</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Chiz reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> In Owner's Selection, each correct dish (excluding Danzaburou) raises prices. Up to <Green2>15</> times per round." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Chiz reduces ingredient consumption rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Chiz increases traffic by <Green2>27</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + }, + { + "id": "City_Ability_Xiaozhi_sp01", + "name": "Nocturnal Animal", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_yysw", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Highlights global collectibles in Pink Paws Heist." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Sun, Sun… speak to me!", + "desc": "Increases the storage capacity of Grain and Grain Loan by 10%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1073_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Fireworks in Silence", + "desc": "Grants 10% of current Grain as interest per second while Chiz is in the Surplus state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1073_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "If There Were No Rainy Days", + "desc": "Increases the chance of a Grain Price increase by 50%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1073_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "To Riceball, Bandage, Fons", + "desc": "Increases Grain acquisition efficiency by 20%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1073_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Blank Diary Pages", + "desc": "Grants Chiz Grain equal to 100% of the Grain storage limit upon entering combat.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1073_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Thirty-Three Days", + "desc": "Increases the Bonus Cosmos DMG of Grain by 15%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1073_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Friends and Family", + "desc": "Increases Grain acquisition efficiency by an extra 50% while in the Debt state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Homecoming", + "desc": "Reduces the target's Cosmos Resistance by 10% upon Chiz dealing damage.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1073/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + -1, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "DamageUpCosmosBase", + "name": "Cosmos DMG Bonus", + "icon": "/Game/UI/UI_Icon/Attribute/Icon_DamageUp_white", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Food_027", + "amount": 100 + }, + { + "item_id": "Food_051", + "amount": 100 + }, + { + "item_id": "Food_063", + "amount": 100 + }, + { + "item_id": "Flower0003", + "amount": 200 + }, + { + "item_id": "Flower0006", + "amount": 200 + }, + { + "item_id": "Flower0009", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1073" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1073" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Gold", + "Friendship_3_1073" + ], + "amount": [ + 20, + 20000, + 1 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1073" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1073" + ], + "amount": [ + 30000, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1073" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1073", + "Fashion_character_1073_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Greetings, I'm Chiz. I work at Pink Paws Bank, employee ID 018888, and I live at Kyllene Promenade, Camelot Avenue, in New Herland District… Oh, too much information? S-Sorry!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_meet_001" + }, + { + "name": "Chat: Bubble Tea", + "desc": "Ah, I want a large black sugar milk tea with crème brûlée, coconut jelly, pudding, and a boba base, no ice, full sugar… no, wait, um…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_chat_001" + }, + { + "name": "Chat: Weekend", + "desc": "Do you want to go to Caltrop Lake this weekend? It's been a while since I went out… N-Nevermind. I'm better off staying in.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_chat_002" + }, + { + "name": "Chat: Salary", + "desc": "Oh, the latest style…? I'll consider when I get my next paycheck.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_chat_003" + }, + { + "name": "Sunny", + "desc": "The sun is so cozy… I could close my eyes and fall asleep right now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_weather_001" + }, + { + "name": "Rainy", + "desc": "Oh no, it's raining… You could catch a cold. Please, um, stay warm, okay?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_weather_002" + }, + { + "name": "Cold", + "desc": "Whoo… it's so cold. This is the perfect time to snuggle up with family, nothing warms you up faster.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_weather_003" + }, + { + "name": "Hot", + "desc": "I miss the AC at Pink Paws Bank. It's like they're blasting cold air for free.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "G-Good morning! Do you, um, want something to eat? Maybe a sandwich? Or coffee? Or, umm, anything really… A-Anyway, let me make breakfast!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Good afternoon. Do you need a break? We got… two whole hours for lunch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "Just a sec, I'm almost done! Hey… do you wanna get dinner together?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_greet_003" + }, + { + "name": "Good Night", + "desc": "In my village, they always say, \"A night of peaceful, dreamless sleep means a day of good fortune ahead.\" Goodnight, I hope tomorrow is your lucky day.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_greet_004" + }, + { + "name": "Hobbies", + "desc": "I like Fons… hmm, I do. Fons are essential, you know? Food, medicine, clothes… none of that appears out of thin air. They all cost money. But sometimes, I wonder if Fons are really that important… I mean, once I save up enough to move back home, maybe they won't matter so much. Still, that's an enormous amount of Fons. I'd probably have to work at Pink Paws Bank until I retire.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_hobby_001" + }, + { + "name": "Worries", + "desc": "Problems, huh… When I first started at Pink Paws Bank, I couldn't do anything right… I'm not being modest, I mean it. I used to stand in that gorgeous lobby in my new uniform, but I couldn't speak to anyone. I was scared of screwing things up, I even considered quitting. But then… Klingsna stepped in. She's… incredible, like the sun breaking through a storm. If only I could shine half as bright as her… I know I'm nowhere near her level, but honestly, I'm happy with my life as it is.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_vexation_001" + }, + { + "name": "Topic: Anomalies", + "desc": "Hethereau… is a great city. Ordinary people, anomalies, and Espers all live together as equals. It's safe and peaceful. Things aren't like this where I come from. Most anomalies are dangerous and you have to avoid them. Though… some of them can be used as food… Oh, sorry, that's probably not very interesting. But if you're curious… we can talk about it sometime later.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_talk_001" + }, + { + "name": "Topic: Movies", + "desc": "When I'm off work, I watch movies at home. Most movies are interesting, because they take me to places I've never been to. I… I haven't traveled a lot, so every time I watch a movie, I can't help but think I'd love to visit those places if I could. One documentary even featured my hometown… Umm, I probably spoke too much. Just… forget what I said. Maybe… we can watch a movie together? If it's with you, even a horror movie would… would be okay!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_talk_002" + }, + { + "name": "Topic: Convenience Store", + "desc": "If you visit 2-Fours at night, they sometimes sell rice balls at a discounted price. They taste just as good as the ones sold in the morning, but they're way cheaper. Perfect for a late-night snack. The only downside is you have to eat them the same day, since they expire soon. Umm… I-I'm good at making rice balls too. Would you… ever want to try some?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_talk_003" + }, + { + "name": "About Myself: Hoarding", + "desc": "When I find things I like, I end up… collecting a lot of them. Like, a lot. But I promise, I… I keep everything neat and organized. It's just… a habit. It's like, I feel more secure when I have a huge pile of stuff all together.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_self_001" + }, + { + "name": "About Myself: Esper Ability", + "desc": "E-Esper abilities… They're… r-really handy. Super con-convenient, ex-extremely useful. I-I'm an Esper, so… so thanks to… to these powers, I was able to move to Hethereau. I was also able to fi-find work easily, because of my abilities. Being an Esper here is… is really great. I like it here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_self_002" + }, + { + "name": "About Myself: Bandages", + "desc": "Does it… look bad? I used to be… bad at everything, always getting myself hurt… B-but I'm better now! I don't get hurt as much anymore. It's just… my old scars aren't pretty, so I covered them. A coworker recommended these bandages. They're soft and breathable, so they don't feel icky. Please don't worry about me. The wounds have all healed up. They don't hurt anymore.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_self_003" + }, + { + "name": "About Dvořák", + "desc": "The Dvořák family, they're rather… unusual, I guess? No, no, I swear I don't mean that in a bad way! When I first got to Hethereau, I was taken in by their shelter. Thanks to their foundation, I was able to get an education. After that, I started working at Pink Paws Bank. Pretty much everyone in Hethereau—locals or outsiders alike—has benefited from them at some point. It's like the Dvořáks are always… giving money away? They don't even ask for anything in return. Maybe that's what makes them good people.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_about_001" + }, + { + "name": "Character Ascension I", + "desc": "Woah, such a strange feeling…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Will I… be more useful?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "I could do this after all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_ug_003" + }, + { + "name": "Gift Received I", + "desc": "I… I love it! I r-really do!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Th-Thanks! I'm s-sorry… I m-mean… I don't know what to say… I'll keep it and treasure it for a long, long time!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Is this for m-me? Thank you!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "I-I'll get you a gift too! P-Please take it when I do!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Deal.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Scaling in.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Chasing the rally.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Employee 018888, at your service!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Th-Thank you for choosing Pink Paws Bank!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "You now have injury insurance.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Would this do?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_containment_001" + }, + { + "name": "Containment II", + "desc": "Did I… do it right?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_containment_002" + }, + { + "name": "Nullification I", + "desc": "Good night.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_anomaly_001" + }, + { + "name": "Nullification II", + "desc": "…I can go home now.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_anomaly_002" + }, + { + "name": "Unexpected Gains I", + "desc": "Is it… okay for me to take this?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Um, let me… help you with that.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Money is precious… You got to keep it safe.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "If you want to deposit it in Pink Paws Bank, I'd suggest… Oh, s-sorry!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Can I really… be this lucky?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "I-I'm supposed to keep this?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_windfall_006" + }, + { + "name": "Low Health I", + "desc": "It's okay, don't worry about me…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_hp_001" + }, + { + "name": "Low Health II", + "desc": "I'm used to this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_hp_002" + }, + { + "name": "Low Health III", + "desc": "It doesn't hurt. It doesn't hurt.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_hp_003" + }, + { + "name": "Heal I", + "desc": "Much, much better. Th-thank you.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_fh_001" + }, + { + "name": "Heal II", + "desc": "That's so warm…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_fh_002" + }, + { + "name": "Down I", + "desc": "Mom, I wanna go home…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_dead_001" + }, + { + "name": "Down II", + "desc": "I'm so cold and lonely…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_dead_002" + }, + { + "name": "Down III", + "desc": "I'm still… not good enough…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_dead_003" + }, + { + "name": "Takedown I", + "desc": "I-I'm sorry!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_kill_001" + }, + { + "name": "Takedown II", + "desc": "Is anyone hurt?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_kill_002" + }, + { + "name": "Damaged I", + "desc": "I'm fine.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_struck_001" + }, + { + "name": "Damaged II", + "desc": "It's just a scratch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "I won't hold you back…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Sorry, I…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "You chose me? Are you sure?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_deploy_001" + }, + { + "name": "Deploy II", + "desc": "I'll… I'll do my best!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "C-Coming!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Watch out for collision!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Made it in time!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_QTE_003" + }, + { + "name": "Glide I", + "desc": "My feet… they're not touching the ground…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_Fly_001" + }, + { + "name": "Glide II", + "desc": "Ugh… are we there yet?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_Fly_002" + }, + { + "name": "Switch I", + "desc": "L-Leave it to me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_Switch_001" + }, + { + "name": "Switch II", + "desc": "I can do this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_Switch_002" + }, + { + "name": "Switch III", + "desc": "Please… trust me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_Switch_003" + }, + { + "name": "Parry I", + "desc": "I got it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_Parry_001" + }, + { + "name": "Parry II", + "desc": "I didn't miss!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Whew, I dodged it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "My skirt… is fine.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC026/Play_Vo_Char_NPC026_DodgeCombo_002" + } + ] + } + }, + { + "id": "1075", + "name": "Iroi", + "description": "Though she may seem a bit timid, she's the Pink Paws Bank's most dependable manager.", + "element": [ + { + "element_id": "Nature", + "name": "Anima" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_yiluoyi", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_yiluoyi_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_fashionshop_yiluoyi", + "tags": { + "char_tags": [ + { + "name": "Survival", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag02" + }, + { + "name": "Healing", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhiliao" + }, + { + "name": "DMG Boost", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zengyi" + } + ], + "arcs_tags": { + "type_id": "2", + "name": "Liquid", + "icon": "/Game/UI/UI/player/YH_UI_icon_liquid" + } + }, + "reaction": [ + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Hexed", + "desc": "Deals an additional instance of <bule>follow-up attack DMG</> to the target equal to <NumGreen>20%</> of <bule>Anima or Incantation DMG</> taken within <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1075_nighty", + "characterId": "1075", + "name": "Starlit Night", + "desc": "The moon has fallen a thousand times. Has it truly been only a thousand?", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi1_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_yiluoyi1", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi1_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_yiluoyi1", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_yiluoyi1", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1075_0", + "characterId": "1075", + "name": "Counting Sheep", + "desc": "Sheep are gentle creatures by nature, happiest among their flock.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_yiluoyi", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_yiluoyi", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_yiluoyi", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1075_rpg_level3", + "characterId": "1075", + "name": "Dreamweaver", + "desc": "She weaves the stars into the dreamscape.\r\nAs Iroi sleeps, the weight of a universe rests lightly upon her.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi5_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_yiluoy5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_yiluoy5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_yiluoyi5", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1075_1", + "characterId": "1075", + "name": "Summer Dream", + "desc": "Hidden within a bright and colorful dreamscape, watching the long summer drift by.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi4_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_yiluoy4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_yiluoy4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_yiluoyi4", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1075_rpg_level2", + "characterId": "1075", + "name": "Archmage", + "desc": "The chant goes on, and the edge of the dream quietly stretches another inch.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_yiluoy3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoyi3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_yiluoyi3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_yiluoyi3", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1075_rpg_level1", + "characterId": "1075", + "name": "Channeling…", + "desc": "Arcane sparks dance at her fingertips, while Iroi writes the first page of a dream yet unfinished.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1075_rpg_level1_Base", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_yiluoy2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_yiluoy2i_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_yiluoyi2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_yiluoyi2", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1420, + 1534, + 1647, + 1761, + 1874, + 1988, + 2102, + 2215, + 2329, + 2442, + 2556, + 2670, + 2783, + 2897, + 3010, + 3124, + 3238, + 3351, + 3465, + 3578, + 3692, + 3806, + 3919, + 4033, + 4146, + 4260, + 4374, + 4487, + 4601, + 4714, + 4828, + 4942, + 5055, + 5169, + 5282, + 5396, + 5510, + 5623, + 5737, + 5850, + 5964, + 6078, + 6191, + 6305, + 6418, + 6532, + 6646, + 6759, + 6873, + 6986, + 7100, + 7214, + 7327, + 7441, + 7554, + 7668, + 7782, + 7895, + 8009, + 8122, + 8236, + 8350, + 8463, + 8577, + 8690, + 8804, + 8918, + 9031, + 9145, + 9258, + 9372, + 9486, + 9599, + 9713, + 9826, + 9940, + 10054, + 10167, + 10281, + 10394 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 75, + 79, + 83, + 86, + 90, + 94, + 98, + 101, + 105, + 109, + 113, + 116, + 120, + 124, + 128, + 131, + 135, + 139, + 143, + 146, + 150, + 154, + 158, + 161, + 165, + 169, + 173, + 176, + 180, + 184, + 188, + 191, + 195, + 199, + 203, + 206, + 210, + 214, + 218, + 221, + 225, + 229, + 233, + 236, + 240, + 244, + 248, + 251, + 255, + 259, + 263, + 266, + 270, + 274, + 278, + 281, + 285, + 289, + 293, + 296, + 300, + 304, + 308, + 311, + 315, + 319, + 323, + 326, + 330, + 334, + 338, + 341, + 345, + 349, + 353, + 356, + 360, + 364, + 368, + 371 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 75, + 81, + 87, + 93, + 99, + 105, + 111, + 117, + 123, + 129, + 135, + 141, + 147, + 153, + 159, + 165, + 171, + 177, + 183, + 189, + 195, + 201, + 207, + 213, + 219, + 225, + 231, + 237, + 243, + 249, + 255, + 261, + 267, + 273, + 279, + 285, + 291, + 297, + 303, + 309, + 315, + 321, + 327, + 333, + 339, + 345, + 351, + 357, + 363, + 369, + 375, + 381, + 387, + 393, + 399, + 405, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 495, + 501, + 507, + 513, + 519, + 525, + 531, + 537, + 543, + 549 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_02_lv1", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_02_lv2", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_02_lv3", + "Worldboss_material_03", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Member of CSU-2", + "description": "Warm and approachable, she instinctively puts people at ease, making them trust her from the very first meeting.\r\nEvery pattern of her behavior aligns perfectly with what people expect from a \"normal girl.\"\r\nNo problem. This is just fine.", + "birthday": "December 21", + "homePlace": "Bureau of Anomaly Control, CSU-2", + "abilityName": "Infant Dream", + "introduction": "Oneiroi is a well-behaved kid who ticks all the boxes.", + "voiceChinese": "汪悦", + "voiceEnglish": "Rachel Lepore ", + "voiceJapanese": "日高里菜", + "voiceKorean": "이주은" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "\"Iroi called in sick again? Her paid time off and sick days ran out ages ago. Feels like her paycheck's been getting docked.\"\r\n\"She doesn't seem to care about her paycheck… She once said she wouldn't mind paying to work. It didn't sound like she was joking about it.\"\r\n\"That's so nice. She works pretty hard. I didn't know she was just working to experience the world…\"\r\n\r\nIroi has been prone to sickness since childhood. She couldn't attend regular schools. Luckily, her family was well-off, so she had a private tutor all the time, and she became as educated as someone who has done general university coursework.\r\nAfter finishing her studies, her parents wanted her to integrate into society, but her health couldn't handle the demands of a regular job. Iroi wanted to work at a social welfare organization, so her parents sent her to the Sunward, an anomaly charity house, to volunteer, where she also helped with the simpler anomaly intake work.\r\nIroi's current personality is deeply shaped by the vibes of the charity house. Before going there, she hadn't had much contact with others. Her tutor and butler were cold and rigid, always overly cautious, while her parents doted on her too much. Iroi understood that not all human beings were like them, so she instinctively chose to blend in with \"everyone else.\"\r\nLife on the island wasn't exactly smooth sailing. Things were a lot tougher than they were back home. Nevertheless, Iroi enjoyed that kind of environment much more, because she felt more alive.\r\nDuring the Teehee Bear incident at the charity house, Iroi the volunteer provided significant help to the Bureau, and the Bureau staff took notice of this talented Esper. At the same time, Iroi found herself drawn to the Bureau's work. They came to an agreement and Iroi joined the Bureau of Anomaly Control. Given her strong control over her powers, she was recommended to join CSU-2.\r\nLife has a way of moving on." + }, + { + "name": "Unbroken Dream", + "desc": "For most people, dreams are unstable and ephemeral. Iroi's Esper Ability stabalizes dreams, making them constants that do not cease to exist when impacted by external factors.\r\nIroi can send her dreams into the consciousness of other living beings. The number of beings she can affect at the same time varies, depending on the targets' mental strengths. If the target's mental strength is too high, she may not be able to break in at all. She also can't affect beings without sentience.\r\n\r\nTwo gates exist at the entrance of Iroi's dream world, a Horned Gate and an Ivory Gate. Sometimes she conceals one of them when necessary.\r\nIf one enters the Ivory Gate, they are forced to experience a long and bizarre dream of creatures fighting and devouring each other. No one knows why this is the case.\r\nIf one enters the Horned Gate, they reach Iroi's true dream world and can have a nice dream. The real Iroi is hiding somewhere in the corner of this world.\r\n\r\nIn other words, the \"Iroi\" people see on the outside is not her true self.\r\nThe Iroi people see is nothing but an illusion created by her powers. The external Iroi, after taking over the original, is in essence a non-human consciousness that mimics human beings.\r\nDon't be afraid. The external Iroi has posed as a human for about twenty years. She's not that different from a genuine human. She won't bite.\r\nNo need to panic." + }, + { + "name": "In CSU-2", + "desc": "The Bureau of Anomaly Control and the charity house have entirely different vibes. Still, Iroi was able to get used to the different pace, and she got along with her new teammates, Mint and Shinku.\r\nWhile Shinku's powers could drive her berserk, Iroi can use her powers to calm Shinku down in the dream world. As a result, Shinku frequently enters Iroi's dream world, and they got along.\r\nHowever, after a certain mission, things changed. Shinku's attitude towards Iroi shifted for the worse, almost harboring animosity. Iroi didn't know what caused this change, but she responded with the same attitude. The two of them were friendly no more.\r\nMint noticed the awkward tension between the two. After some poking around between missions, she finally figured it out. Shinku had seen \"the other Iroi\" in her dream world. Shinku mistakenly assumed that the external Iroi had taken over the real one, and disgusted by what she thought was happening, she held a grudge against the external Iroi.\r\nAfter that, Mint worked hard to convince Shinku and Iroi to clear up the misunderstanding. Once Shinku learned the truth about the Iroi in the dream world, she realized she assumed wrongly and apologized to Iroi.\r\n\r\n\"You saw that pitiful being in a dream and threw out everything to stand up for her—what a hotheaded dragon who doesn't think things through!\"\r\n\"Arrgh, why are you still so mean after I said sorry? You… Ramtenna!\"\r\n\"Okie-dokie, problem solved! Let's get along with each other like this!\"\r\n\r\nThat's how Mint earned a lavish meal from Shinku and Iroi." + }, + { + "name": "Sleeping", + "desc": "Iroi's powers create a stable dream for her, but a dream needs someone to be dreaming, and that person is the real Iroi within. The dreams created by her powers belong to her. The real Iroi always remains inside the dream world, always dreaming, and thus always sleeping.\r\nThe Iroi outside doesn't need to rest. In theory, she could stay awake forever. That said, sleep is something humans need, so she still goes to bed on time, pulls up the blanket, and shuts her eyes like everyone else.\r\nShe doesn't fall asleep, but she enjoys the cozy feeling of being wrapped in soft and fluffy blankets." + }, + { + "name": "Three Kids", + "desc": "At first, Iroi's dream world was just a hazy, chaotic mess. As she grew up and experienced more of the world, three little kids, Morpheus, Icelos, and Phantasos, started trying to fill her dream world with color and life. The three kids worked together. Morpheus created passers by, Icelos created birds and beasts, and Phantasos created scenery that weren't based on living beings. Through their collective efforts, Iroi's dream world became a tiny world that rivaled reality itself.\r\nAs for when the three kids first appeared, neither Iroi remembers clearly—did they show up when her powers awakened? The real Iroi claims to have seen them since the moment she was born.\r\nMorpheus likes to act cool and calls himself the boss, but he's actually the one who usually gets picked on. Icelos is cute and shy, but has a bit of a mischievous streak. Phantasos is a total airhead, always flying around aimlessly while blowing a little trumpet. For young Iroi, who spent so much of her time alone in hospitals and at home, they were her best friends.\r\n\r\n\"Iroi has new friends now. Is it time for us to leave?\"\r\n\"No way, I don't want to leave her!\"\r\n\"She's there… we're there… must not part…\"" + }, + { + "name": "Price", + "desc": "Iroi's health had been a serious concern as soon as she was born. Things only started to improve until her Esper Abilities awakened when she was one. Even now, she still wears a life monitor as a precaution.\r\nThe real Iroi, however, does not want to live.\r\nEven so, her parents were determined to save her. No matter how much money it took, they kept sending her into surgery after surgery, refusing to let her go.\r\nThe thing is, when Iroi woke up in her mother's womb, still floating in water, she already knew she didn't want to be born.\r\n\r\nIroi's powers kept her alive. It shaped a new consciousness for her—one that took over from the Iroi who never wanted to live—and kept her going.\r\nHer Esper Abilities may have saved her by keeping her alive, but in truth, they've been exacting a price from her all along.\r\nThe price of her powers is to live.\r\n\r\nNeither Iroi believes they were meant to be born. Both see themselves as something that should have been weeded out by natural selection.\r\nHowever—\r\n\"You're alive. That already proves you weren't supposed to be eliminated. Is that so hard to understand? There's no such thing as \"should be\" in this world. What's already happened cannot change. The fact that you're alive embodies more truth than any theory, isn't it?\"" + }, + { + "name": "First Dream", + "desc": "What makes a human human?\r\n\r\nBefore waking up, Iroi had a long, strange dream. It started in the pitch-black depths of the sea, slowly rising up, then stepping onto land, running like mad through a barren jungle just to avoid being eaten.\r\nI heard everyone has a dream like this while they're still in the womb. You watch yourself crawl from the water onto land, slowly evolving into a human, and finally wake up naturally, right as you're being born.\r\nBut in that dream, Iroi wasn't born as a primate. Instead, she was sent on a different evolutionary path, becoming one of the Caprinae.\r\nThis should never have happened, and her human nature forced her to wake up from that dream. And so, she woke up in her mother's womb way too early.\r\nFetuses wake up, but Iroi's case was different. She woke up with complete consciousness. She touched around, felt the warmth around her, and caught the occasional glimpse of faint light. It was dim, warm, comfortable, with a pulse beating in rhythm with her own. So this is the \"world,\" so this was what it felt like to be \"alive.\"\r\nShe was taken away as her world opened up.\r\nAfter living in the womb, the real world overflowed with light and empty space. It was terrifying. Her mind was shocked, and she no longer wanted to live. As a result, Iroi lost consciousness, and her body shut down. That's the beginning of her sicknesses.\r\n\r\nAt first, the Iroi created from her powers only knew that she must live.\r\nWhen she was hungry or was in pain, she voiced her needs to attract attention.\r\nThen she noticed that people made all kinds of sounds to express their thoughts. She slowly started to understand the sounds, then tried making them herself—and that, is how she learned to speak.\r\nJust saying something out loud isn't always enough to make people believe it, so she learned all the right expressions.\r\nKnowing what to say, to whom, and in what context, that's something she also had to pick up, however slowly…\r\n\r\nHaving grown up this way, how exactly is she any different from any authentic human being?\r\n\r\n—Humans usually do not question whether they are humans or not. She does. That's about it." + } + ], + "melee": [ + { + "id": "GA_Oneiroi_Melee", + "name": "Collaboration", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Collaboration</>", + "<Title>Basic Attack: Daydream</>", + "<Title>Basic Attack: Lucid Dream</>", + "<Title>Basic Attack: Wakey-Wakey</>", + "<Title>Reflexive Response</>" + ], + "desc": [ + "Summons lambs to perform up to 5 consecutive attacks, dealing <Ling>Anima DMG</>. Builds up <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> when attacks hit.", + "Hold Basic Attack to charge up, consuming <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> based on the charge duration to unleash up to 3 instances of Daydream, dealing <Ling>Anima DMG</>.\r\nHold Basic Attack during Reflexive Response, Bang!, Future Self Continuity, and 3.8-Billion-Year Mirage, consuming <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> to unleash the 3rd instance of Daydream, dealing <Ling>Anima DMG</>.", + "Hold Basic Attack again after Iroi uses Basic Attack: Daydream to consume <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</>, summoning Morpheus to unleash sustained fire that deals <Ling>Anima DMG</>.", + "Press Basic Attack while airborne to plunge, dealing 1 instance of <Ling>Anima DMG</> to an area upon impact. Increases DMG based on fall height by up to 100%. Builds up <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> on hit.", + "Triggers when using Basic Attack: Collaboration after a Critical Dodge. Throws Morpheus at the target, dealing 1 instance of <Ling>Anima DMG</> and reducing Break. Builds up <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> on hit." + ], + "desc_short": [ + "Deals Anima DMG. Builds up Imagination on hit.", + "Hold to charge up, consuming Imagination to launch up to 3 instances of attack, dealing <Ling>Anima DMG</>.\r\nHold to charge up during Reflexive Response, Support Skill, Redirect Skill, and Ultimate, consuming Imagination to unleash the 3rd attack, dealing <Ling>Anima DMG</>.", + "Hold Basic Attack again after using Daydream to consume Imagination and deal <Ling>Anima DMG</>.", + "Deals Anima DMG. Builds up Imagination on hit.", + "Deals Anima DMG. Builds up Imagination on hit." + ], + "context": "<Italic>…Bzz—bzz bzz—bzz bzz bzz…</>", + "icon": "/Game/UI/UI_Icon/Skill/Oneiroi_Melee", + "additional_desc": [ + { + "name": "Imagination", + "desc": "How to build up Imagination: Collaboration, Wakey-Wakey, Reflexive Response, Future Self Continuity, Bang!, and any ally entering Regression after falling.\r\nConsumes Imagination to charge up, unleashing Daydream and Lucid Dream.\r\nChanges the effects of 3.8-Billion-Year Mirage based on Imagination accumulated. Continuously consumes Imagination during the skill." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Oneiroi_Melee1_Damage", + "name": "Collaboration: 1st Instance DMG Ratio & Builds up Imagination", + "icon": "", + "value_name": "{0}%, 2", + "values": [ + [ + 76, + 82, + 88, + 95, + 103, + 111, + 120, + 130, + 140, + 151, + 164, + 177, + 191 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_Melee2_Damage", + "name": "Collaboration: 2nd Instance DMG Ratio & Builds up Imagination", + "icon": "", + "value_name": "{0}% *3, 3", + "values": [ + [ + 15, + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_Melee3_Damage", + "name": "Collaboration: 3rd Instance DMG Ratio & Builds up Imagination", + "icon": "", + "value_name": "{0}% *8, 3", + "values": [ + [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 25 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_Melee4_Damage", + "name": "Collaboration: 4th Instance DMG Ratio & Builds up Imagination", + "icon": "", + "value_name": "{0}%, 4", + "values": [ + [ + 70, + 75, + 81, + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151, + 163, + 176 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_Melee5_Damage", + "name": "Collaboration: 5th Instance DMG Ratio & Builds up Imagination", + "icon": "", + "value_name": "{0}% *3, 8", + "values": [ + [ + 25, + 27, + 30, + 32, + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 65 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 36 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_AirAttack_Damage", + "name": "Plunge DMG Ratio & Builds up Imagination", + "icon": "", + "value_name": "{0}%, 2", + "values": [ + [ + 36, + 38, + 42, + 45, + 49, + 52, + 57, + 61, + 66, + 72, + 77, + 83, + 90 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_Branch1_Damage", + "name": "Daydream: 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *3", + "values": [ + [ + 36, + 39, + 42, + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_Branch2_Damage", + "name": "Daydream: 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 88, + 95, + 103, + 111, + 120, + 129, + 140, + 151, + 163, + 176, + 190, + 206, + 222 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_Branch3_Damage", + "name": "Daydream: 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 39, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 85, + 92, + 100 + ] + ] + }, + { + "name": "Daydream: Imagination Cost", + "icon": "", + "value_name": "20" + }, + { + "id_stats": "GE_Player_Oneiroi_Branch5_Damage", + "name": "Lucid Dream: DMG Ratio & Imagination Cost", + "icon": "", + "value_name": "{0}% *35, 10", + "values": [ + [ + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_PerfectEvadeAttack_Damage", + "name": "Critical Riposte Ratio & Builds up Imagination", + "icon": "", + "value_name": "{0}%, 4", + "values": [ + [ + 134, + 144, + 156, + 168, + 182, + 196, + 212, + 229, + 248, + 267, + 289, + 312, + 337 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Oneiroi_Skill", + "name": "Future Self Continuity", + "type_name": "Redirect Skill", + "desc_name": "<Title>Self-Identity Extension</>", + "desc": "Press to activate. Summons lambs to heal all team members once and grant them an ATK bonus based on Iroi’s Base ATK.\r\nSummons three lambs to attack respectively, dealing <Ling>Anima DMG</> and pulling in nearby enemies.\r\nUsing this skill builds up <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</>.", + "desc_short": "Self-Identity Extension\r\nPress to activate. Heals all team members, grants them an ATK bonus, deals <Ling>Anima DMG</>, pulls enemies in, and builds up Imagination.\r\n\r\nFuture Self Continuity\r\nHold to activate. While in combat, causes 3 allies to enter the Regression state and assist in battle.\r\n\r\nPassive:\r\nFallen allies enter the Regression state while Iroi is on the team and in combat.\r\nBuilds up Imagination when any fallen ally enters the Regression state.", + "context": [ + "Hold to activate. Creates dreamlike illusions during battle, causing 3 allies to enter the <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes2\">Regression</> state and assist in battle. Regression is automatically removed after leaving combat.", + "While Iroi is on the team and in combat, any ally who falls enters the <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes2\">Regression</> state.\r\nBuilds up <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> when any fallen ally enters the Regression state.", + "<Italic>I have to stay awake the night before my birthday. I believe that if I fall asleep, someone will come for the old me and leave a newly grown me in its place.</>" + ], + "icon": "/Game/UI/UI_Icon/Skill/Oneiroi_Skill", + "additional_desc": [ + { + "name": "Imagination", + "desc": "How to build up Imagination: Collaboration, Wakey-Wakey, Reflexive Response, Future Self Continuity, Bang!, and any ally entering Regression after falling.\r\nConsumes Imagination to charge up, unleashing Daydream and Lucid Dream.\r\nChanges the effects of 3.8-Billion-Year Mirage based on Imagination accumulated. Continuously consumes Imagination during the skill." + }, + { + "name": "Regression", + "desc": "Regression: A state where allied characters are replaced in battle by the lambs Morpheus, Icelos, or Phantasos. Characters in this state are invincible, inherit Iroi's stats, and attack automatically. Characters in this state cannot use Revive Items.\r\nEach lamb has 3 attack methods:\r\nMorpheus\r\nSweet Dreams: Fires an anesthetic needle at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nDeep Slumber: Fires multiple anesthetic needles at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nSupport Skill: Fires a powerful anesthetic bomb at the target, dealing AoE DMG on hit and triggering the Esper Cycle effect of the corresponding character's attribute. Press Morpheus's avatar to cast. Consumes Iroi's Cycle Energy. Counts as Support Skill DMG.\r\n\r\nIcelos\r\nLittle Prick: Strikes the target with a syringe slash, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nDouble Dose: Strikes the target with a whirling syringe dance, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nSupport Skill: Launches a syringe-blast attack at the target, dealing AoE DMG on hit and triggering the Esper Cycle effect of the corresponding character's attribute. Press Icelos's avatar to cast. Consumes Iroi's Cycle Energy. Counts as Support Skill DMG.\r\n\r\nPhantasos\r\nLullaby Time: Plays a burst of sound waves at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nOff-Key: Plays a beautiful melody at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nSupport Skill: Performs a flock concert at the target, dealing AoE DMG on hit and triggering the Esper Cycle effect of the corresponding character's attribute. Press Phantasos's avatar to cast. Consumes Iroi's Cycle Energy. Counts as Support Skill DMG." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Oneiroi_Skill_Gun_Damage", + "name": "Redirect Skill: Three Lambs' Attack Ratio", + "icon": "", + "value_name": "{0}% + {1}% *7 + {2}%", + "values": [ + [ + 150, + 162, + 175, + 189, + 204, + 220, + 238, + 257, + 277, + 299, + 323, + 349, + 377 + ], + [ + 17, + 19, + 20, + 22, + 24, + 26, + 28, + 30, + 33, + 35, + 38, + 41, + 45 + ], + [ + 125, + 135, + 145, + 157, + 170, + 183, + 198, + 214, + 231, + 249, + 269, + 291, + 314 + ] + ] + }, + { + "name": "Bonus Ratio Based on Iroi's Base ATK", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "name": "ATK Bonus Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "name": "Healing Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 94, + 1.018, + 1.1, + 1.188, + 1.283, + 1.386, + 1.496, + 1.616, + 1.745, + 1.885, + 2.036, + 2.199, + 2.375 + ] + ] + }, + { + "id_stats": "GA_Oneiroi_Skill", + "name": "Redirect Skill Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + }, + { + "name": "Redirect Skill Cycle Energy", + "icon": "", + "value_name": "8" + }, + { + "name": "Redirect Skill: Builds up Imagination", + "icon": "", + "value_name": "16" + }, + { + "name": "Builds up Imagination when an ally falls", + "icon": "", + "value_name": "20" + }, + { + "id_stats": "GE_Player_Oneiroi_GunAI_Skill1_Damage", + "name": "Regression: Morpheus - Sweet Dreams Base ATK Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 55, + 59, + 64, + 69, + 75, + 81, + 88, + 95, + 102, + 110, + 119, + 129, + 139 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_GunAI_Skill2_Damage", + "name": "Regression: Morpheus - Deep Slumber Base ATK Ratio", + "icon": "", + "value_name": "{0}% *5", + "values": [ + [ + 41, + 44, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 89, + 97, + 104 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_SyringeAI_Skill1_Damage", + "name": "Regression: Icelos - Little Prick Base ATK Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 89, + 96, + 104, + 112, + 121, + 131, + 141, + 152, + 165, + 178, + 192, + 208, + 224 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_SyringeAI_Skill2_Damage", + "name": "Regression: Icelos - Double Dose Base ATK Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 178, + 192, + 208, + 224, + 242, + 262, + 283, + 305, + 330, + 356, + 385, + 416, + 449 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_TrumpetAI_Skill1_Damage", + "name": "Regression: Phantasos - Lullaby Time Base ATK Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 94, + 101, + 109, + 118, + 128, + 138, + 149, + 161, + 174, + 188, + 203, + 219, + 237 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_TrumpetAI_Skill2_Damage", + "name": "Regression: Phantasos - Off-Key Base ATK Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 188, + 203, + 219, + 237, + 256, + 276, + 299, + 322, + 348, + 376, + 406, + 439, + 474 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_GunAI_QTE_Guang_Damage", + "name": "Regression: Lambs' Support Skill Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Oneiroi_UltraSkill", + "name": "3.8-Billion-Year Mirage", + "type_name": "Ultimate", + "desc": "Return to the first dream. Opens the gate to a dream and triggers different effects based on the amount of <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> built up.\r\nIf Imagination has not reached the required threshold: Iroi opens the Dream of the Horned Gate, continuously healing all allies.\r\nIf Imagination has reached the required threshold: Iroi opens the Dream of the Ivory Gate, continuously healing all allies and dealing <Ling>Anima DMG</> to enemies inside the dream. During this time, press and hold the avatar of a team member in the <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes2\">Regression</> state to temporarily revive them and restore a portion of their HP. This effect can revive up to 1 character during each dream.\r\nThe dream continuously consumes <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</>. When Imagination is depleted, the dream ends, and the revived character returns to the <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes2\">Regression</> state.\r\nWhile the dream is active, <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</> cannot be built up, but casting Daydream and Lucid Dream do not consume <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</>.", + "desc_short": "Opens a dream and triggers different effects based on the amount of Imagination built up.\r\nBelow threshold: Continuously heals all allies.\r\nAt threshold: Deals continuous <Ling>Anima DMG</>. Switching to a character in Regression state during the dream revives that character and restores some portion of their HP.\r\nThe dream ends when Imagination is depleted. The revived character then returns to Regression.\r\nWhile the dream is active, Imagination cannot be built up, but casting Daydream and Lucid Dream do not consume Imagination.", + "context": "<Italic>I heard the bell at both ends of the dream: once at the beginning, once at the end. But the bell only rang once. From hydrothermal vents in the deep sea to skyscrapers on land, that awful chime has followed everything. Oh my, it's been ringing for 3.8 billion years.</>", + "icon": "/Game/UI/UI_Icon/Skill/Oneiroi_UltraSkill", + "additional_desc": [ + { + "name": "Imagination", + "desc": "How to build up Imagination: Collaboration, Wakey-Wakey, Reflexive Response, Future Self Continuity, Bang!, and any ally entering Regression after falling.\r\nConsumes Imagination to charge up, unleashing Daydream and Lucid Dream.\r\nChanges the effects of 3.8-Billion-Year Mirage based on Imagination accumulated. Continuously consumes Imagination during the skill." + }, + { + "name": "Regression", + "desc": "Regression: A state where allied characters are replaced in battle by the lambs Morpheus, Icelos, or Phantasos. Characters in this state are invincible, inherit Iroi's stats, and attack automatically. Characters in this state cannot use Revive Items.\r\nEach lamb has 3 attack methods:\r\nMorpheus\r\nSweet Dreams: Fires an anesthetic needle at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nDeep Slumber: Fires multiple anesthetic needles at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nSupport Skill: Fires a powerful anesthetic bomb at the target, dealing AoE DMG on hit and triggering the Esper Cycle effect of the corresponding character's attribute. Press Morpheus's avatar to cast. Consumes Iroi's Cycle Energy. Counts as Support Skill DMG.\r\n\r\nIcelos\r\nLittle Prick: Strikes the target with a syringe slash, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nDouble Dose: Strikes the target with a whirling syringe dance, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nSupport Skill: Launches a syringe-blast attack at the target, dealing AoE DMG on hit and triggering the Esper Cycle effect of the corresponding character's attribute. Press Icelos's avatar to cast. Consumes Iroi's Cycle Energy. Counts as Support Skill DMG.\r\n\r\nPhantasos\r\nLullaby Time: Plays a burst of sound waves at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nOff-Key: Plays a beautiful melody at the target, dealing DMG on hit. Cooldown applies. Counts as Redirect Skill DMG.\r\nSupport Skill: Performs a flock concert at the target, dealing AoE DMG on hit and triggering the Esper Cycle effect of the corresponding character's attribute. Press Phantasos's avatar to cast. Consumes Iroi's Cycle Energy. Counts as Support Skill DMG." + } + ], + "stats": [ + { + "name": "Post-Cast Healing Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 1.413, + 1.526, + 1.648, + 1.78, + 1.923, + 2.076, + 2.243, + 2.422, + 2.616, + 2.825, + 3.051, + 3.295, + 3.559 + ] + ] + }, + { + "name": "Continuous Healing Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 31, + 33, + 36, + 39, + 42, + 46, + 49, + 53, + 58, + 62, + 67, + 73, + 79 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_UltraSkill_Damage", + "name": "Post-Cast DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 300, + 324, + 349, + 377, + 408, + 440, + 476, + 514, + 555, + 599, + 647, + 699, + 755 + ] + ] + }, + { + "id_stats": "GE_Player_Oneiroi_UltraSkill1_Damage", + "name": "DoT Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 25, + 27, + 29, + 31, + 34, + 36, + 39, + 42, + 46, + 50, + 54, + 58, + 63 + ] + ] + }, + { + "name": "Imagination Limit", + "icon": "", + "value_name": "100" + }, + { + "name": "Within the Dream: Imagination Cost Per Second", + "icon": "", + "value_name": "8" + }, + { + "id_stats": "GA_Oneiroi_UltraSkill", + "name": "CD", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16 + ] + ] + }, + { + "id_stats": "GA_Oneiroi_UltraSkill", + "name": "Ultimate Energy Cost", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Oneiroi_QTE", + "name": "Bang!", + "type_name": "Support Skill", + "desc": "Just in time! Picks up Morpheus and strikes forward, dealing 1 instance of <Ling>Anima DMG</>, healing all team members, and building up <hot textstyle=\"TextEXPL\" param=\"nouns&OneiroiRes1\">Imagination</>.", + "desc_short": "Deals <Ling>Anima DMG</> and heals all team members, building up Imagination.", + "context": "<Italic>Would you believe me if I said this is the sound of the Big Bang?</>", + "icon": "/Game/UI/UI_Icon/Skill/Oneiroi_QTE", + "additional_desc": [ + { + "name": "Imagination", + "desc": "How to build up Imagination: Collaboration, Wakey-Wakey, Reflexive Response, Future Self Continuity, Bang!, and any ally entering Regression after falling.\r\nConsumes Imagination to charge up, unleashing Daydream and Lucid Dream.\r\nChanges the effects of 3.8-Billion-Year Mirage based on Imagination accumulated. Continuously consumes Imagination during the skill." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Oneiroi_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + }, + { + "name": "Healing Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 1.029, + 1.111, + 1.2, + 1.296, + 1.4, + 1.512 + ] + ] + }, + { + "name": "Builds up Imagination", + "icon": "", + "value_name": "10" + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv1", + "OrdinaryMonMaterial_02_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "OrdinaryMonMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "OrdinaryMonMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Oneiroi_Passive_1", + "name": "Mirror Image", + "type_name": "Passive Skill", + "desc": "<TextHLT>Blossom Enhancement</>: Generates a Vita Bud Copy when the current Vita Bud has existed for 3s. This copy cannot duplicate and does not count toward the Vita Bud limit. The copy produces 20 Copied Vita Pistils. Every 0.5s, one Copied Vita Pistil flies toward a target within range and explodes, dealing 37.5% of the original Vita Pistil's DMG.", + "context": "<Italic>Sometimes, my shadow gets there before I do.</>", + "icon": "/Game/UI/UI_Icon/Skill/Oneiroi_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv2", + "weeklycloneboss_a01_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Oneiroi_Passive_2", + "name": "Sympathetic Nerves", + "type_name": "Passive Skill", + "desc": "Grants all team members an additional 5% DEF Ignore for 20s when performing healing.", + "context": "<Italic>My body lives on faithfully, covered in scars and never saying a word.</>", + "icon": "/Game/UI/UI_Icon/Skill/Oneiroi_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_02_lv3", + "weeklycloneboss_a01_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Oneiroi_Passive_3", + "name": "95-Million-Year Divide", + "type_name": "Character Traits", + "desc": "Interacts with small animals in the open world to obtain a random growth item, up to 3 times per day and 999 times in total.", + "context": "<Italic>Which path should I follow?</>", + "icon": "/Game/UI/UI_Icon/Skill/Oneiroi_Pas3", + "additional_desc": [], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_Oneiroi_01", + "name": "Come On In!", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_hyhy", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Iroi increases Traffic by <Green2>18</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Iroi reduces Ingredient Consumption Rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Iroi increases Traffic by <Green2>18</>." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Iroi reduces Ingredient Consumption Rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Iroi increases Traffic by <Green2>27</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + }, + { + "id": "City_Ability_Oneiroi_02", + "name": "Ride-Along Chat", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_dtct", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Grants an additional <Green2>1000</> Fons in Base Fare for each order in Swift Cab." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Increases each customer's satisfaction limit in Swift Cab by <Green2>25</> points." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Iterated Prisoner's Dilemma", + "desc": "Restores 3 Imagination per second while Iroi is off-field.\r\nIncreases Imagination gain by 30% and grants Iroi maximum Imagination upon entering battle.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1075_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Strategy: Tit for Tat", + "desc": "Summons Morpheus, Icelos, or Phantasos at random when any ally casts a skill, performing 1 assist attack that deals DMG equal to 200% of Iroi's ATK. Restores all team members' HP by 120% of Iroi's ATK. Cooldown: 5s.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1075_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Trait: Cooperative", + "desc": "Increases Iroi's healing effects by 36%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1075_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Trait: Retaliatory", + "desc": "Increases the ATK Ratio of lambs that replace allies in the Regression state:\r\nMorpheus:\r\nSweet Dreams: up by 30%\r\nDeep Slumber: up by 30%.\r\n\r\nIcelos:\r\nLittle Prick: up by 30%\r\nDouble Dose: up by 30%.\r\n\r\nPhantasos:\r\nLullaby Time: up by 30%\r\nOff-Key: up by 30%.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1075_4", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Trait: Transparent", + "desc": "Additional Sympathetic Nerves Effect: Increases all team members' ATK by 15% of Iroi's Base ATK for 20s.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1075_5", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Trait: Forgiving", + "desc": "Grants 100% HP, 50 Cycle Energy, and 50 Ultimate Energy to the character revived after Iroi casts 3.8-Billion-Year Mirage.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1075_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Primate Among All Things", + "desc": "Increases the skill level of Collaboration, Future Self Continuity, and 3.8-Billion-Year Mirage by 1.\r\nIncreases all team members' DEF by 30% while Iroi is on the team.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Self-Proclaimed Crown of Creation", + "desc": "Increases all team members' Crit DMG by 25% while Iroi is on the team. Increases Iroi's DMG dealt by 15% and Crit Rate by 5% for each ally in the Regression state.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1075/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + -1, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "AtkUp", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": true, + "value": 10 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Furniture_Gacha_eri_003", + "amount": 100 + }, + { + "item_id": "Furniture_Gacha_eri_004", + "amount": 100 + }, + { + "item_id": "Furniture_Gacha_eri_005", + "amount": 100 + }, + { + "item_id": "Food_027", + "amount": 100 + }, + { + "item_id": "Flower0004", + "amount": 200 + }, + { + "item_id": "Furniture_draw_002", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_eri_002", + "amount": 200 + }, + { + "item_id": "Furniture_draw_001", + "amount": 400 + }, + { + "item_id": "Furniture_draw_008", + "amount": 400 + }, + { + "item_id": "Furniture_Ornament_002", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "Furniture_Ornament_038", + "amount": 400 + }, + { + "item_id": "SpecialGift_1075", + "amount": 1200 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1075" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1075" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Friendship_3_1075", + "Gold" + ], + "amount": [ + 20, + 1, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1075" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1075", + "Friendship_4_1075" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1075" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1075", + "Fashion_character_1075_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Hi there! My name is Oneiroi. It's hard to pronounce, so just call me Iroi! Let me know if you ever need anything. Cya!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_meet_001" + }, + { + "name": "Chat: Kicking Pebbles", + "desc": "I can't help but feel like kicking pebbles whenever I see them… I kick it further and further, until it disappears into somewhere I can't see. Do you do that too?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_chat_001" + }, + { + "name": "Chat: School", + "desc": "My friends always have interesting things to say about school. I was home-schooled and didn't have any classmates. It's a shame that I never had a real school life.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_chat_002" + }, + { + "name": "Chat: Evolutionary Theory", + "desc": "Natural selection is the survival of the fittest… That's the only thing my teacher said about the theory of evolution. She didn't have to explain, since that was the first dream \"I\" ever had…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_chat_003" + }, + { + "name": "Sunny", + "desc": "The sun is shining, the flowers blooming…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_weather_001" + }, + { + "name": "Rainy", + "desc": "My tail got soaked…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_weather_002" + }, + { + "name": "Cold", + "desc": "I can't feel my limbs anymore.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_weather_003" + }, + { + "name": "Hot", + "desc": "I want to get out of this scorching place.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "(Yawn) Good morning!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "It's time for a nap.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "There goes Mr. Sun.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_greet_003" + }, + { + "name": "Good Night", + "desc": "The night. Has come.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_greet_004" + }, + { + "name": "Hobbies", + "desc": "What do I like? I like anything other people like! Wait, you're saying some people like the things other people hate? Then they can fight each other and I'll side with the winner!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_hobby_001" + }, + { + "name": "Worries", + "desc": "My kiddo friends, Morpheus, Icelos, and Phantasos, always get themselves into trouble. I wonder if there's a way to get them under control…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_vexation_001" + }, + { + "name": "Topic: Sheep", + "desc": "I heard some cultures think goats are evil… Kiddos, do you think you're baddies? Oh, you don't? Kiddos, lying only makes our image worse!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_talk_001" + }, + { + "name": "Topic: Room", + "desc": "When I was a kid, I spent a lot of time in the hospital because I got sick a lot. Back then, I thought everyone slept in white beds with those beeping and ticking machines. When I told colleagues at the charity house about this, they thought I slept in a haunted room!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_talk_002" + }, + { + "name": "Topic: Dreamscapes", + "desc": "Do you like dreaming? Wanna take a look at my dreams? Just make sure you go through the gate with the bull horns. If you walk through the ivory gate, I won't be able to get you out. You'd have to watch yourself grow from an embryo back into yourself!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_talk_003" + }, + { + "name": "About Myself: Family", + "desc": "My parents love me very much and have done a lot for me. They just want me to be happy. I'm grateful for them, yet I sometimes can't help but think… if only a healthier kid was born instead…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_self_001" + }, + { + "name": "About Myself: Sleep", + "desc": "I guess I've always been sleeping. Even when I'm live and kicking, I'm still dream-walking!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_self_002" + }, + { + "name": "About Myself: Esper Ability", + "desc": "The shell known as Oneiroi gained a new life after her Esper ability awakened. That's not the real me. Do you get it? The real me is the one who's dreaming. The one talking to you is but a counterfeit role-playing a good kid!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_self_003" + }, + { + "name": "About? Myself?", + "desc": "My body was deteriorating, but my powers allowed me to live. She is not me. She lives in place of me. Am I still alive? I… don't know.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_self_004" + }, + { + "name": "About Mint", + "desc": "Mint senpai has limitless energy and passion. I want to be like her too! I'm lying? No, no, no, why would you say that? I mean it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_about_001" + }, + { + "name": "About Shinku I", + "desc": "After I took Shinku into my dreams, she started hating on me. Did she not like what I showed her? Or… did she figure something out?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_about_002" + }, + { + "name": "About Shinku II", + "desc": "We're on good terms now. That skeptical dragon misunderstood me. At least according to Mint, Shinku and I \"take good care\" of each other now!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_about_003" + }, + { + "name": "About Nanally", + "desc": "Nanally is a little younger than I am, right? I'm a bit jealous of her, because she already knows what she wants to do at her age!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_about_004" + }, + { + "name": "Character Ascension I", + "desc": "I'll keep trying!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "Hmm… how much further can I go?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "This should be as far as I level up… Thanks for helping me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Oh, woah! I like this! Thanks a lot!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Is this for me? I'll gladly accept it, thanks!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Appreciate it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "What a great gift!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Time for a nightmare!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Wakey-wakey!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "All kiddos, on my command!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Everyone, let's all crawl back into Mommy's belly!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "It's super scary inside my dreams!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Have fun in your dreams… I mean nightmares!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Listen up! Stay here and don't run away!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_containment_001" + }, + { + "name": "Containment II", + "desc": "Containment complete!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_containment_002" + }, + { + "name": "Nullification I", + "desc": "Those who can't learn will have to be nullified… Sorry!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Maybe we'll meet again.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "This is unexpected!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Nice!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "What goodies this time?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Morpheus, don’t touch that!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Never seen this before.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Woah, can I bring this into a dream?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Cold… so cold…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_hp_001" + }, + { + "name": "Low Health II", + "desc": "My legs won't move anymore.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_hp_002" + }, + { + "name": "Low Health III", + "desc": "My body. Hurts.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_hp_003" + }, + { + "name": "Heal I", + "desc": "A breath of fresh air!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_fh_001" + }, + { + "name": "Heal II", + "desc": "I'm so back!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_fh_002" + }, + { + "name": "Down I", + "desc": "The sky. Has no, openings.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_dead_001" + }, + { + "name": "Down II", + "desc": "Can I… be peaceful again?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_dead_002" + }, + { + "name": "Down III", + "desc": "Outside. Getting quiet.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_dead_003" + }, + { + "name": "Takedown I", + "desc": "Oh my, I forgot to say goodbye.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_kill_001" + }, + { + "name": "Takedown II", + "desc": "Wow, gone already?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_kill_002" + }, + { + "name": "Damaged I", + "desc": "Ugh!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_struck_001" + }, + { + "name": "Damaged II", + "desc": "Oww!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Ouch, ouch, ouch…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Got hurt…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Iroi, here to battle!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_deploy_001" + }, + { + "name": "Deploy II", + "desc": "I'll do my best!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Let's go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Kiddo beam!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Ready—Fire!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_QTE_003" + }, + { + "name": "Glide I", + "desc": "Am I really flying…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_Fly_001" + }, + { + "name": "Glide II", + "desc": "Let's go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_Fly_002" + }, + { + "name": "Switch I", + "desc": "Ah, my turn already?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_Switch_001" + }, + { + "name": "Switch II", + "desc": "Kiddos, it's our turn to shine!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_Switch_002" + }, + { + "name": "Switch III", + "desc": "Ah, me? I'm coming!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_Switch_003" + }, + { + "name": "Special Switch - Mint", + "desc": "Mint senapi, I'm here!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_SSC_BH_001" + }, + { + "name": "Special Switch - Shinku", + "desc": "Oh my, Shinku, you can't handle this alone?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_SSC_ZH_002" + }, + { + "name": "Special Switch - Zero", + "desc": "Appraiser, I'm here to help!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_SSC_zero_003" + }, + { + "name": "Teammate Down - Mint", + "desc": "Did Mint senpai pass out? Leave this to me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_TeammateDown_001" + }, + { + "name": "Teammate Down - Shinku", + "desc": "Oh, that just happened again…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_TeammateDown_002" + }, + { + "name": "Teammate Down - Zero", + "desc": "Huh? Appraiser… gone?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_TeammateDown_003" + }, + { + "name": "Parry I", + "desc": "I really blocked it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_Parry_001" + }, + { + "name": "Parry II", + "desc": "Arm. Sore.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Heh, how did you miss those?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Phew! I got away with that.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC028/Play_Vo_Char_NPC028_DodgeCombo_002" + } + ] + } + }, + { + "id": "1071", + "name": "Chaos", + "description": "Often mistaken for Squad 4's captain, despite being the lieutenant.", + "element": [ + { + "element_id": "Lakshana", + "name": "Lakshana" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_kaesi1", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_kaesi1_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi1_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_fashionshop_kaesi", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + } + ], + "arcs_tags": { + "type_id": "5", + "name": "Condensate", + "icon": "/Game/UI/UI/player/YH_UI_icon_boson" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Stain", + "desc": "Increases the target's <bule>Psyche and Lakshana DMG</> taken by <NumGreen>20%</> for <NumGreen>12s</> after triggering Esper Cycle." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1071_nighty", + "characterId": "1071", + "name": "Never Skip", + "desc": "Even on days off, training never stops!", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_kaesi", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_kaesi", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_kaesi", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1071_0", + "characterId": "1071", + "name": "Pursuer", + "desc": "Dark attire cloaked in night.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi1_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_kaesi1", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi1_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_kaesi1", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_kaesi1", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1071_swimsuit", + "characterId": "1071", + "name": "Chartered Waves", + "desc": "A dark figure races across the waves, carving out a route of his own. Where does it lead? Eh, he'll figure it out.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_kaesi3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_kaesi3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_kaesi3", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1071_1", + "characterId": "1071", + "name": "Clear Skies", + "desc": "A casual streetwear look that pairs simple pieces with bold accessories to express true individuality.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi2_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_kaesi2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_kaesi2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_kaesi2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_kaesi2", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1300, + 1404, + 1508, + 1612, + 1716, + 1820, + 1924, + 2028, + 2132, + 2236, + 2340, + 2444, + 2548, + 2652, + 2756, + 2860, + 2964, + 3068, + 3172, + 3276, + 3380, + 3484, + 3588, + 3692, + 3796, + 3900, + 4004, + 4108, + 4212, + 4316, + 4420, + 4524, + 4628, + 4732, + 4836, + 4940, + 5044, + 5148, + 5252, + 5356, + 5460, + 5564, + 5668, + 5772, + 5876, + 5980, + 6084, + 6188, + 6292, + 6396, + 6500, + 6604, + 6708, + 6812, + 6916, + 7020, + 7124, + 7228, + 7332, + 7436, + 7540, + 7644, + 7748, + 7852, + 7956, + 8060, + 8164, + 8268, + 8372, + 8476, + 8580, + 8684, + 8788, + 8892, + 8996, + 9100, + 9204, + 9308, + 9412, + 9516 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 108, + 112, + 116, + 120, + 124, + 128, + 132, + 136, + 140, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 184, + 188, + 192, + 196, + 200, + 204, + 208, + 212, + 216, + 220, + 224, + 228, + 232, + 236, + 240, + 244, + 248, + 252, + 256, + 260, + 264, + 268, + 272, + 276, + 280, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 364, + 368, + 372, + 376, + 380, + 384, + 388, + 392, + 396 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 76, + 82, + 88, + 94, + 100, + 106, + 112, + 119, + 125, + 131, + 137, + 143, + 149, + 155, + 161, + 167, + 173, + 179, + 185, + 192, + 198, + 204, + 210, + 216, + 222, + 228, + 234, + 240, + 246, + 252, + 258, + 264, + 271, + 277, + 283, + 289, + 295, + 301, + 307, + 313, + 319, + 325, + 331, + 337, + 344, + 350, + 356, + 362, + 368, + 374, + 380, + 386, + 392, + 398, + 404, + 410, + 416, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 483, + 489, + 496, + 502, + 508, + 514, + 520, + 526, + 532, + 538, + 544, + 550, + 556 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_04_lv1", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_04_lv2", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_04_lv3", + "Worldboss_material_07", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "ETD-6 Member", + "description": "\"Wait, where did today’s missions go? I was ready to head out!\"\n\"That guy from ETD-6 already took care of them for us.\"\n\"How much has he taken care of this month? I barely feel like I work here anymore!\"\n\"Yeah… Maybe he could be a little less helpful sometimes…\"", + "birthday": "Jan 1", + "homePlace": "Bureau of Anomaly Control, ETD-6", + "abilityName": "\"In the beginning, none could tell heaven from earth.\"", + "introduction": "Current member of ETD-6. Your most righteous and reliable friend.", + "voiceChinese": "淦子齐", + "voiceEnglish": "Rick Kumazawa", + "voiceJapanese": "小西克幸", + "voiceKorean": "원종준" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "The core strikeforce of ETD-6, the one who gets things done, the blade that swings at every anomaly crime.\r\n\"Can I really say that? Isn't that exaggerating a bit?\"\r\n\"It's cooler than 'Your friendly ETD-6 member' for sure.\"\r\n\r\nMost people's first impression of Chaos is \"that weirdo with the mask.\" At first, they find Chaos unapproachable, but as long as they spend some time with him, they'd realize that he's joyful, cheerful, and easy-going. The moment you start talking to him, the conversation flows like a tide, until he catches himself talking too much, or the listener becomes impatient, or a new mission notification rings.\r\nIn combat, however, he transforms into a battle junkie. His willpower is as strong as iron; he never runs out of stamina, and he refuses to let go of his targets. Sometimes, he's so eager to catch a criminal, that he ignores everything else, such as the Bureau's rules and regulations. If you ask him about the rules, he'll likely admit that he's never figured out the Bureau's red tape or hierarchies. In fact, sometimes, he even forgets he works for the Bureau. Fortunately, he works for one of the most flexible units in the organization.\r\nHis teammates in Unit 6 don't mind his quirks. It helps that their all-capable captain can always handle the fallout, so Chaos's habit of ignoring processes has arguably improved the team's performance. The captain, who handles cleanups personally, has made no comment on the matter.\r\n\r\nChaos's Esper ability is summoning a mass of smoke that can be shaped into solid forms. The amount of smoke isn't fixed, but it never drops below a certain level. Chaos believes the output of his smoke corresponds to the past crimes of those around him, as he'd always generated more smoke in places with a criminal history. Still, that's only his theory. The actual mechanism remains unknown.\r\n\"Is that how my powers work?\"\r\n\"Hey, why would you think I know your powers better than you?\"" + }, + { + "name": "Graveyard Keeper", + "desc": "Before working for the Bureau of Anomaly Control, Chaos was once the graveyard keeper for Ghroth Island. He was responsible for overseeing criminals, not knowing that he would be catching criminals in the future.\r\n\r\nEventually, a major incident—the jailbreaking of a dangerous Esper criminal—would push him to join the Bureau. Though it was not his fault, Chaos blamed himself for not monitoring the inmates more effectively. To make up for his mistake, he swore that he'd put in Ghroth Islalnd every criminal who deserves to be there. Only after that, would he return to meet the warden.\r\nSince no one could hold back Chaos once he made up his mind, the warden, who didn't want to overstep and cause trouble to the BAC, entrusted him to the Bureau and transferred him to ETD to deal with anomaly crimes." + }, + { + "name": "Boulder", + "desc": "Before entering Ghroth Island, Chaos was an Anomaly Hunter on a small island, where he went by his old name, Conrak. Eventually, he would abandon the name he received from his parents like a sunken boat in the sea.\r\n\r\nConrak once got into a shipwreck with another 11 crewmates. They found themselves in an ocean isolated from the world\r\nThere was an archipelago in the ocean, which didn't even have internet access. Conrak and his crewmates settled on one of the islands but never stopped wanting to go back. Unfortunately, no islander was willing to leave their home to ferry them across unknown waters, and no outside vessels passed through the islands. The group decided to build a ship and sail home by themselves. They named the ship \"the Boulder.\"\r\nOnce they built the Boulder, the group began to save up supplies for their return trip. For two years, the group navigated the Boulder around the islands to transport goods for funds. Since the group members were also Anomaly Hunters, they often took commissions, solving many issues that plagued the islanders. Gradually the \"Boulder Hunters\" became known local heroes.\r\nIn the end, because the group lived peacefully on the islands and was praised as heroes, some of them no longer wished to risk another adventure to return. Only five of them decided to go back.\r\n\r\nHowever, on its return journey, the Boulder went through a storm. Conrak fell into the sea, and his companions weren't able to find him.\r\nLuckily, Conrak fell into the sea near Ghroth Island and was saved by a staff member.\r\nOnce he formally joined Ghroth Island, Conrak changed his name to Chaos." + }, + { + "name": "Starting Point", + "desc": "Long before the Boulder went on its adventures, Conrak was an ordinary boy living in a small seaside town. The sea was calm, and he would often stand at the shore gazing at the water, with no way of seeing the storms that would occupy the second half of his life.\r\n\r\nWhen Conrak was 13, his parents put him on a boat to travel far. They said they were preparing Conrak for the life of a sailor.\r\nConrak didn't know that his parents didn't love him, nor did he know that he was seen as a burden to their struggling family. He merely believed that he would become a sailor, make a great deal of money, then take his parents somewhere far away for a happier life. He even brought home a dog, feeding it out of his own pocket money, hoping that when he was away, the dog would look after his parents.\r\nConrak opened the last bag of dog food and kissed the dog on the cheek, then waved at his family and boarded the ship, not knowing it would never return.\r\nIn fact, the ship was a smuggler's ship, and its destination was an uninhabited island, though it never got there.\r\nMidway through the voyage, the ship sank in a storm. Conrak awakened his Esper Ability, and black smoke took shape in the form of a ship. He and the other survivors miraculously made it through, carried by their abilities—only to find themselves in an ocean isolated from the rest of the world.\r\nFrom here unfolds the story of the 17-year-old Conrak and his companions." + }, + { + "name": "Fortelling", + "desc": "\"You will die with infamy.\"\r\nChaos found himself on the receiving end of such foretelling. When they were still building the Boulder, a mysterious old person stopped him suddenly and left him with these words.\r\nSomehow, Chaos never forgot them. At times, he would tell himself that unfounded words aren't worth dwelling on, but whenever a mission goes wrong, the words would come back to haunt him. Every omen from that island has come true. Even in doubt of his own fate, he brought countless wrongdoers to justice.\r\nThat doesn't mean he pursues justice to defy the omens. He's had a passion for fighting evil and upholding good since he was young. The fortelling simply stirred a hidden, rebellious streak in him, making him more driven, until he became the relentless force against evil he is today." + }, + { + "name": "Bird", + "desc": "There was an Esper who went by the name of Icaria on the Boulder. She was short and had a pair of wings, which saved her when the smuggler's ship sank. She usually enjoys zipping around, often joking that she never grew taller because her feet never touched the ground. Conrak called her \"Shorty.\"\r\nIcaria didn't have any parents. She just had an older brother, who liked to make a big deal about working hard to raise her. The brother, however, never cared about her. That's why Icaria decided to stay on the island, though she was capable of flying home herself.\r\nIcaria died when the crew fought an anomaly known as the Kraken. Her wings were not made from feathers, but from some material that melted in high heat. During the fight, she tried to make the anomaly focus on her, but her wings melted when she flew too high and fell right into the Kraken.\r\n\r\nAfter that, Conrak was frustrated about the limitations of his abilities. He tried to experiment with what kind of shapes his smoke could form. Just before a battle, a bird flew past him. He thought that if he could shape his smoke into a bird, he could take to the sky.\r\nThis idea didn't come at a good time: he couldn't apply it to the battle at hand, but it was enough to make him regretful… If only he had thought of it sooner, he could have saved Icaria.\r\nNonetheless, the idea wouldn't have helped even if he had it earlier. \r\n\r\nChaos is still trying to create flying birds with his smoke. Even after years of practice, he is still only able to create a few small birds that could fly a few meters, unable to even carry the tiniest speck of dust." + }, + { + "name": "Torn Page", + "desc": "\"In the 600th year, rain fell for forty days and forty nights. Waters rose upon the face of the earth, swallowing every hill and filling every valley until all was made plain.\"\r\n…\r\n…\r\nHe said his name was \"Plain,\" but that didn't sound like a real name. He's a mysterious guy. It's like he knows everything, but I've never seen him in a fight. He likes to claim that he's omniscient and omnipotent, and although he's never been wrong… I just can't help but find him annoying.\r\nOur boat is built. Plain said we needed to give it a name and proposed to call it \"the Boulder.\" Hello??? Wouldn't a boulder sink in the sea? What an unlucky name! The others, however, seemed to like the name, especially that crazy woman with the vines, who said she'll write a heroic epic from the adventures of the Boulder. Is she serious? Plain even gave her his approval, saying that we'll all become heroes. Where did thIs confidence come from?\r\n…\r\nWe're actually getting more and more commissions and we're getting more famous. Everyone thinks we're heroes.\r\nPlain has yet to be wrong. I do respect that. By the way, the boat is operational, and we can now call him \"Captain.\" I don't like to call him \"Plain,\" so that's a win for me. Anyway, if he truly knew about everything, why would he ever be sent on that smuggler's ship in the first place?\r\n…\r\nThere've been sightings of a monster that resembles an octopus. Many people got hurt. We need to take it down. The captain hesitated for a long time before deciding to accept the commission. I'm not sure what's on his mind. I just know that it has to be us.\r\nDuring our strategic meeting, the captain kept telling Shorty to not fly too high. It's not like she can fly that high, right?\r\n…\r\nIt's over. We won. Shorty died. I can't believe the crazy woman with vines drank too much and didn't show up. This was such an important fight… Had she been there, Shorty might have survived. But thoughts like this won't help…\r\n…\r\nWe have enough supplies to go back, but some don't want to leave. They want to be \"heroes\" here… I get it. We don't know what kind of dangers lies ahead on our way back… but still, I need to return.\r\nI must return.\r\n…\r\n…\r\nNow I realize, my parents knew it was a smuggler's ship.\r\nI don't have to go back now… Ghroth Island is not that bad anyway." + } + ], + "melee": [ + { + "id": "GA_Chaos071_Melee", + "name": "Pursuit", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Pursuit</>", + "<Title>Basic Attack: Final Verdict</>", + "<Title>Basic Attack: Overturn</>", + "<Title>Critical Riposte: Intuition / Instinct</>" + ], + "desc": [ + "Wields his weapon and performs up to <NumGreen>5</> consecutive attacks, dealing <Xiang>Lakshana DMG</> and building up <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</>.", + "Your guilt is plain to see. Hold Basic Attack to trigger Final Verdict. Consumes all <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> to add a 2nd hit to Final Verdict and deal heavy Settlement DMG if current <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> is at its cap (1000). Performs only the 1st hit of Final Verdict, dealing <NumGreen>2</> instances of damage, if <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> has not reached its cap.", + "Press Basic Attack while airborne to plunge, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> to an area upon impact. Increases DMG based on fall height, up to <NumGreen>1×</>. Focuses his mind and awakens a hunter's perception, sensing nearby enemies for a short time. Sensed targets are highlighted with a special outline.", + "Triggers when using Pursuit after performing a Critical Dodge. Swings his hatchet at the target, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</> and reducing Break." + ], + "desc_short": [ + "Deals <Xiang>Lakshana DMG</>.", + "Hold Basic Attack to deal <Xiang>Lakshana DMG</>. Consumes all <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crimes</> to perform an additional 2nd strike if current <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> is at its cap (1000). Otherwise, performs only the 1st strike.", + "Deals <Xiang>Lakshana DMG</>." + ], + "context": "<Italic>Honed over countless years. </>", + "icon": "/Game/UI/UI_Icon/Skill/Chaos_Melee", + "additional_desc": [ + { + "name": "Crime", + "desc": "Chaos builds up <TextEXPL>Crime</> by performing certain combat actions." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Chaos_Melee1_Damage", + "name": "1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_Melee2_Damage", + "name": "2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 15, + 16, + 17, + 19, + 20, + 22, + 24, + 25, + 27, + 30, + 32, + 35, + 38 + ], + [ + 39, + 42, + 45, + 49, + 53, + 57, + 61, + 66, + 72, + 78, + 84, + 90, + 98 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_Melee3_Damage", + "name": "3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 14, + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_Melee4_Damage", + "name": "4th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% *2 + {2}%", + "values": [ + [ + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57, + 62, + 67 + ], + [ + 10, + 11, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 20, + 22, + 23, + 25 + ], + [ + 86, + 92, + 100, + 108, + 117, + 126, + 136, + 147, + 159, + 171, + 185, + 200, + 216 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_Melee5_Damage", + "name": "5th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *2 + {1}%", + "values": [ + [ + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 46, + 49, + 53, + 58, + 62 + ], + [ + 79, + 86, + 93, + 100, + 108, + 117, + 126, + 136, + 147, + 159, + 172, + 186, + 200 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_Airattack_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77, + 83, + 90, + 97, + 104, + 113 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_Branch1_Damage", + "name": "Branch 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 57, + 62, + 67, + 72, + 78, + 84, + 91, + 98, + 106, + 114, + 124, + 134, + 144 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_Branch2_Damage", + "name": "Branch 2nd Instance Settlement DMG Ratio", + "icon": "", + "value_name": "{0}% *2", + "values": [ + [ + 400, + 432, + 466, + 503, + 544, + 587, + 634, + 685, + 740, + 799, + 863, + 932, + 1007 + ] + ] + }, + { + "id_stats": "GE_Player_Chaos_PerfectEvadeAttack1_Damage", + "name": "Critical Riposte Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 106, + 114, + 123, + 133, + 144, + 155, + 168, + 181, + 196, + 211, + 228, + 247, + 266 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Full Basic Attack combo: Builds up Crime", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300 + ] + ] + }, + { + "name": "Critical Riposte: Builds up Crime", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + }, + { + "name": "Plunge Attack: Builds up Crime", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Chaos071_Skill", + "name": "Doubtmark", + "type_name": "Redirect Skill", + "desc_name": "<Title>Doubtmark</>", + "desc": "Target traits confirmed. Fires at enemies ahead and summons his hound to pounce on the target. The hound bites the target back and forth <NumGreen>twice</>. Inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> on up to <NumGreen>2</> enemies for <NumGreen>15</>s when the skill hits. Increases damage dealt by <NumGreen>20%</> when attacking targets with <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</>.", + "desc_short": "Deals <Xiang>Lakshana DMG</> and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> on the target. Deals bonus damage to targets with <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</>.", + "context": "<Italic>Chaos can't remember when the hound first appeared. He only remembers missing the little dog from home, and then the hound was there. </>", + "icon": "/Game/UI/UI_Icon/Skill/Chaos_Skill", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Chaos_Skill1_Damage", + "name": "Bite DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 82, + 89, + 96, + 103, + 112, + 121, + 130, + 141, + 152, + 164, + 178, + 192, + 207 + ], + [ + 217, + 234, + 253, + 274, + 295, + 319, + 345, + 372, + 402, + 434, + 469, + 507, + 547 + ] + ] + }, + { + "name": "Targets with Warrant", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ] + }, + { + "id_stats": "GA_Chaos071_Skill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "name": "Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + }, + { + "name": "Builds up Crime", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + }, + { + "name": "Warrant Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Chaos071_UltraSkill", + "name": "Retribution", + "type_name": "Ultimate", + "desc": "Summons his hound to suppress nearby enemies, inflicting <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> on all enemies within range and entering the <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosInfamyCycle\">Dread Echo</> state. Rapidly increases <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> over time while Chaos and Dread Echo are active, allowing Final Verdict to be cast more often and deal heavy Settlement DMG.", + "desc_short": "Enters the <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosInfamyCycle\">Dread Echo</> state. Rapidly increases <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> over time while Dread Echo is active and Chaos is on the field, and inflicts <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> on all enemies within range.", + "context": "<Italic>Deep down, you know good and evil cycle endlessly, and none of it ever truly ends. </>", + "icon": "/Game/UI/UI_Icon/Skill/Chaos_UltraSkill", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + }, + { + "name": "Dread Echo", + "desc": "Enters an enhanced state after casting Retribution. While active, <TextEXPL>Crime</> stacks rapidly over time." + }, + { + "name": "Crime", + "desc": "Chaos builds up <TextEXPL>Crime</> by performing certain combat actions." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Chaos_UltraSkill1_Damage", + "name": "Suppression DMG Ratio", + "icon": "", + "value_name": "{0}% *4 + {1}%", + "values": [ + [ + 127, + 137, + 148, + 160, + 173, + 187, + 202, + 218, + 235, + 254, + 274, + 296, + 320 + ], + [ + 290, + 314, + 339, + 366, + 395, + 427, + 461, + 498, + 538, + 581, + 628, + 678, + 732 + ] + ] + }, + { + "name": "Dread Echo Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + }, + { + "name": "Crime generation rate", + "icon": "", + "value_name": "{0}/s", + "values": [ + [ + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150 + ] + ] + }, + { + "name": "Warrant Duration", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Chaos071_UltraSkill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15, + 15 + ] + ] + }, + { + "id_stats": "GA_Chaos071_UltraSkill", + "name": "Costs Ultimate Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100, + 100 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Chaos071_QTE", + "name": "Onslaught", + "type_name": "Support Skill", + "desc_name": "<Title>Onslaught</>", + "desc": "Don't even think about running! Swings his scythe upward, dealing <NumGreen>1</> instance of <Xiang>Lakshana DMG</>.", + "desc_short": "Deals <Xiang>Lakshana DMG</>.", + "context": "<Italic>United in purpose, through fair weather and foul, as they once were. </>", + "icon": "/Game/UI/UI_Icon/Skill/Chaos_QTE", + "additional_desc": [], + "stats": [ + { + "id_stats": "GE_Player_Chaos_QTE1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv1", + "OrdinaryMonMaterial_04_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "OrdinaryMonMaterial_04_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "OrdinaryMonMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Chaos_Passive_1", + "name": "Justice in Time", + "type_name": "Passive Skill", + "desc": "<TextHLT>Remora Enhancement</>: Deals <Xiang>Lakshana DMG</> equal to 800% of ATK to the target when Remora ends, based on Remora's duration. Each second beyond the base 5s duration increases total DMG by 45%, up to 300%. Resets Remora's duration when reapplied.", + "context": "<Italic>Do you still believe every right answer leads to light? </>", + "icon": "/Game/UI/UI_Icon/Skill/Chaos_Passive1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv2", + "weeklycloneboss_a03_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Chaos_Passive_2", + "name": "Prime Target", + "type_name": "Passive Skill", + "desc": "Increases the damage bonus from <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> to <NumGreen>30%</>.", + "context": "<Italic>\"All forms filed. All approvals granted.\" </>", + "icon": "/Game/UI/UI_Icon/Skill/Chaos_Passive2", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_04_lv3", + "weeklycloneboss_a03_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Chaos071_Passive_3", + "name": "Ashen Shade", + "type_name": "Character Traits", + "desc": "Hold Aim in the open world to leave his hound behind as a teleport anchor. When teleporting from the map, the hound tears open a doorway through space, allowing Chaos to return to the anchor’s location.", + "context": "<Italic>Yet the shadow of the past remains out of reach. </>", + "icon": "/Game/UI/UI/main/chongneng/Chaos/YH_UI_Icon_KESDog", + "additional_desc": [], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_Chaos_01", + "name": "Master Angler", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_cdds", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases the daily high-value order limit in the Fish Market in Sea Angler by <Green2>1</>." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Increases special bait effects in Sea Angler by <Green2>25%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Reduces the Stamina of <purple>valuable</> and <orange>rare</> fish in Sea Angler by <Green2>1</>." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Increases the daily high-value order limit in the Fish Market in Sea Angler by <Green2>1</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Reduces the Stamina of all fish in Sea Angler by <Green2>1</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + }, + { + "id": "City_Ability_Chaos_sp01", + "name": "Memory / Anchor", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_kes_jycm", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Increases the Teleport Anchor placement limit to <Green2>2</>." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Piercing Insight", + "desc": "Grants an additional <NumGreen>40%</> <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> when attacking enemies with <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1071_1", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + }, + { + "name": "Crime", + "desc": "Chaos builds up <TextEXPL>Crime</> by performing certain combat actions." + } + ] + }, + { + "name": "Charge / Sin", + "desc": "Ignores <NumGreen>20%</> of the target's DEF when attacking enemies with <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1071_2", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + } + ] + }, + { + "name": "Emberflare", + "desc": "Increases Crit DMG by <NumGreen>30%</> for <NumGreen>20</>s after casting Retribution. Resets the duration when triggered again.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1071_3", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Drowning Tide", + "desc": "Transfers <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> to a nearby unmarked target and recalculates its duration when defeating a target with <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1071_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + } + ] + }, + { + "name": "Voidgaze", + "desc": "Increases damage dealt to the target by <NumGreen>20%</> when only <NumGreen>1</> target with <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> remains on the field.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1071_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + } + ] + }, + { + "name": "False Origin", + "desc": "Immediately restores <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosGuilt\">Crime</> to its cap after casting Retribution.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1071_6", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Crime", + "desc": "Chaos builds up <TextEXPL>Crime</> by performing certain combat actions." + } + ] + } + ], + "resonance": [ + { + "name": "Justice / Truth", + "desc": "Increases the skill level of Pursuit, Doubtmark, and Retribution by <NumGreen>1</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [] + }, + { + "name": "Light / Daybreak", + "desc": "Reduces the <Xiang>Lakshana Resistance</> of enemies with <hot textstyle=\"TextEXPL\" param=\"nouns&ChaosHuntPermit\">Warrant</> by <NumGreen>10%</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [ + { + "name": "Warrant", + "desc": "Deals increased damage to marked targets." + } + ] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1071/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + -1, + -1, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "value": 16 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Furniture_Gacha_Blue_004", + "amount": 100 + }, + { + "item_id": "Food_009", + "amount": 100 + }, + { + "item_id": "Food_091", + "amount": 100 + }, + { + "item_id": "Furniture_draw_004", + "amount": 200 + }, + { + "item_id": "BigPoster003", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_Blue_002", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_003", + "amount": 400 + }, + { + "item_id": "Figure_maskerrider_01_001", + "amount": 400 + }, + { + "item_id": "Figure_maskerrider_01_002", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "SpecialGift_1071", + "amount": 1200 + }, + { + "item_id": "Food_119", + "amount": 100 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1071" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1071" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Friendship_3_1071", + "Gold" + ], + "amount": [ + 20, + 1, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1071" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1071", + "Friendship_4_1071" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1071" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1071", + "Fashion_character_1071_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "Greetings. This is Chaos from ETD-6. Pleasure to meet you. I'm looking forward to… Hey, I'm just trying to be formal, stop laughing!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_meet_001" + }, + { + "name": "Chat: Mask", + "desc": "Why am I wearing a mask? I tell people I want to be more efficient in combat. But the real reason… are you sure you want to know? Well, I think it looks cool. Okay, stop staring at me like that. I really think it's cool…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_chat_001" + }, + { + "name": "Chat: Troubling thing", + "desc": "Is the mission a lot of trouble? No need to be concerned. As long as you sort things out one at a time, you'll be able to succeed. This belief helped me do many things that seemed impossible at first, except for… well, never mind.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_chat_002" + }, + { + "name": "Chat: Hound", + "desc": "I don't have a pet dog, but if you mean a \"hound,\" then that's my Esper Ability. Hmm, maybe having a real dog as a pet would be nice…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_chat_003" + }, + { + "name": "Sunny", + "desc": "My mood is as sunny as the sunshine!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_weather_001" + }, + { + "name": "Rainy", + "desc": "Got an umbrella? Do you need my coat?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_weather_002" + }, + { + "name": "Cold", + "desc": "Is it cold? You're shaking.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_weather_003" + }, + { + "name": "Hot", + "desc": "I'm evaporating!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Good morning! A brand new day begins!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "It's time for a decision. What should I get for lunch?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "(Yawn)… I'm sleepy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_greet_003" + }, + { + "name": "Good Night", + "desc": "Good night. Sleep early, grow taller.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_greet_004" + }, + { + "name": "Hobbies", + "desc": "Tetrominoes is so fun! I love it when the lines all vanish!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_hobby_001" + }, + { + "name": "Worries", + "desc": "Phones these days are too complicated. I just need a phone that can call, text, and… oh, play Tetrominoes!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_vexation_001" + }, + { + "name": "Topic: Scar", + "desc": "The body's self-healing powers are limited. It won't heal when it suffers too much damage. Such a shame.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_talk_001" + }, + { + "name": "Topic: Weapon", + "desc": "I can use my abilities to create weapons with simple structures like swords and blades, but guns are tricky. It's not like I can't, but I'll have to remember all the components… Fine, I can't.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_talk_002" + }, + { + "name": "Topic: Fortelling", + "desc": "I spent a few years in a place far from the city, where people lived by the \"will of God.\" The will of God was always right, because people could always find a way to interpret it as right. Prophecies are much the same. If you find a good interpretation, then believe in it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_talk_003" + }, + { + "name": "About Myself: Esper Abilities", + "desc": "My ability? It's shaping a mass of smoke from who knows where into all kinds of forms. Pretty pathetic compared to those that can change the course of nature, right? But because of that, I learned to rely on myself to get things done. That's not so bad!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_self_001" + }, + { + "name": "About Myself: Origins", + "desc": "In a small seaside town far away, a baby was born. He didn't know it then, but 27 years later, he'd grow into a 27-year-old fellow… What? I didn't say anything wrong, did I?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_self_002" + }, + { + "name": "About Myself: Farewell", + "desc": "Not to brag, but I've probably said my goodbyes more times than you've said good morning. Drifting out at sea, I'd always think the world has no real limits, so maybe the people I said goodbye to… I'll meet again.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_self_003" + }, + { + "name": "About Linko", + "desc": "I don't know what's going on in Linko's brain. Well, that's not important. If you're looking for a person or an anomaly, you can simply trust her intuitions. The only problem is, she often finds herself in strange places. It's the same problem a little friend of mine had. Though frankly speaking, my friend is not as bright as Linko…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_about_003" + }, + { + "name": "About Daffodill", + "desc": "Daffodill blames herself too much, even for things out of her own control… She's impressive. She grew up in a less-than-ideal environment, but managed to stay kindhearted. The owner of Eibon… must be a great influence for her.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_about_005" + }, + { + "name": "About Zankou", + "desc": "She's strange. Almost as strange as criminals on Ghroth Island. To be precise, she belongs there.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_about_006" + }, + { + "name": "About Ghroth Island", + "desc": "At Ghroth Island… I worked, trained, honed my intuition into a technique, and learned how to tell good from evil. I appreciate them letting me stay there. Other than that, I don't have much personal feelings.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_about_007" + }, + { + "name": "About ETD-6", + "desc": "I can feel that ETD-6 isn't that unified of a team. Everyone has their own issues. Well, this isn't something I can ask of them. I just need them to do their jobs.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_about_008" + }, + { + "name": "Character Ascension I", + "desc": "Aha! My body is feeling stronger!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "My spirits are high! Well, I can do even better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Haha, I can finally give it my all!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_ug_003" + }, + { + "name": "Gift Received I", + "desc": "Woah, this is for me? Are you sure? You're too kind!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_gift_001" + }, + { + "name": "Gift Received II", + "desc": "Oooh! I've always wanted this. Thanks a bunch!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Thanks a lot!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Is this for me? Thanks!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Give up already!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "Tindalos!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Target confirmed.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_skill_003" + }, + { + "name": "Ultimate I", + "desc": "Evil must be ended…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_aoe_UI_001" + }, + { + "name": "Ultimate II", + "desc": "I'll cleanse it all!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_aoe_UI_002" + }, + { + "name": "Ultimate III", + "desc": "I'll… take care of the damage done.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_aoe_UI_003" + }, + { + "name": "Containment I", + "desc": "Stay here. Don't run around.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_containment_001" + }, + { + "name": "Containment II", + "desc": "Haha, gotcha!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_containment_002" + }, + { + "name": "Nullification I", + "desc": "Goodbye…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "Clocking out.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "What's this? It seems rare.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "Oho, nice stuff!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "Oooh, and what's this?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "Find something good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Let's take it away!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "This can be useful, right?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Hmm… this is harder than I expected.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_hp_001" + }, + { + "name": "Low Health II", + "desc": "Damn, this is tough.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_hp_002" + }, + { + "name": "Low Health III", + "desc": "Huff… huff…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_hp_003" + }, + { + "name": "Heal I", + "desc": "Woah, feeling better.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_fh_001" + }, + { + "name": "Heal II", + "desc": "Thanks, that helped!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_fh_002" + }, + { + "name": "Down I", + "desc": "Farewell…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_dead_001" + }, + { + "name": "Down II", + "desc": "Is this the end of the journey…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_dead_002" + }, + { + "name": "Down III", + "desc": "I'll be on my way.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_dead_003" + }, + { + "name": "Takedown I", + "desc": "Take a good nap.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_kill_001" + }, + { + "name": "Takedown II", + "desc": "Stop being a bad guy.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_kill_002" + }, + { + "name": "Damaged I", + "desc": "That hurts.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_struck_001" + }, + { + "name": "Damaged II", + "desc": "Interesting.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "I can't get hit for nothing…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "Ugh…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "My opponents usually don't end up well.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Another fight. C'mon!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Gotcha!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "Don't you run!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "You're under arrest!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_QTE_003" + }, + { + "name": "Glide I", + "desc": "Woohoo!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_Fly_001" + }, + { + "name": "Glide II", + "desc": "Let's go!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_Fly_002" + }, + { + "name": "Switch I", + "desc": "Here I am!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_Switch_001" + }, + { + "name": "Switch II", + "desc": "Don't worry. It's me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_Switch_002" + }, + { + "name": "Switch III", + "desc": "Take this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_Switch_003" + }, + { + "name": "Special Switch - Zero", + "desc": "Appraiser, do you need help?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_SSC_ZERO_001" + }, + { + "name": "Special Switch - Linko", + "desc": "Little one, you can rely on others a little!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_SSC_LK_002" + }, + { + "name": "Teammate Down - Linko", + "desc": "Is this another goodbye?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_TeammateDown_002" + }, + { + "name": "Parry I", + "desc": "Let's see who's stronger!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_Parry_001" + }, + { + "name": "Parry II", + "desc": "Heh, a simple attack.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Ha, I'm feeling good.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "Hey hey, aim before you move!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC024/Play_Vo_Char_NPC024_DodgeCombo_002" + } + ] + } + }, + { + "id": "1076", + "name": "Shinku", + "description": "A cold, distant type who's used to keeping people at arm's length.", + "element": [ + { + "element_id": "Cosmos", + "name": "Cosmos" + } + ], + "rarity": 5, + "icon": "/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong", + "iconSmall": "/Game/UI/UI_Icon/AvatarImage/100/player_zhenhong_100", + "iconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong_256", + "iconGacha": "/Game/UI/UI/Gacha/YH_lihui_fashionshop_zhenhong", + "tags": { + "char_tags": [ + { + "name": "Damage", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_MainTag01" + }, + { + "name": "Main DPS", + "icon": "/Game/UI/UI/player/TAG_Icon/YH_UI_icon_Tag_zhuli" + } + ], + "arcs_tags": { + "type_id": "5", + "name": "Condensate", + "icon": "/Game/UI/UI/player/YH_UI_icon_boson" + } + }, + "reaction": [ + { + "name": "Remora", + "desc": "The target enters Remora for <NumGreen>5s</> after triggering Esper Cycle, slowing their movement and attack speed. The effect decays over time, and will have a shorter duration if repeatedly applied." + }, + { + "name": "Blossom", + "desc": "Generates <NumGreen>1</> <bule>Vita Bud</> near the target after triggering Esper Cycle, which blossoms <NumGreen>5</> <bule>Vita Pistils</>.\r\n<bule>Vita Pistils</> then fly toward targets within range, exploding every <NumGreen>2s</> and dealing DMG to an area.\r\nUp to <NumGreen>3</> <bule>Vita Buds</> can exist on the field at once." + }, + { + "name": "Charge", + "desc": "Grants the active character <NumGreen>10</> additional <bule>Ultimate Energy</> when <bule>Vita Pistils</> hit targets affected by Remora." + } + ], + "fashion": [ + { + "fashionId": "Fashion_1076_nighty", + "characterId": "1076", + "name": "Labyrinth Lily", + "desc": "Shinku's loungewear for quiet days spent idling undisturbed among her treasures. Once a dragon has made up her mind, no force can shake her resolve.\r\n\"…No. I've already decided. I'm not going out today, no matter what.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong3_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong3", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong3_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zhenhong3", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zhenhong3", + "sourceText": "Available at Bond Lvl 10", + "sourceLockText": "Available at Bond Lvl 10", + "isDefault": false + }, + { + "fashionId": "Fashion_1076_0", + "characterId": "1076", + "name": "Crimson Solstice", + "desc": "Shinku rarely concerns herself with what she wears, but this outfit suits midsummer perfectly.\r\n\"…It's easy to move in. Is there a problem?\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zhenhong", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zhenhong", + "sourceText": "", + "sourceLockText": "", + "isDefault": true + }, + { + "fashionId": "Fashion_1076_2", + "characterId": "1076", + "name": "Dragonhunter", + "desc": "Countless storms gather in her heart, and the dragonhunter sets forth on her quest.", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong4_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong4", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong4_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zhenhong4", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zhenhong4", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1076_3", + "characterId": "1076", + "name": "Dawn Patrol", + "desc": "A pro-grade racing swimsuit that reveals her competitive spirit. The beach has a way of drawing out one's true self—or perhaps that is simply the thrill of cutting through the waves.\r\n\"Go all out—even when you’re enjoying summer.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong1_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong1", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong1_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zhenhong1", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zhenhong1", + "sourceText": "Purchase from Mall", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1076_1", + "characterId": "1076", + "name": "Student of Terrasea", + "desc": "A neat, preppy outfit with the fresh charm of campus life. They say youth is spent either fleeing from one's inner shadow or chasing after it… and even those without a shadow will find a way to cast one.\r\n\"Don't read something that ridiculous into it… Ugh, whatever.\"", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong5_256", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong5", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong5_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zhenhong5", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zhenhong5", + "sourceText": "Scarborough Fair", + "sourceLockText": "", + "isDefault": false + }, + { + "fashionId": "Fashion_1076_rpg_level1", + "characterId": "1076", + "name": "Normie Heroine", + "desc": "Shinku kept her head lowered, trying to vanish into the crowd. After all, if no one came close, then no one would get hurt… right?", + "quality": "purple", + "icon": "/Game/UI/UI_Icon/Item/Fashion_1076_04", + "headIcon": "/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong2", + "headIconBig": "/Game/UI/UI_Icon/AvatarImage/256/player_zhenhong2_256", + "displayIcon": "/Game/UI/UI/Appearance/Fashion/YH_UI_shizhuang_lihui_zhenhong2", + "portraitImg": "/Game/UI/UI/Appearance/Fashion/2160/YH_UI_shizhuang_big_zhenhong2", + "sourceText": "Available from the \"999 Nights\" Button Shop", + "sourceLockText": "Available from the \"999 Nights\" Button Shop", + "isDefault": false + } + ], + "stats": [ + { + "id_stats": "HPMaxBase", + "name": "HP", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_shengming", + "bShowPercent": false, + "values": [ + 1330, + 1436, + 1543, + 1649, + 1756, + 1862, + 1968, + 2075, + 2181, + 2288, + 2394, + 2500, + 2607, + 2713, + 2820, + 2926, + 3032, + 3139, + 3245, + 3352, + 3458, + 3564, + 3671, + 3777, + 3884, + 3990, + 4096, + 4203, + 4309, + 4416, + 4522, + 4628, + 4735, + 4841, + 4948, + 5054, + 5160, + 5267, + 5373, + 5480, + 5586, + 5692, + 5799, + 5905, + 6012, + 6118, + 6224, + 6331, + 6437, + 6544, + 6650, + 6756, + 6863, + 6969, + 7076, + 7182, + 7288, + 7395, + 7501, + 7608, + 7714, + 7820, + 7927, + 8033, + 8140, + 8246, + 8352, + 8459, + 8565, + 8672, + 8778, + 8884, + 8991, + 9097, + 9204, + 9310, + 9416, + 9523, + 9629, + 9736 + ] + }, + { + "id_stats": "AtkBase", + "name": "ATK", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_gongji", + "bShowPercent": false, + "values": [ + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 108, + 112, + 116, + 120, + 124, + 128, + 132, + 136, + 140, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 184, + 188, + 192, + 196, + 200, + 204, + 208, + 212, + 216, + 220, + 224, + 228, + 232, + 236, + 240, + 244, + 248, + 252, + 256, + 260, + 264, + 268, + 272, + 276, + 280, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 364, + 368, + 372, + 376, + 380, + 384, + 388, + 392, + 396 + ] + }, + { + "id_stats": "DefBase", + "name": "DEF", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_fangyu", + "bShowPercent": false, + "values": [ + 74, + 80, + 86, + 92, + 98, + 104, + 110, + 115, + 121, + 127, + 133, + 139, + 145, + 151, + 157, + 163, + 169, + 175, + 181, + 186, + 192, + 198, + 204, + 210, + 216, + 222, + 228, + 234, + 240, + 246, + 252, + 258, + 263, + 269, + 275, + 281, + 287, + 293, + 299, + 305, + 311, + 317, + 323, + 329, + 334, + 340, + 346, + 352, + 358, + 364, + 370, + 376, + 382, + 388, + 394, + 400, + 406, + 411, + 417, + 423, + 429, + 435, + 441, + 447, + 453, + 459, + 465, + 471, + 477, + 482, + 488, + 494, + 500, + 506, + 512, + 518, + 524, + 530, + 536, + 542 + ] + }, + { + "id_stats": "CritBase", + "name": "CRIT Rate", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baoji", + "bShowPercent": true, + "values": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "values": [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + } + ], + "breakthrough": [ + { + "level": "20", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "gold" + ], + "amount": [ + 5, + 25000 + ] + }, + { + "level": "30", + "items_id": [ + "OrdinaryMonMaterial_01_lv1", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 2, + 50000 + ] + }, + { + "level": "40", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 8, + 75000 + ] + }, + { + "level": "50", + "items_id": [ + "OrdinaryMonMaterial_01_lv2", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 12, + 16, + 100000 + ] + }, + { + "level": "60", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 6, + 24, + 125000 + ] + }, + { + "level": "70", + "items_id": [ + "OrdinaryMonMaterial_01_lv3", + "Worldboss_material_02", + "gold" + ], + "amount": [ + 9, + 36, + 150000 + ] + } + ], + "profile": { + "title": "Member of CSU-2", + "description": "\"This one's tough. Leave it to me.\"\r\nFar removed from her everyday self, Shinku proves reliable beyond her years whenever she takes on a mission. She ventures alone into the most dangerous zones, trusting her companions to guard her back. That is how this clumsy dragon girl protects all she holds dear. As for matters of the heart… perhaps she still needs a little more time.", + "birthday": "August 13", + "homePlace": "Bureau of Anomaly Control, CSU-2", + "abilityName": "Moonlit Crimson Dragon", + "introduction": "A cold, distant type who's used to keeping people at arm's length.", + "voiceChinese": "唐夏芳", + "voiceEnglish": "Anne Yatco", + "voiceJapanese": "田所あずさ", + "voiceKorean": "차영희" + }, + "profile_detail": [ + { + "name": "Intel", + "desc": "There's a distance in Shinku's politeness. As a new CSU member transferred to the BAC's HQ at Hethereau, Shinku didn't exactly make a great first impression on colleagues. Shinku maintained a deliberate distance and kept people at their \"right places\"—with the exception of that star employee who is known for lacking common sense.\r\nIt's not just at work, Shinku practices the same thing in her daily life too. She'll show up in the crowd rushing towards DSD to grab the latest Mystery Box or sit in the packed stands at the finals of the anomaly trading card championship, chatting with fellow fans about her collection. But once the crowds clear out, it's always Shinku going home by herself. Living in a bustling city, she's never refused to contact anyone, but she's also never let anyone into her \"territory\" either.\r\nShinku's definitely sparked some criticism and caused misunderstandings, but she firmly believes she's making the right calls. Ever since that heavy rain, she's grown used to being on her own.\r\n\r\nThere was a time when Shinku believed she wasn't different from kids her age, until that heavy rain made her understand what the power she'd been born with actually implied. Since then, her life has been completely different.\r\nWhen Shinku first left Hethereau to train under her mentor at CSU-9, she wondered what would've happened if the incident had never ever occurred. But soon, she set that unanswerable question aside and found what she thought was the best way to keep the same tragedy from happening again—she just kept everyone at a distance.\r\nAnd so, the determined dragonling began to grow.\r\nShe started bearing every burden on her own. With the help of her senior colleagues, she grew capable enough to handle things solo and even protect others. Her lone-wolf style meant that even if she lost control, the impact could be kept to a minimum. Everything seemed to be falling into place, until the day her mentor handed her the transfer papers, and the chance to see whether she'd truly moved past that rainy night finally arrived.\n\r\nThe past is the sharpest hunter, striking its killing blow the moment its prey lets its guard down.\r\nBut apparently, a maturing dragon isn't that kind of prey." + }, + { + "name": "Helmet with two holes", + "desc": "Shinku's powers boost her reaction speed and physical strength. In the early days at the Bureau, her combat prowess helped her quickly adapt to her responsibilities. But her lack of control meant she'd often go berserk, and that was something she urgently needed to fix. It wasn't uncommon to see Shinku fall into a dark mood right after coming to, staring at the mess she made. Still, biased to action, she was quick to find a solution. After a safety officer kicked her off a construction site for not wearing a hard hat for the third time, she made herself a helmet with holes on both sides for her horns.\r\n\"Do you really have to… go to the construction site?\"\r\n\"Mhm.\"\r\n\"And you have to wear this… pointless helmet?\"\r\n\"That's a requirement. I can't enter the site if I don't wear one.\"\r\nAt least the helmet hasn't been needed for a while." + }, + { + "name": "CSU-9", + "desc": "Tempus, who used to frown and call her a rude brat, would later happily bring her out for ice cream during field assignments; Ray, who'd look for her and crack jokes when Shinku was holed up in the room blaming herself for losing control; her senior sister, who always kept a straight face during training and never held back her anger when Shinku messed up, but would nevertheless stand before her on missions; and her mentor, who usually kept quiet about her birthdays but never forgot to celebrate… without them, Shinku probably would've been stuck in her room feeling sorry for herself forever.\r\nAs for how she should respond to their concerns and goodwill, Shinku couldn't think of any other answer aside from becoming someone who could stand on her own.\r\nHer mentor must be worried only because she's still not independent and strong enough." + }, + { + "name": "Dragon's Treasure", + "desc": "Walking alone along the beach, kicking away pebbles that got in her way now and then. Even as her vision started to blur, she held back the tears welling up in her eyes.\r\n\"It's just a cake. It's not like I care about it!\"\r\nNo, that's not what was on her mind.\r\nThe more often she started waking up at night with a pain from the top of her head, the more often she'd say things in class that she'd end up regretting. Deep down, she really didn't mean those things, but by the time she came to her senses, she'd either made her classmates angry or made them cry.\r\nShe didn't like that.\r\nThe truth is, she wanted to play dodgeball with them, wanted to help prepare the school festival performance, wanted to eat cake, blow out the candles, and sing happy birthday at her classmates' birthday parties. But somehow, she always ended up ruining everything…\r\n\"Shinku!\"\r\n\"Found ya! I knew you'd be here!\"\r\n\"Look what I found! Tada! Here! Doesn't this remind you of someone who's curled up into a ball crying?\"\r\n\"That's… not true.\"\r\n\"It is! Anyway, take it.\"\r\n\"Huh…?\"\r\n\"Doesn't every evil dragon in a story have their own stash of treasures? That dragon who loves picking fights with everyone should have some too! So from now on, every time you get into a fight with someone, collect something fun. That way, once you finally defeat the evil dragon, you can share its stash with everyone!\"\r\nStarting with that shell with the sad little face on it, Shinku began her \"treasure hunt.\"" + }, + { + "name": "CSU-2", + "desc": "For Shinku, the challenge of transferring to CSU-2 was more about getting along with the two new teammates than about getting used to a new place.\r\nMint. A one-of-a-kind character who somehow invalidates Shinku's tricks to keep her distance. Whether Shinku puts on a resting drake face or makes up an excuse, Mint just brushes it off and keeps approaching her. \"Resting drake face? Aww, why so grumpy, who made Taya angry this time? Or did you fail an exam?\" \"Busy? Sure, let's do it another time then! How about after work tomorrow?\"\r\nMint does not know when to back off. She's just there because she wants to be. It's a hassle, really… but Shinku doesn't hate it—who hates a friendly kitty anyway?\r\nAs for the other teammate…\r\nOneiroi. After Shinku's first mission with her, she understood exactly why she'd been transferred to Unit 2. This one had the ability to prevent her from going berserk. This should have been good news for Shinku, because she'd finally stop worrying about hurting teammates. But she couldn't bring herself to accept Oneiroi the way she accepted Mint.\r\nIroi was hiding herself. She wasn't showing her true self…\r\nAnd that was what Shinku was exactly doing." + }, + { + "name": "Never-ending Rain", + "desc": "Even now, Shinku still finds herself thinking back to that rainy night.\r\nThe world turned upside down, figures in black suits rising up out of puddles, and her friend's terrified cries for help. After that, her memory becomes a blur. She managed to fight off those anomalies, but the rampage that followed caused no small amount of damage, and even swept up the friend she was trying to protect.\r\n\"At least that's better than being stuck with regret over doing nothing.\"\r\nThough she'd never quite made it out of that rain, Shinku had never once doubted the choice she made that night. There had been plenty of times she'd wished she didn't have her Esper Abilities, but never in a moment like that one." + }, + { + "name": "After the Rain", + "desc": "\"Alright, I'm heading home!\"\r\n\"Bye, Teana! I didn't think Taya would invite us to play! Call us next time, bye!\"\r\nShe's not exactly good at this, but they probably had a good time, didn't they? With that thought, Shinku pulled out her phone and typed in the number she worked so hard to find but couldn't bring herself to call.\r\nShe made up her mind to do this after that gaming session Mint had put together, so why was she hesitating now?\r\nWanting to protect a friend but ending up hurting them, deciding on her own that they must hate her and ghosting them, then using \"this is for the best\" as an excuse to make herself better…\r\nThat's not who she is, and it's not who she can ever let herself become.\r\nTaking a deep breath, Shinku pressed the call button.\r\n*Phone rings*\r\nWhat should she even say? That thought just hit her. Shinku's breathing shortened as she became nervous.\r\n\"Hello?\"\r\nThe voice on the other end was both familiar and unfamiliar. Shinku still held her breath.\r\nIt's okay, because we're friends.\r\n\"…Hello…? Yeah, it's me.\"\r\n\"I'm back.\"\r\nThe girl who had been trapped in that rainy night for so long finally saw the bright, warm sunlight of the day." + } + ], + "melee": [ + { + "id": "GA_Shinku_Melee", + "name": "Basic Attack: Special Combat Arts", + "type_name": "Basic Attack", + "desc_name": [ + "<Title>Basic Attack: Special Combat Arts</>", + "<Title>Basic Attack: Arrowfall</>", + "<Title>Basic Attack: Special Combat Arts (Altered)</>", + "Critical Riposte: Split-Second Victory", + "<Title>Basic Attack: Tidal Assault</>", + "<Title>Basic Attack: Hammerfall</>", + "<Title>Basic Attack: Tidal Assault (Scorn)</>", + "Critical Riposte: No Respite" + ], + "desc": [ + "Performs up to <NumGreen>5</> consecutive attacks, dealing <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</> on hit.", + "Press Basic Attack while airborne to plunge, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> upon impact. Increases DMG based on fall height, up to 100%.", + "Hold Basic Attack during the 3rd/4th/5th hit of Special Combat Arts to trigger Special Combat Arts (Altered), dealing <Guang>Cosmos DMG</> and granting <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</> on hit.", + "Triggers when using Special Combat Arts after a Critical Dodge. Retaliates against the target with a sharp kick, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</>, reducing their Break, and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>.", + "Performs up to <NumGreen>5</> consecutive attacks, dealing <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</> on hit.", + "Press Basic Attack while airborne to plunge, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> upon impact. Increases DMG based on fall height, up to 100%. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</> on hit.", + "Hold Basic Attack during the 3rd/4th/5th hit of Tidal Assault to trigger Tidal Assault (Scorn), dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> and granting <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</> on hit.", + "Triggers when using Tidal Assault after a Critical Dodge. Retaliates against the target with a sharp kick, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</>, reducing the target's Break, and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>.\r\nInflicts Forced Knockback and briefly stuns (not effective against Bosses) the target when Parry Attack or Critical Riposte hits while in the <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> state, then deals 1 additional instance of DMG to the target equal to <NumGreen>20%</> of Instant Strike." + ], + "desc_short": [ + "Performs up to <NumGreen>5</> strikes, dealing <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</> on hit.", + "Press Basic Attack while airborne, dealing <Guang>Cosmos DMG</>.", + "Hold Basic Attack during the 3rd/4th/5th hit of a Basic Attack to deal <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>.", + "Triggers when using Basic Attack after a Critical Dodge, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</>, reducing the target's Break, and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>.", + "Performs up to <NumGreen>5</> strikes, dealing <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>.", + "Press Basic Attack while airborne, dealing <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>.", + "Hold Basic Attack during the 3rd/4th/5th hit of a Basic Attack to deal <NumGreen>1</> instance of <Guang>Cosmos DMG</>. Grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>.", + "Triggers when using Basic Attack after a Critical Dodge, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</>, reducing the target's Break, and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>." + ], + "context": "<Italic>\"Tear through metal, smash through walls—when your own limbs are lethal weapons built for both offense and defense, why weigh yourself down with a weapon?\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Shinku_Melee", + "additional_desc": [ + { + "name": "Defiant Spirit", + "desc": "Special Energy required to cast Crimson Fury. Gained only when Shinku's attacks hit." + }, + { + "name": "Fading Reason", + "desc": "Energy required to cast Scarlet Descent. Gained when Shinku's attacks hit during Surging Crimson." + }, + { + "name": "Menacing Gaze", + "desc": "Enters the Menacing Gaze state when Shinku is active in battle for more than 2s without actively initiating an attack, gaining stacks every second. Grants her <NumGreen>1</> additional stack of Menacing Gaze whenever Shinku successfully performs a Critical Dodge while this state is active.\r\nEnds Menacing Gaze when Shinku initiates an attack and hits, causing her to perform Instant Strike and deal bonus DMG in addition to the original attack. Each stack of Menacing Gaze increases this bonus DMG by <NumGreen>100%</> (scales with Basic Attack level, reaching <NumGreen>215.9%</> at level 11) and grants Defiant Spirit, Fading Reason, and Cycle Energy." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Shinku_Melee1_1_Damage", + "name": "Basic Attack: Special Combat Arts 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee1_2_Damage", + "name": "Basic Attack: Special Combat Arts 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 30, + 33, + 35, + 38, + 41, + 45, + 48, + 52, + 56, + 61, + 66, + 71, + 77 + ], + [ + 20, + 22, + 23, + 25, + 27, + 30, + 32, + 35, + 37, + 41, + 44, + 47, + 51 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee1_3_Damage", + "name": "Basic Attack: Special Combat Arts 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}% + {3}%", + "values": [ + [ + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 58, + 63, + 68, + 74 + ], + [ + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43 + ], + [ + 19, + 21, + 23, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49 + ], + [ + 42, + 45, + 49, + 53, + 57, + 61, + 66, + 72, + 77, + 84, + 90, + 98, + 106 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee1_4_Damage", + "name": "Basic Attack: Special Combat Arts 4th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 81, + 88, + 95, + 102, + 110, + 119, + 129, + 139, + 150, + 162, + 176, + 190, + 205 + ], + [ + 49, + 53, + 58, + 62, + 67, + 73, + 79, + 85, + 92, + 99, + 107, + 116, + 125 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee1_5_Damage", + "name": "Basic Attack: Special Combat Arts 5th Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 112, + 121, + 131, + 142, + 153, + 165, + 179, + 193, + 209, + 225, + 243, + 263, + 284 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_AirAttack1_Damage", + "name": "Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 77, + 83, + 89, + 97, + 104, + 113, + 122, + 132, + 142, + 153, + 166, + 179, + 193 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Branch1_1_Damage", + "name": "Branch DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}% + {3}%", + "values": [ + [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 19, + 20, + 22, + 24 + ], + [ + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42 + ], + [ + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54, + 58, + 63 + ], + [ + 22, + 24, + 26, + 28, + 31, + 33, + 36, + 39, + 42, + 45, + 49, + 53, + 57 + ] + ] + }, + { + "name": "Basic Attack: Special Combat Arts Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29, + 29 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_PerfectEvadeAttack_Damage", + "name": "Split-Second Victory Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 142, + 153, + 166, + 179, + 193, + 209, + 226, + 244, + 263, + 284, + 307, + 332, + 358 + ] + ] + }, + { + "name": "Grants Defiant Spirit", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18 + ] + ] + }, + { + "name": "Grants Defiant Spirit", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee1_Rage_Damage", + "name": "Basic Attack: Tidal Assault 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 35, + 37, + 40, + 44, + 47, + 51, + 55, + 60, + 64, + 70, + 75, + 81, + 88 + ], + [ + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 51, + 55, + 59, + 64, + 69 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee2_Rage_Damage", + "name": "Basic Attack: Tidal Assault 2nd Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 40, + 44, + 47, + 51, + 55, + 59, + 64, + 69, + 75, + 81, + 88, + 95, + 102 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee3_Rage_Damage", + "name": "Basic Attack: Tidal Assault 3rd Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% *5", + "values": [ + [ + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43, + 47, + 50, + 54, + 59, + 64 + ], + [ + 7, + 8, + 9, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 19 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee4_Rage_Damage", + "name": "Basic Attack: Tidal Assault 4th Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 53, + 57, + 62, + 67, + 72, + 78, + 85, + 91, + 99, + 107, + 115, + 125, + 135 + ], + [ + 68, + 74, + 80, + 86, + 93, + 100, + 109, + 117, + 127, + 137, + 148, + 160, + 173 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Melee5_Rage_Damage", + "name": "Basic Attack: Tidal Assault 5th Instance DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 46, + 50, + 54, + 58, + 63, + 68, + 73, + 79, + 86, + 93, + 100, + 108, + 117 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_AirAttack_Rage_Damage", + "name": "Surging Crimson Plunge DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 119, + 129, + 139, + 151 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Branch1_Rage_Damage", + "name": "Surging Crimson Branch DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}% + {3}% + {4}%", + "values": [ + [ + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 30, + 33, + 36, + 38, + 42, + 45 + ], + [ + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50, + 54 + ], + [ + 24, + 25, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 51, + 56, + 60 + ], + [ + 14, + 15, + 16, + 18, + 19, + 21, + 22, + 24, + 26, + 28, + 31, + 33, + 36 + ], + [ + 105, + 113, + 123, + 133, + 143, + 155, + 167, + 181, + 195, + 211, + 227, + 246, + 265 + ] + ] + }, + { + "name": "Surging Crimson Basic Attack Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_PerfectEvadeAttack_Rage_Damage", + "name": "No Respite Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 167, + 180, + 195, + 211, + 227, + 246, + 265, + 287, + 310, + 334, + 361, + 390, + 421 + ] + ] + }, + { + "name": "Surging Crimson Basic Attack grants Fading Reason", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "skill": [ + { + "id": "GA_Shinku_Skill", + "name": "High-Speed Breach", + "type_name": "Redirect Skill", + "desc_name": [ + "<Title>Redirect Skill: High-Speed Breach</>", + "<Title>Redirect Skill: Scarlet Descent</>" + ], + "desc": [ + "No time to catch your breath. Charges toward the target and launches a fierce assault, dealing multiple instances of <Guang>Cosmos DMG</> and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>.", + "Consumes all <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>. Leaps above the target into their blind spot and unleashes a powerful downward claw strike, dealing high <Guang>Cosmos DMG</>. Casts up to <NumGreen>5</> times during each <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> state." + ], + "desc_short": [ + "Charges toward the target, dealing multiple instances of <Guang>Cosmos DMG</> and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>.", + "Consumes all <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>. Leaps and unleashes a claw strike, dealing high <Guang>Cosmos DMG</>. Casts up to <NumGreen>5</> times during each <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> state." + ], + "context": "<Italic>\"Let's end this quickly, before this gets any worse.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Shinku_Skill", + "additional_desc": [ + { + "name": "Defiant Spirit", + "desc": "Special Energy required to cast Crimson Fury. Gained only when Shinku's attacks hit." + }, + { + "name": "Fading Reason", + "desc": "Energy required to cast Scarlet Descent. Gained when Shinku's attacks hit during Surging Crimson." + }, + { + "name": "Surging Crimson", + "desc": "Consumes all Defiant Spirit to enter this special state. Replaces Special Combat Arts with Tidal Assault and High-Speed Breach with Scarlet Descent while in Surging Crimson. Increases DMG dealt and Resistance to Interruptions, boosts Movement, and lasts for <NumGreen>13</>s. The state ends when switching characters." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Shinku_Skill1_1_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}%", + "values": [ + [ + 17, + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 32, + 34, + 37, + 40, + 43 + ], + [ + 23, + 24, + 26, + 29, + 31, + 33, + 36, + 39, + 42, + 46, + 49, + 53, + 58 + ], + [ + 79, + 86, + 92, + 100, + 108, + 117, + 126, + 136, + 147, + 159, + 171, + 185, + 200 + ] + ] + }, + { + "name": "Redirect Skill: High-Speed Breach grants Defiant Spirit", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + ] + }, + { + "id_stats": "GA_Shinku_Skill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}s", + "values": [ + [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3 + ] + ] + }, + { + "name": "Redirect Skill: High-Speed Breach Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9 + ] + ] + }, + { + "name": "Required Fading Reason for Redirect Skill: Scarlet Descent", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_Skill1_Rage_Damage", + "name": "Redirect Skill: Scarlet Descent 1st Instance DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}%", + "values": [ + [ + 22, + 24, + 26, + 28, + 30, + 32, + 35, + 38, + 41, + 44, + 48, + 52, + 56 + ], + [ + 217, + 235, + 253, + 274, + 296, + 319, + 345, + 372, + 402, + 434, + 469, + 507, + 548 + ] + ] + }, + { + "name": "Redirect Skill: Scarlet Descent Cycle Energy", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "ultraskill": [ + { + "id": "GA_Shinku_UltraSkill", + "name": "Ultimate: Crimson Fury", + "type_name": "Ultimate", + "desc_name": [ + "<Title>Ultimate: Crimson Fury</>", + "<Title>Ultimate: Crimson Judgment</>", + "<Title>Ultimate: Dragonflame Verdict</>" + ], + "desc": [ + "Don't think you can pull something like that and escape unscathed… Consumes all <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</> to enter the <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> state, then launches multiple attacks, dealing high <Guang>Cosmos DMG</> to the target.\r\nReplaces Special Combat Arts with Tidal Assault and High-Speed Breach with Scarlet Descent while in Surging Crimson state. Increases DMG dealt and Resistance to Interruptions, greatly boosts Movement, and lasts for <NumGreen>13</>s. Ends <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> when switching characters.\r\nHold Dodge while moving to partially release her Esper Ability and greatly boost Movement.", + "Casts Crimson Judgment when <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> is about to end. Press Ultimate repeatedly to dash rapidly between targets, dealing high <Guang>Cosmos DMG</>.\r\nGrants <NumGreen>1</> additional instance of Crimson Judgment for <NumGreen>each</> use of Scarlet Descent during <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</>. Can be cast up to <NumGreen>3</> times during each <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> state.", + "Press Ultimate again to cast Dragonflame Verdict after all uses of Crimson Judgment have been consumed or after <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> ends, dealing massive <Guang>Cosmos DMG</> to targets in a large area." + ], + "desc_short": [ + "Consumes all <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</> to enter the <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> state and unleash multiple attacks, dealing high <Guang>Cosmos DMG</> to the target.\r\nReplaces Special Combat Arts with Tidal Assault and High-Speed Breach with Scarlet Descent while in Surging Crimson state. Increases DMG dealt and Resistance to Interruptions, boosts Movement, and lasts for <NumGreen>13</>s. Ends <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> when switching characters.\r\nHold Dodge while moving to partially release her Esper Ability and greatly boost Movement.", + "Casts Crimson Judgment when <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> is about to end. Press Ultimate repeatedly to dash rapidly between targets, dealing high <Guang>Cosmos DMG</>.\r\nGrants <NumGreen>1</> additional instance of Crimson Judgment for <NumGreen>each</> use of Scarlet Descent during <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</>. Can be cast up to <NumGreen>3</> times during each <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> state.", + "Press Ultimate again to cast Dragonflame Verdict after all uses of Crimson Judgment have been consumed or after <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</> ends, dealing massive <Guang>Cosmos DMG</> to targets in a large area." + ], + "context": "<Italic>\"It will hurt—for her enemies, and for her as well.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Shinku_UltraSkill", + "additional_desc": [ + { + "name": "Defiant Spirit", + "desc": "Special Energy required to cast Crimson Fury. Gained only when Shinku's attacks hit." + }, + { + "name": "Surging Crimson", + "desc": "Consumes all Defiant Spirit to enter this special state. Replaces Special Combat Arts with Tidal Assault and High-Speed Breach with Scarlet Descent while in Surging Crimson. Increases DMG dealt and Resistance to Interruptions, boosts Movement, and lasts for <NumGreen>13</>s. The state ends when switching characters." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Shinku_UltraSkill1_Damage", + "name": "Ultimate: Crimson Fury DMG Ratio", + "icon": "", + "value_name": "{0}% + {1}% + {2}% *5 + {3}% + {4}%", + "values": [ + [ + 18, + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 39, + 43, + 46 + ], + [ + 120, + 129, + 140, + 151, + 163, + 176, + 190, + 205, + 222, + 239, + 259, + 279, + 302 + ], + [ + 55, + 59, + 64, + 69, + 74, + 80, + 87, + 94, + 101, + 109, + 118, + 128, + 138 + ], + [ + 144, + 155, + 168, + 181, + 195, + 211, + 228, + 246, + 266, + 287, + 310, + 335, + 362 + ], + [ + 42, + 45, + 49, + 53, + 57, + 62, + 67, + 72, + 78, + 85, + 91, + 99, + 107 + ] + ] + }, + { + "id_stats": "GA_Shinku_UltraSkill", + "name": "Cooldown", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20, + 20 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_UltraSkillPre_Rage_Damage", + "name": "Ultimate: Crimson Judgment Per Instance DMG Ratio", + "icon": "", + "value_name": "{0}% *4", + "values": [ + [ + 60, + 64, + 70, + 75, + 81, + 88, + 95, + 102, + 111, + 119, + 129, + 139, + 151 + ] + ] + }, + { + "id_stats": "GE_Player_Shinku_UltraSkill_Rage_Damage", + "name": "Ultimate: Dragonflame Verdict DMG Ratio", + "icon": "", + "value_name": "{0}% *10 + {1}%", + "values": [ + [ + 20, + 21, + 23, + 25, + 27, + 29, + 31, + 34, + 37, + 40, + 43, + 46, + 50 + ], + [ + 400, + 432, + 466, + 503, + 544, + 587, + 634, + 685, + 740, + 799, + 863, + 932, + 1007 + ] + ] + }, + { + "name": "Increases DMG in Surging Crimson", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + ] + }, + { + "name": "Increases Resistance to Interruptions", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50 + ] + ] + }, + { + "name": "Costs Defiant Spirit", + "icon": "", + "value_name": "{0}", + "values": [ + [ + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "qte": [ + { + "id": "GA_Shinku_QTE", + "name": "Breaching Tactics", + "type_name": "Support Skill", + "desc": "Enough already! Delivers a forceful knee strike, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>.", + "desc_short": "Delivers a forceful knee strike, dealing <NumGreen>1</> instance of <Guang>Cosmos DMG</> and gaining <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>.", + "context": "<Italic>\"For a girl long used to fighting alone, learning to stand beside others marks a major step forward.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Shinku_QTE", + "additional_desc": [ + { + "name": "Defiant Spirit", + "desc": "Special Energy required to cast Crimson Fury. Gained only when Shinku's attacks hit." + } + ], + "stats": [ + { + "id_stats": "GE_Player_Shinku_QTE_Damage", + "name": "DMG Ratio", + "icon": "", + "value_name": "{0}%", + "values": [ + [ + 200, + 216, + 233, + 251, + 272, + 293, + 317, + 342, + 370, + 399, + 431, + 466, + 503 + ] + ] + } + ], + "materials": [ + { + "level": "2", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 2000, + 2, + 2 + ] + }, + { + "level": "3", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 5000, + 3, + 3 + ] + }, + { + "level": "4", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv1", + "OrdinaryMonMaterial_01_lv1" + ], + "amount": [ + 10000, + 5, + 5 + ] + }, + { + "level": "5", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 20000, + 2, + 2 + ] + }, + { + "level": "6", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2" + ], + "amount": [ + 40000, + 3, + 3 + ] + }, + { + "level": "7", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "OrdinaryMonMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 60000, + 5, + 5, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 80000, + 3, + 3, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 100000, + 5, + 5, + 2 + ] + }, + { + "level": "10", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "OrdinaryMonMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 120000, + 8, + 8, + 4 + ] + } + ] + } + ], + "passive": [ + { + "id": "GA_Shinku_Passive_1", + "name": "Lone Stride", + "type_name": "Passive Skill", + "desc": "<TextHLT>Charge Enhancement</>: Grants off-field characters the same amount of Charge when the active character gains Ultimate Energy. While Shinku is active and in Charge state, each trigger deals AoE DMG equal to 400% of ATK (scales with Basic Attack level, reaching <NumGreen>863.6%</> at level 11), and increases her ATK by 5% for 30s, up to 10 stacks. Cooldown: 1s.", + "context": "<Italic>\"For Shinku as she is now, few situations are enough to make her go all out.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Shinku_Pas1", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv2", + "weeklycloneboss_a02_01" + ], + "amount": [ + 30000, + 2, + 1 + ] + } + ] + }, + { + "id": "GA_Shinku_Passive_2", + "name": "Wrathscale", + "type_name": "Passive Skill", + "desc": "Increases Ultimate DMG against non-Boss enemies by <NumGreen>50%</>.", + "context": "<Italic>\"—Unless her friends are in peril.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Shinku_Pas2", + "additional_desc": [], + "materials": [ + { + "level": "1", + "items_id": [ + "gold", + "SkillUpMaterial_01_lv3", + "weeklycloneboss_a02_01" + ], + "amount": [ + 40000, + 1, + 2 + ] + } + ] + } + ], + "beginning": [], + "peculiarity": [ + { + "id": "GA_Shinku_Passive_3", + "name": "Menacing Gaze", + "type_name": "Character Traits", + "desc": "Enters the <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> state when Shinku remains active in battle for more than 2s without actively initiating an attack, gaining stacks every second. Grants her <NumGreen>1</> additional stack of <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> whenever Shinku successfully performs a Critical Dodge while this state is active.\r\n<hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> stacks up to <NumGreen>8</> times. Switching characters removes the state and all stacks.\r\nEnds <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> when Shinku initiates an attack and hits, causing her to perform Instant Strike and deal bonus DMG in addition to the original attack. Each stack of <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> increases this bonus DMG by <NumGreen>100%</> (scales with Basic Attack level, reaching <NumGreen>215.9%</> at level 11) and grants <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuQEnergy\">Defiant Spirit</>, <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRageEEnergy\">Fading Reason</>, and Cycle Energy.", + "context": "<Italic>\"Stay calm, Shinku. Don't let your instincts take over.\"</>", + "icon": "/Game/UI/UI_Icon/Skill/Shinku_Pas3", + "additional_desc": [ + { + "name": "Menacing Gaze", + "desc": "Enters the Menacing Gaze state when Shinku is active in battle for more than 2s without actively initiating an attack, gaining stacks every second. Grants her <NumGreen>1</> additional stack of Menacing Gaze whenever Shinku successfully performs a Critical Dodge while this state is active.\r\nEnds Menacing Gaze when Shinku initiates an attack and hits, causing her to perform Instant Strike and deal bonus DMG in addition to the original attack. Each stack of Menacing Gaze increases this bonus DMG by <NumGreen>100%</> (scales with Basic Attack level, reaching <NumGreen>215.9%</> at level 11) and grants Defiant Spirit, Fading Reason, and Cycle Energy." + }, + { + "name": "Defiant Spirit", + "desc": "Special Energy required to cast Crimson Fury. Gained only when Shinku's attacks hit." + }, + { + "name": "Fading Reason", + "desc": "Energy required to cast Scarlet Descent. Gained when Shinku's attacks hit during Surging Crimson." + } + ], + "materials": [] + } + ], + "city": [ + { + "id": "City_Ability_Shinku_01", + "name": "Sneaking a Break", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_oemy", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Shinku increases dish prices by <Green2>0.3</> Fons for every 3 Beverage Tags on dishes." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Shinku reduces Ingredient Consumption Rate by <Green2>1%</>." + }, + { + "level": "3", + "desc": "<Term>Level 3:</> Shinku increases dish prices by <Green2>0.3</> Fons for every 3 Beverage Tags on dishes." + }, + { + "level": "4", + "desc": "<Term>Level 4:</> Shinku reduces Ingredient Consumption Rate by <Green2>1%</>." + }, + { + "level": "5", + "desc": "<Term>Level 5:</> Shinku increases dish prices by <Green2>3%</> for every 3 Beverage Tags on dishes." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 2, + 500 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 4, + 1500 + ] + }, + { + "level": "3", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 10, + 3600 + ] + }, + { + "level": "4", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "5", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + }, + { + "id": "City_Ability_Shinku_02", + "name": "Always Up for a Challenge", + "type_name": "Life Skills", + "icon": "/Game/UI/UI/YINeng/CityAbilityIcon/YH_UI_Skill_cchs", + "additional_desc": [], + "level_data": { + "desc": [ + { + "level": "1", + "desc": "<Term>Level 1:</> Spend an additional <Green2>2</> City Stamina in Little Sparrow: Mahjong Inferno mode, or an additional <Green2>6</> City Stamina in Little Sparrow: Riichi Mahjong mode, and receive corresponding rewards for spending more Stamina." + }, + { + "level": "2", + "desc": "<Term>Level 2:</> Spend an additional <Green2>1</> City Stamina in Little Sparrow: Mahjong Inferno mode, or an additional <Green2>3</> City Stamina in Little Sparrow: Riichi Mahjong mode, and receive corresponding rewards for spending more Stamina." + } + ], + "materials": [ + { + "level": "1", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 16, + 6400 + ] + }, + { + "level": "2", + "items_id": [ + "CityAbility_UpMaterial", + "fons" + ], + "amount": [ + 24, + 10000 + ] + } + ] + } + } + ], + "common": [], + "stars": { + "awaken": [ + { + "name": "Rain-Lashed Alley", + "desc": "Shinku's damage ignores <NumGreen>12%</> of the target's DEF.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1076_1", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Pre-Dawn Training Grounds", + "desc": "Reduces the target's Cosmos Resistance by <NumGreen>10%</> for <NumGreen>20</>s after the Ultimate hits.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1076_2", + "type_name": "Awaken", + "additional_desc": [] + }, + { + "name": "Sunset Beach", + "desc": "Keeps <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> active after switching characters and allows Shinku to gain Menacing Gaze stacks while off-field.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1076_3", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Menacing Gaze", + "desc": "Enters the Menacing Gaze state when Shinku is active in battle for more than 2s without actively initiating an attack, gaining stacks every second. Grants her <NumGreen>1</> additional stack of Menacing Gaze whenever Shinku successfully performs a Critical Dodge while this state is active.\r\nEnds Menacing Gaze when Shinku initiates an attack and hits, causing her to perform Instant Strike and deal bonus DMG in addition to the original attack. Each stack of Menacing Gaze increases this bonus DMG by <NumGreen>100%</> (scales with Basic Attack level, reaching <NumGreen>215.9%</> at level 11) and grants Defiant Spirit, Fading Reason, and Cycle Energy." + } + ] + }, + { + "name": "Snowfall Slope", + "desc": "Increases the <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> stack cap to <NumGreen>16</> stacks. Enhances the triggered Instant Strike when <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuWatch\">Menacing Gaze</> reaches <NumGreen>16</> stacks, granting it the additional effects of the Instant Strike triggered by Parry Attack or Critical Riposte: inflicts Forced Knockback on the target, briefly stuns (not effective against Bosses) them, and deals an additional instance of DMG equal to <NumGreen>20%</> of Instant Strike DMG.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1076_4", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Menacing Gaze", + "desc": "Enters the Menacing Gaze state when Shinku is active in battle for more than 2s without actively initiating an attack, gaining stacks every second. Grants her <NumGreen>1</> additional stack of Menacing Gaze whenever Shinku successfully performs a Critical Dodge while this state is active.\r\nEnds Menacing Gaze when Shinku initiates an attack and hits, causing her to perform Instant Strike and deal bonus DMG in addition to the original attack. Each stack of Menacing Gaze increases this bonus DMG by <NumGreen>100%</> (scales with Basic Attack level, reaching <NumGreen>215.9%</> at level 11) and grants Defiant Spirit, Fading Reason, and Cycle Energy." + } + ] + }, + { + "name": "Room of Laughter", + "desc": "Increases Shinku's DEF by <NumGreen>50%</> and Resistance to Interruptions by <NumGreen>50%</> during <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</>, and recovers HP equal to 300% of her Base ATK after casting Scarlet Descent.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1076_5", + "type_name": "Awaken", + "additional_desc": [ + { + "name": "Surging Crimson", + "desc": "Consumes all Defiant Spirit to enter this special state. Replaces Special Combat Arts with Tidal Assault and High-Speed Breach with Scarlet Descent while in Surging Crimson. Increases DMG dealt and Resistance to Interruptions, boosts Movement, and lasts for <NumGreen>13</>s. The state ends when switching characters." + } + ] + }, + { + "name": "Dragon's Treasure", + "desc": "Increases Shinku's damage ratios for Scarlet Descent, Crimson Judgment, and Dragonflame Verdict by <NumGreen>30%</>, and allows Scarlet Descent and Crimson Judgment to pull in targets within range.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1076_6", + "type_name": "Awaken", + "additional_desc": [] + } + ], + "resonance": [ + { + "name": "Awakened Resolve", + "desc": "Increases the skill level of Basic Attack, Redirect Skill, and Ultimate by <NumGreen>1</>. Increases DMG dealt by an additional <NumGreen>30%</> while in <hot textstyle=\"TextEXPL\" param=\"nouns&ShinkuRage\">Surging Crimson</>.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 3 Awakenings", + "additional_desc": [ + { + "name": "Surging Crimson", + "desc": "Consumes all Defiant Spirit to enter this special state. Replaces Special Combat Arts with Tidal Assault and High-Speed Breach with Scarlet Descent while in Surging Crimson. Increases DMG dealt and Resistance to Interruptions, boosts Movement, and lasts for <NumGreen>13</>s. The state ends when switching characters." + } + ] + }, + { + "name": "Crimson Hero", + "desc": "Increases Shinku's Crit Rate by <NumGreen>10%</> and causes her damage to ignore <NumGreen>15%</> of the target's DEF.", + "icon": "/Game/UI/UI/player/YH_UI_juexingICON/1009_2", + "type_name": "Bonus for 6 Awakenings", + "additional_desc": [] + } + ], + "awakenSpine": "/Game/UI/UI/AnimSpine/1076/awaken.webm" + }, + "equip_slots": { + "type_name": "Console Attributes", + "OwnerGridCount": 3, + "desc": "Increases {0} by {1}% for each Type III Module equipped.", + "special_desc": "Type III Specialization", + "slots": [ + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + 0, + 0, + 0, + 0, + 0, + -1 + ], + [ + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + ], + "stats": [ + { + "id_stats": "CritDamageBase", + "name": "CRIT DMG", + "icon": "/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai", + "bShowPercent": true, + "value": 16 + } + ] + }, + "preferrable_gifts": [ + { + "item_id": "Furniture_Gacha_MiniBlack_005", + "amount": 100 + }, + { + "item_id": "Furniture_Gacha_eri_004", + "amount": 100 + }, + { + "item_id": "Food_026", + "amount": 100 + }, + { + "item_id": "Flower0000", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_MiniBlack_002", + "amount": 200 + }, + { + "item_id": "Furniture_Gacha_eri_002", + "amount": 200 + }, + { + "item_id": "Furniture_Ornament_002", + "amount": 400 + }, + { + "item_id": "Figure_miniblack_01_002", + "amount": 400 + }, + { + "item_id": "Figure_maskerrider_02_001", + "amount": 400 + }, + { + "item_id": "SpecialGift_letter", + "amount": 2000 + }, + { + "item_id": "SpecialGift_ticket", + "amount": 400 + }, + { + "item_id": "Furniture_Ornament_038", + "amount": 400 + }, + { + "item_id": "SpecialGift_1076", + "amount": 1200 + } + ], + "gift_reward": [ + { + "level": "1", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv2" + ], + "amount": [ + 10, + 3 + ] + }, + { + "level": "2", + "items_id": [ + "Annulith", + "WeaponUpMaterial_lv3", + "Friendship_1_1076" + ], + "amount": [ + 10, + 2, + 1 + ] + }, + { + "level": "3", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3" + ], + "amount": [ + 10, + 2 + ] + }, + { + "level": "4", + "items_id": [ + "Annulith", + "CharacterUpMaterial_lv3", + "Friendship_2_1076" + ], + "amount": [ + 10, + 3, + 1 + ] + }, + { + "level": "5", + "items_id": [ + "Annulith", + "CityAbility_UpMaterial" + ], + "amount": [ + 20, + 5 + ] + }, + { + "level": "6", + "items_id": [ + "Annulith", + "Friendship_3_1076", + "Gold" + ], + "amount": [ + 20, + 1, + 20000 + ] + }, + { + "level": "7", + "items_id": [ + "Gold", + "Universal_stickers_1076" + ], + "amount": [ + 20000, + 1 + ] + }, + { + "level": "8", + "items_id": [ + "Gold", + "Universal_avatar1_1076", + "Friendship_4_1076" + ], + "amount": [ + 30000, + 1, + 1 + ] + }, + { + "level": "9", + "items_id": [ + "Gold", + "Universal_frame_1076" + ], + "amount": [ + 40000, + 1 + ] + }, + { + "level": "10", + "items_id": [ + "Gold", + "Universal_BusinessCard_1076", + "Fashion_character_1076_nighty" + ], + "amount": [ + 50000, + 1, + 1 + ] + } + ], + "voices": { + "daily": [ + { + "name": "First Meet", + "desc": "I'm Shinku from CSU-2. You're Coco, the one Mint mentions a lot, right? Nice to meet you. I hope I won't give you as much trouble as the dumcat.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_meet_001" + }, + { + "name": "Chat: Dragon Horns", + "desc": "They're not as useful in battle as my tail, but the horns don't bother me as much as my tail does, except when measuring my height.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_chat_001" + }, + { + "name": "Chat: Vintage Shop", + "desc": "On Bagel, I noticed a few vintage shops just opened in Hethereau. Let's take a look when we can.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_chat_002" + }, + { + "name": "Chat: Rumors", + "desc": "I don't have wings, I don't spit fire, and I don't grab my enemies and circle around in the sky before body-slamming them. Seriously, who made this up…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_chat_003" + }, + { + "name": "Sunny", + "desc": "The weather is so good, we might run into Mint at a square.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_weather_001" + }, + { + "name": "Rainy", + "desc": "It's raining again. Tch, trouble…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_weather_002" + }, + { + "name": "Cold", + "desc": "It's not like I'm cold… but let's get this over with.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_weather_003" + }, + { + "name": "Hot", + "desc": "I could use an ice pop now…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_weather_004" + }, + { + "name": "Morning Greeting", + "desc": "Morning. You look like you're motivated. Wanna take my patrolling shift?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_greet_001" + }, + { + "name": "Noon Greeting", + "desc": "Do you want to get ramen? There's this old ramen store I used to go to when I was still in school. It tastes great.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_greet_002" + }, + { + "name": "Evening Greeting", + "desc": "I hope there isn't a sudden report to turn in tonight…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_greet_003" + }, + { + "name": "Good Night", + "desc": "It's getting late. You don't have to send me home, do you? See you tomorrow. Good night.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_greet_004" + }, + { + "name": "Hobbies", + "desc": "I collect anything that catches my eye: from the ultra-secret editions of DSD's collab Mystery Boxes with Duke K, to misprinted issues of Weekly Fantasy—even simply cool rocks I come across by the beach. Wanna see? Maybe next time.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_hobby_001" + }, + { + "name": "Worries", + "desc": "My funds are running a bit low. I really don't want to touch my savings…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_vexation_001" + }, + { + "name": "Topic: CSU", + "desc": "The \"New Containment Safety Protocol\" is bothersome. There are so many rules, and whenever I'm on a mission, I'm forced to think twice before I act. Still, training myself to follow those annoying restrictions when my powers are affecting me is the reason I'm here.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_talk_001" + }, + { + "name": "Topic: Wandering", + "desc": "When I don't have plans, I like walking around without a destination in mind. I'll roam into random places, and when I see things that interest me, I collect them. When I was little, I called this \"treasure hunting.\" It's still accurate, right?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_talk_002" + }, + { + "name": "Topic: Nacupeda", + "desc": "Nacupeda is an expert at keeping coins: just stash them in the pool and keep them within eyesight. No wonder that anomaly is always happy. Maybe I should do something similar?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_talk_003" + }, + { + "name": "About Myself: Esper Ability", + "desc": "My former captain told me that my power is a curse. Though it makes me strong, it could also destroy the things I love. I was once depressed because I injured a friend by mistake… But now I understand: I'll embrace my power as long as I don't have to hate myself for being weak when I need to be strong.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_self_001" + }, + { + "name": "About Myself: Relationships", + "desc": "\"I always go solo in the Bureau?\" That dumcat just blabbers around… Well, I can't really be alone if she always drags me and Iroi around, can I?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_self_002" + }, + { + "name": "About Myself: Urge", + "desc": "My Esper Abilities affect me beyond fights. Even in everyday situations, I might suddenly do something out of line. It wouldn't be as dangerous as during a fight, but I don't know what I might end up doing—that could mean trouble.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_self_003" + }, + { + "name": "About Mint I", + "desc": "Mint \"senpai\" has absolutely no talent in reading the room. Even if you want to keep your distance, she still comes over to talk to you. Sigh, I still can't leave that dumcat alone.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_about_001" + }, + { + "name": "About Mint II", + "desc": "That dumcat, she never shies away from expressing her true thoughts and feelings. I don't know if I should praise her for that or just call her thick-skinned… Still, if everyone was as straightforward as Mint, things would be a lot easier.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_about_002" + }, + { + "name": "About Iroi I", + "desc": "As far as colleagues go, Iroi is pretty much perfect. I was probably paired with her because when I lose control, she can calm me down with her dreams, which was where I saw… never mind. Anyway, I don't see her as a normal person, but it doesn't affect our work.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_about_003" + }, + { + "name": "About Iroi II", + "desc": "Everyone has a story they don't want to tell. I was like that before. It's the same for Ramtenna. I'm not exactly sure what she's been through, but the least I can do is be by her side—like my teammates were by my side when we faced the Crimson Dragon. The bickering? I prefer to not bicker with her, but maybe that's what companions do.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_about_004" + }, + { + "name": "About CSU-2", + "desc": "I thought I was going to go through some troubles when I first transferred to CSU-2, but thanks to Mint, colleagues accepted me quickly. In contrast, I almost made a big blunder on my first mission. Good thing that Iroi was there to help… Ahem, I should buy my colleagues some drinks from Crazy Cat.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_about_005" + }, + { + "name": "About Bureau of Anomaly Control", + "desc": "For the record, I'm not dissing my colleagues. I just wanted to say that the BAC is made up of a bunch of weirdos, especially the CSUs and ETDs, which require fieldwork and dealing with dangerous anomalies. Now that I think about it, I was able to blend into the Bureau and learn from my former captain because there weren't many \"normal people\" around to begin with.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_about_006" + }, + { + "name": "Character Ascension I", + "desc": "Now I can fight stronger enemies on my own.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_ug_001" + }, + { + "name": "Character Ascension II", + "desc": "This might mean trouble, but getting stronger is a good thing.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_ug_002" + }, + { + "name": "Character Ascension III", + "desc": "Not enough… I need more…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_ug_003" + }, + { + "name": "Gift Received I", + "desc": "…! Don't regret giving me this.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_gift_001" + }, + { + "name": "Gift Received II", + "desc": "You know what I like.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_gift_002" + }, + { + "name": "Gift Received III", + "desc": "Thank you. I'll add it to my stash.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_gift_003" + }, + { + "name": "Gift Received IV", + "desc": "Is there anything I can help with?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_gift_004" + } + ], + "battle": [ + { + "name": "Redirect Skill I", + "desc": "Far from it.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_skill_001" + }, + { + "name": "Redirect Skill II", + "desc": "All in one go…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_skill_002" + }, + { + "name": "Redirect Skill III", + "desc": "Take this… if you can!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_skill_003" + }, + { + "name": "Redirect Skill IV", + "desc": "I must… swing my claws!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032S/Play_Vo_Char_NPC032S_skill_004" + }, + { + "name": "Redirect Skill V", + "desc": "Fool around… and find out!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032S/Play_Vo_Char_NPC032S_skill_005" + }, + { + "name": "Redirect Skill VI", + "desc": "Releasing! All my anger!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032S/Play_Vo_Char_NPC032S_skill_006" + }, + { + "name": "Ultimate I", + "desc": "These pests…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_ultraskill_UI_001" + }, + { + "name": "Ultimate II", + "desc": "Get out! Don't get dragged into this!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_ultraskill_UI_002" + }, + { + "name": "Ultimate III", + "desc": "Annoying… silence, silence, siLEncE, SILENCE!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_ultraskill_UI_003" + }, + { + "name": "Ultimate IV", + "desc": "This is the end…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032S/Play_Vo_Char_NPC032S_ultraskill_UI_004" + }, + { + "name": "Ultimate V", + "desc": "You're stuck here with me…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032S/Play_Vo_Char_NPC032S_ultraskill_UI_005" + }, + { + "name": "Ultimate VI", + "desc": "Plotting your escape? Don't even think about it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032S/Play_Vo_Char_NPC032S_ultraskill_UI_006" + }, + { + "name": "Containment I", + "desc": "Stay still and let me do my job.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_containment_001" + }, + { + "name": "Containment II", + "desc": "Containment complete. It went smoothly.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_containment_002" + }, + { + "name": "Nullification I", + "desc": "What a hassle…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_anomaly_003" + }, + { + "name": "Nullification II", + "desc": "You just had to choose the hard way.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_anomaly_004" + }, + { + "name": "Unexpected Gains I", + "desc": "Pretty lucky day. I should visit DSD.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_windfall_001" + }, + { + "name": "Unexpected Gains II", + "desc": "I found some useful stuff. Not bad at all.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_windfall_002" + }, + { + "name": "Unexpected Gains III", + "desc": "What good stuff will I get?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_windfall_003" + }, + { + "name": "Unexpected Gains IV", + "desc": "I hope I'm not using up my good luck.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_windfall_004" + }, + { + "name": "Unexpected Gains V", + "desc": "Is this a blessing from Nacupeda?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_windfall_005" + }, + { + "name": "Unexpected Gains VI", + "desc": "Do I need to turn this in to the Security Office?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_windfall_006" + }, + { + "name": "Low Health I", + "desc": "Ugh… I need some supplies.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_hp_001" + }, + { + "name": "Low Health II", + "desc": "It's okay. I can still fight.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_hp_002" + }, + { + "name": "Low Health III", + "desc": "So much trouble…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_hp_003" + }, + { + "name": "Heal I", + "desc": "I feel so good I can solo the Headless Rider.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_fh_001" + }, + { + "name": "Heal II", + "desc": "I'm in top condition. Are there more enemies to fight?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_fh_002" + }, + { + "name": "Down I", + "desc": "This is good…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_dead_001" + }, + { + "name": "Down II", + "desc": "Is that it…?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_dead_002" + }, + { + "name": "Down III", + "desc": "I can't fall here…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_dead_003" + }, + { + "name": "Takedown I", + "desc": "Over already?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_kill_001" + }, + { + "name": "Takedown II", + "desc": "I thought you'd be stronger.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_kill_002" + }, + { + "name": "Damaged I", + "desc": "Tch, I was careless…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_struck_001" + }, + { + "name": "Damaged II", + "desc": "It's just a scratch.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_struck_002" + }, + { + "name": "Heavily Damaged I", + "desc": "Urgh… it's my turn now!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_hstruck_001" + }, + { + "name": "Heavily Damaged II", + "desc": "…I'll hit you back!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_hstruck_002" + }, + { + "name": "Deploy I", + "desc": "Leave the strongest one to me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_deploy_001" + }, + { + "name": "Deploy II", + "desc": "Don't worry. I'll control myself.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_deploy_002" + }, + { + "name": "Entry Attack I", + "desc": "Knock it off!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_QTE_001" + }, + { + "name": "Entry Attack II", + "desc": "I'll make sure you quiet down!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_QTE_002" + }, + { + "name": "Entry Attack III", + "desc": "Your commitment… is not enough!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_QTE_003" + }, + { + "name": "Glide I", + "desc": "If only I had wings…", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_Fly_001" + }, + { + "name": "Glide II", + "desc": "Taking a shortcut down.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_Fly_002" + }, + { + "name": "Switch I", + "desc": "Stay back.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_Switch_001" + }, + { + "name": "Switch II", + "desc": "Alright, taking over…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_Switch_002" + }, + { + "name": "Switch III", + "desc": "C'mon, let's fight!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_Switch_003" + }, + { + "name": "Special Switch - Mint", + "desc": "Fine, fine, Mint \"senpai.\"", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_SSC_mint_001" + }, + { + "name": "Special Switch: Iroi", + "desc": "Ramtenna, support me.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_SSC_yly_002" + }, + { + "name": "Special Switch - Zero", + "desc": "Appraiser, this is Shinku.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_SSC_zero_003" + }, + { + "name": "Teammate Down - Mint", + "desc": "Dumcat, don't overdo it!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_TeammateDown_001" + }, + { + "name": "Teammate Down - Iroi", + "desc": "Take a break. I'll make them pay…!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_TeammateDown_002" + }, + { + "name": "Teammate Down - Zero", + "desc": "Appraiser, don't you fall on me!", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_TeammateDown_003" + }, + { + "name": "Parry I", + "desc": "Is that it?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_Parry_001" + }, + { + "name": "Parry II", + "desc": "You can try harder.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_Parry_002" + }, + { + "name": "Consecutive Critical Dodge Success I", + "desc": "Can't follow me?", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_DodgeCombo_001" + }, + { + "name": "Consecutive Critical Dodge Success II", + "desc": "No room for mistakes.", + "audio": "/Game/WwiseAudio/Events/Voice/Char/NPC032/Play_Vo_Char_NPC032_DodgeCombo_002" + } + ] + } + } +] diff --git a/data-src/guides.json b/data-src/guides.json new file mode 100644 index 0000000..7fcbbe1 --- /dev/null +++ b/data-src/guides.json @@ -0,0 +1,13 @@ +{ + "format": "nte-guides", + "format_version": 1, + "_source": "Prydwen build guides, entered by hand and reviewed before committing.", + "_why_not_scraped": "Prydwen's character pages are client-rendered, so a plain fetch returns only navigation chrome, and their Gatsby /page-data/ endpoint answers 410 Gone. Their robots.txt does allow content pages with a 10 second crawl-delay, so a headless render would be permitted - it is just not something the build can do unattended. Entries below are typed in from the published guide.", + "_shape": { + "key": "the GA_<key>_* ability key, so it joins to a capture directly", + "variants": "one per published priority set (Main DPS, SubDPS, Break, DoT)", + "targets": "recommended endgame stats, raw stat ids, percentages as fractions", + "priority": "substat ranking, best first; weights are derived from position" + }, + "characters": [] +} diff --git a/data-src/set-bonuses.json b/data-src/set-bonuses.json new file mode 100644 index 0000000..fa7d14c --- /dev/null +++ b/data-src/set-bonuses.json @@ -0,0 +1,127 @@ +{ + "format": "nte-set-bonuses", + "format_version": 1, + "note": "Bonus VALUES are not in any capture and not on everness: items.json carries only the cartridge boxes. Each tier stays unknown until read in game or scraped, and an unknown tier contributes nothing rather than a guessed number.", + "sets": { + "Crimson: Twin Butterflies": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Devil's Blood: Curse": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Diabolos": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Fireflies and the Forest": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Kingdom's Guard": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Lost Radiance": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Quiet Manor": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Shadow Creed": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Speedy Hedgehog": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Street Boxer": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Thea's Night Tavern": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + }, + "Tiny Big Adventure": { + "2": { + "unknown": true, + "stats": [] + }, + "4": { + "unknown": true, + "stats": [] + } + } + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..b0521e7 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>NTE gear optimizer + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0397552 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1322 @@ +{ + "name": "nte-optimizer", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nte-optimizer", + "version": "0.1.0", + "dependencies": { + "idb": "8.0.3", + "react": "19.2.8", + "react-dom": "19.2.8" + }, + "devDependencies": { + "@types/node": "26.2.0", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.4", + "@vitejs/plugin-react": "6.1.0", + "typescript": "5.9.3", + "vite": "8.2.2", + "vitest": "4.1.11" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@oxc-project/types": { + "version": "0.146.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.146.0.tgz", + "integrity": "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.5.tgz", + "integrity": "sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.5.tgz", + "integrity": "sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.5.tgz", + "integrity": "sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.5.tgz", + "integrity": "sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.5.tgz", + "integrity": "sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.5.tgz", + "integrity": "sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.5.tgz", + "integrity": "sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.5.tgz", + "integrity": "sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.5.tgz", + "integrity": "sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.5.tgz", + "integrity": "sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.5.tgz", + "integrity": "sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.5.tgz", + "integrity": "sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.5.tgz", + "integrity": "sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.5.tgz", + "integrity": "sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.5.tgz", + "integrity": "sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", + "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", + "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.0.tgz", + "integrity": "sha512-qd2BzUBehkov86WFhg0JkEFEYyCLG9uPCe6qWTY/kRlss9OvJrOF2UbIWT7p+8IzZHkEu0DNGHc4HSv+JdDLsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.145.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", + "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", + "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.11", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", + "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", + "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.11", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", + "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "@vitest/utils": "4.1.11", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", + "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", + "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/idb": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.3.tgz", + "integrity": "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==", + "license": "ISC" + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "node_modules/rolldown": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.5.tgz", + "integrity": "sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.146.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.5", + "@rolldown/binding-android-arm64": "1.2.5", + "@rolldown/binding-darwin-arm64": "1.2.5", + "@rolldown/binding-darwin-x64": "1.2.5", + "@rolldown/binding-freebsd-x64": "1.2.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.5", + "@rolldown/binding-linux-arm64-gnu": "1.2.5", + "@rolldown/binding-linux-arm64-musl": "1.2.5", + "@rolldown/binding-linux-ppc64-gnu": "1.2.5", + "@rolldown/binding-linux-s390x-gnu": "1.2.5", + "@rolldown/binding-linux-x64-gnu": "1.2.5", + "@rolldown/binding-linux-x64-musl": "1.2.5", + "@rolldown/binding-openharmony-arm64": "1.2.5", + "@rolldown/binding-win32-arm64-msvc": "1.2.5", + "@rolldown/binding-win32-x64-msvc": "1.2.5" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", + "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.11", + "@vitest/mocker": "4.1.11", + "@vitest/pretty-format": "4.1.11", + "@vitest/runner": "4.1.11", + "@vitest/snapshot": "4.1.11", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.11", + "@vitest/browser-preview": "4.1.11", + "@vitest/browser-webdriverio": "4.1.11", + "@vitest/coverage-istanbul": "4.1.11", + "@vitest/coverage-v8": "4.1.11", + "@vitest/ui": "4.1.11", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a7b3aa0 --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "nte-optimizer", + "private": true, + "version": "0.1.0", + "type": "module", + "description": "Gear optimizer for Neverness to Everness. Static, no server.", + "scripts": { + "dev": "vite", + "build": "npm run generate && tsc -b && vite build", + "build:single": "npm run build && vite build --config vite.single.config.ts", + "preview": "vite preview", + "serve:dist": "python3 -m http.server -d dist", + "generate": "npm run gen:gamedata && npm run gen:tilings", + "gen:gamedata": "node --experimental-strip-types tools/prune-gamedata.ts", + "gen:tilings": "node --experimental-strip-types tools/precompute-tilings.ts", + "gen:icons": "node --experimental-strip-types tools/fetch-icons.ts", + "bench": "node --experimental-strip-types tools/bench-solve.ts", + "test": "vitest run", + "test:watch": "vitest", + "typecheck": "tsc -b --noEmit", + "check:guides": "node --experimental-strip-types tools/check-guides.ts" + }, + "dependencies": { + "idb": "8.0.3", + "react": "19.2.8", + "react-dom": "19.2.8" + }, + "devDependencies": { + "@types/node": "26.2.0", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.4", + "@vitejs/plugin-react": "6.1.0", + "typescript": "5.9.3", + "vite": "8.2.2", + "vitest": "4.1.11" + } +} diff --git a/public/img/fork_Arachne_256-159158f2.webp b/public/img/fork_Arachne_256-159158f2.webp new file mode 100644 index 0000000..aef200b --- /dev/null +++ b/public/img/fork_Arachne_256-159158f2.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_BitGame_256-0cb5217a.webp b/public/img/fork_BitGame_256-0cb5217a.webp new file mode 100644 index 0000000..0e838d5 --- /dev/null +++ b/public/img/fork_BitGame_256-0cb5217a.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_BitterCake_256-2498fb35.webp b/public/img/fork_BitterCake_256-2498fb35.webp new file mode 100644 index 0000000..ca5906c --- /dev/null +++ b/public/img/fork_BitterCake_256-2498fb35.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_BlackBook_256-56849e90.webp b/public/img/fork_BlackBook_256-56849e90.webp new file mode 100644 index 0000000..df68df5 --- /dev/null +++ b/public/img/fork_BlackBook_256-56849e90.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_BlastCandy_256-4bd61b87.webp b/public/img/fork_BlastCandy_256-4bd61b87.webp new file mode 100644 index 0000000..918a394 --- /dev/null +++ b/public/img/fork_BlastCandy_256-4bd61b87.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_BoxingCandy_256-2d9a5897.webp b/public/img/fork_BoxingCandy_256-2d9a5897.webp new file mode 100644 index 0000000..8621706 --- /dev/null +++ b/public/img/fork_BoxingCandy_256-2d9a5897.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Butterfly_256-1395ba48.webp b/public/img/fork_Butterfly_256-1395ba48.webp new file mode 100644 index 0000000..67babe4 --- /dev/null +++ b/public/img/fork_Butterfly_256-1395ba48.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Castle_256-3ce261aa.webp b/public/img/fork_Castle_256-3ce261aa.webp new file mode 100644 index 0000000..9480146 --- /dev/null +++ b/public/img/fork_Castle_256-3ce261aa.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_DemonBlade_256-89200ec7.webp b/public/img/fork_DemonBlade_256-89200ec7.webp new file mode 100644 index 0000000..597a19a --- /dev/null +++ b/public/img/fork_DemonBlade_256-89200ec7.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Door_256-7a125283.webp b/public/img/fork_Door_256-7a125283.webp new file mode 100644 index 0000000..1fc65f4 --- /dev/null +++ b/public/img/fork_Door_256-7a125283.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_GoldRecord_256-9e37a9a5.webp b/public/img/fork_GoldRecord_256-9e37a9a5.webp new file mode 100644 index 0000000..2221991 --- /dev/null +++ b/public/img/fork_GoldRecord_256-9e37a9a5.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_GoldWool_256-929d1333.webp b/public/img/fork_GoldWool_256-929d1333.webp new file mode 100644 index 0000000..bde13d8 --- /dev/null +++ b/public/img/fork_GoldWool_256-929d1333.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_HugVine_256-aaa93ce6.webp b/public/img/fork_HugVine_256-aaa93ce6.webp new file mode 100644 index 0000000..a6aafb2 --- /dev/null +++ b/public/img/fork_HugVine_256-aaa93ce6.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Kite_256-a8b52a91.webp b/public/img/fork_Kite_256-a8b52a91.webp new file mode 100644 index 0000000..90f3235 --- /dev/null +++ b/public/img/fork_Kite_256-a8b52a91.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_KnightCandy_256-fea87c21.webp b/public/img/fork_KnightCandy_256-fea87c21.webp new file mode 100644 index 0000000..30c2cc7 --- /dev/null +++ b/public/img/fork_KnightCandy_256-fea87c21.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_LunarPhase_256-58ab7825.webp b/public/img/fork_LunarPhase_256-58ab7825.webp new file mode 100644 index 0000000..704391b --- /dev/null +++ b/public/img/fork_LunarPhase_256-58ab7825.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_MotorCandy_256-fd81bc62.webp b/public/img/fork_MotorCandy_256-fd81bc62.webp new file mode 100644 index 0000000..1ca019b --- /dev/null +++ b/public/img/fork_MotorCandy_256-fd81bc62.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Nakupeda_256-96338388.webp b/public/img/fork_Nakupeda_256-96338388.webp new file mode 100644 index 0000000..47c56f8 --- /dev/null +++ b/public/img/fork_Nakupeda_256-96338388.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_NestBird_256-f6e28be2.webp b/public/img/fork_NestBird_256-f6e28be2.webp new file mode 100644 index 0000000..b111014 --- /dev/null +++ b/public/img/fork_NestBird_256-f6e28be2.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_PaperPlane_256-2d4e5717.webp b/public/img/fork_PaperPlane_256-2d4e5717.webp new file mode 100644 index 0000000..a871d6d --- /dev/null +++ b/public/img/fork_PaperPlane_256-2d4e5717.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_PoliceRat_256-d05f72e2.webp b/public/img/fork_PoliceRat_256-d05f72e2.webp new file mode 100644 index 0000000..5797988 --- /dev/null +++ b/public/img/fork_PoliceRat_256-d05f72e2.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Qiaoqiao_256-5fad717f.webp b/public/img/fork_Qiaoqiao_256-5fad717f.webp new file mode 100644 index 0000000..253f0c6 --- /dev/null +++ b/public/img/fork_Qiaoqiao_256-5fad717f.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Rose_256-d33fcc29.webp b/public/img/fork_Rose_256-d33fcc29.webp new file mode 100644 index 0000000..4e7254c --- /dev/null +++ b/public/img/fork_Rose_256-d33fcc29.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_ThiefCandy_256-9b9444e3.webp b/public/img/fork_ThiefCandy_256-9b9444e3.webp new file mode 100644 index 0000000..af37bf1 --- /dev/null +++ b/public/img/fork_ThiefCandy_256-9b9444e3.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_TigerTally_256-47cfb268.webp b/public/img/fork_TigerTally_256-47cfb268.webp new file mode 100644 index 0000000..0babb27 --- /dev/null +++ b/public/img/fork_TigerTally_256-47cfb268.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Time_256-9cb02755.webp b/public/img/fork_Time_256-9cb02755.webp new file mode 100644 index 0000000..de166d3 --- /dev/null +++ b/public/img/fork_Time_256-9cb02755.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_Whale_256-76862d07.webp b/public/img/fork_Whale_256-76862d07.webp new file mode 100644 index 0000000..3c6e246 --- /dev/null +++ b/public/img/fork_Whale_256-76862d07.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_bopu_256-e045cc0d.webp b/public/img/fork_bopu_256-e045cc0d.webp new file mode 100644 index 0000000..3412b65 --- /dev/null +++ b/public/img/fork_bopu_256-e045cc0d.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_dustbin_256-6595915b.webp b/public/img/fork_dustbin_256-6595915b.webp new file mode 100644 index 0000000..be1ca33 --- /dev/null +++ b/public/img/fork_dustbin_256-6595915b.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_fudianling_256-fe144d13.webp b/public/img/fork_fudianling_256-fe144d13.webp new file mode 100644 index 0000000..84eae50 --- /dev/null +++ b/public/img/fork_fudianling_256-fe144d13.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_jiaojuan_256-769fdf83.webp b/public/img/fork_jiaojuan_256-769fdf83.webp new file mode 100644 index 0000000..1892feb --- /dev/null +++ b/public/img/fork_jiaojuan_256-769fdf83.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_jingmotingyuan_256-eccbc72b.webp b/public/img/fork_jingmotingyuan_256-eccbc72b.webp new file mode 100644 index 0000000..005395b --- /dev/null +++ b/public/img/fork_jingmotingyuan_256-eccbc72b.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_koinobori_256-c8624200.webp b/public/img/fork_koinobori_256-c8624200.webp new file mode 100644 index 0000000..980f99a --- /dev/null +++ b/public/img/fork_koinobori_256-c8624200.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_lingganzhongjiezhe_256-dd4950fd.webp b/public/img/fork_lingganzhongjiezhe_256-dd4950fd.webp new file mode 100644 index 0000000..f3e0287 --- /dev/null +++ b/public/img/fork_lingganzhongjiezhe_256-dd4950fd.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_mamen_256-2d0a8b9a.webp b/public/img/fork_mamen_256-2d0a8b9a.webp new file mode 100644 index 0000000..bbe4052 --- /dev/null +++ b/public/img/fork_mamen_256-2d0a8b9a.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_mofeikesi_256-db984ecf.webp b/public/img/fork_mofeikesi_256-db984ecf.webp new file mode 100644 index 0000000..a24ac21 --- /dev/null +++ b/public/img/fork_mofeikesi_256-db984ecf.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_moon_256-19817a0c.webp b/public/img/fork_moon_256-19817a0c.webp new file mode 100644 index 0000000..600ab7a --- /dev/null +++ b/public/img/fork_moon_256-19817a0c.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_nonos_256-4cb5e0fa.webp b/public/img/fork_nonos_256-4cb5e0fa.webp new file mode 100644 index 0000000..43af9ba --- /dev/null +++ b/public/img/fork_nonos_256-4cb5e0fa.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_oulaquantao_256-bcc71d33.webp b/public/img/fork_oulaquantao_256-bcc71d33.webp new file mode 100644 index 0000000..3ddeb38 --- /dev/null +++ b/public/img/fork_oulaquantao_256-bcc71d33.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_rishi_256-e4137b85.webp b/public/img/fork_rishi_256-e4137b85.webp new file mode 100644 index 0000000..8244930 --- /dev/null +++ b/public/img/fork_rishi_256-e4137b85.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_snowman_256-013ccbd0.webp b/public/img/fork_snowman_256-013ccbd0.webp new file mode 100644 index 0000000..d1a8270 --- /dev/null +++ b/public/img/fork_snowman_256-013ccbd0.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_spider_256-656150ea.webp b/public/img/fork_spider_256-656150ea.webp new file mode 100644 index 0000000..54e2067 --- /dev/null +++ b/public/img/fork_spider_256-656150ea.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_tuansanlang_256-937209b3.webp b/public/img/fork_tuansanlang_256-937209b3.webp new file mode 100644 index 0000000..a7e1f85 --- /dev/null +++ b/public/img/fork_tuansanlang_256-937209b3.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_worldrain_256-cf0b4b4a.webp b/public/img/fork_worldrain_256-cf0b4b4a.webp new file mode 100644 index 0000000..4d26dbf --- /dev/null +++ b/public/img/fork_worldrain_256-cf0b4b4a.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_wuhuakuang_256-ea10c6c4.webp b/public/img/fork_wuhuakuang_256-ea10c6c4.webp new file mode 100644 index 0000000..966bac9 --- /dev/null +++ b/public/img/fork_wuhuakuang_256-ea10c6c4.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_wushoutieyu_256-d83ef63e.webp b/public/img/fork_wushoutieyu_256-d83ef63e.webp new file mode 100644 index 0000000..6801454 --- /dev/null +++ b/public/img/fork_wushoutieyu_256-d83ef63e.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_yaodao_256-e8f57727.webp b/public/img/fork_yaodao_256-e8f57727.webp new file mode 100644 index 0000000..1a7b840 --- /dev/null +++ b/public/img/fork_yaodao_256-e8f57727.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_yuanheti_256-087d4df9.webp b/public/img/fork_yuanheti_256-087d4df9.webp new file mode 100644 index 0000000..fc89d10 --- /dev/null +++ b/public/img/fork_yuanheti_256-087d4df9.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/fork_yuren_256-727dde45.webp b/public/img/fork_yuren_256-727dde45.webp new file mode 100644 index 0000000..0c5df28 --- /dev/null +++ b/public/img/fork_yuren_256-727dde45.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_003-ace97f94.webp b/public/img/player_003-ace97f94.webp new file mode 100644 index 0000000..6bbe2d6 --- /dev/null +++ b/public/img/player_003-ace97f94.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_004-874ed495.webp b/public/img/player_004-874ed495.webp new file mode 100644 index 0000000..9fdb1b2 --- /dev/null +++ b/public/img/player_004-874ed495.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_005-712a486b.webp b/public/img/player_005-712a486b.webp new file mode 100644 index 0000000..1b31999 --- /dev/null +++ b/public/img/player_005-712a486b.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_008-4976544f.webp b/public/img/player_008-4976544f.webp new file mode 100644 index 0000000..c644b6a --- /dev/null +++ b/public/img/player_008-4976544f.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_009-b9f7ef78.webp b/public/img/player_009-b9f7ef78.webp new file mode 100644 index 0000000..b1b8c3b --- /dev/null +++ b/public/img/player_009-b9f7ef78.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_010-924dc73d.webp b/public/img/player_010-924dc73d.webp new file mode 100644 index 0000000..e26fdcb --- /dev/null +++ b/public/img/player_010-924dc73d.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_012-36c8b09f.webp b/public/img/player_012-36c8b09f.webp new file mode 100644 index 0000000..9e51a5a --- /dev/null +++ b/public/img/player_012-36c8b09f.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_013-bf2054be.webp b/public/img/player_013-bf2054be.webp new file mode 100644 index 0000000..2b7ff30 --- /dev/null +++ b/public/img/player_013-bf2054be.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_015-ddebe8cc.webp b/public/img/player_015-ddebe8cc.webp new file mode 100644 index 0000000..7311f16 --- /dev/null +++ b/public/img/player_015-ddebe8cc.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_019-a75c3fbd.webp b/public/img/player_019-a75c3fbd.webp new file mode 100644 index 0000000..8561781 --- /dev/null +++ b/public/img/player_019-a75c3fbd.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_020-3e088a55.webp b/public/img/player_020-3e088a55.webp new file mode 100644 index 0000000..05e7f0a --- /dev/null +++ b/public/img/player_020-3e088a55.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_021-6cfb115e.webp b/public/img/player_021-6cfb115e.webp new file mode 100644 index 0000000..a6da75b --- /dev/null +++ b/public/img/player_021-6cfb115e.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_027-b3e5e8dc.webp b/public/img/player_027-b3e5e8dc.webp new file mode 100644 index 0000000..7f2480e --- /dev/null +++ b/public/img/player_027-b3e5e8dc.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_028-79597e4e.webp b/public/img/player_028-79597e4e.webp new file mode 100644 index 0000000..c2be538 --- /dev/null +++ b/public/img/player_028-79597e4e.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_046-b5837c27.webp b/public/img/player_046-b5837c27.webp new file mode 100644 index 0000000..39cb23a --- /dev/null +++ b/public/img/player_046-b5837c27.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_073-6a824f1f.webp b/public/img/player_073-6a824f1f.webp new file mode 100644 index 0000000..5733f42 --- /dev/null +++ b/public/img/player_073-6a824f1f.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_104-e857d709.webp b/public/img/player_104-e857d709.webp new file mode 100644 index 0000000..91b4803 --- /dev/null +++ b/public/img/player_104-e857d709.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_canhong-8fd9dc5e.webp b/public/img/player_canhong-8fd9dc5e.webp new file mode 100644 index 0000000..a16b2bf --- /dev/null +++ b/public/img/player_canhong-8fd9dc5e.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_haiyue-28720124.webp b/public/img/player_haiyue-28720124.webp new file mode 100644 index 0000000..48268d4 --- /dev/null +++ b/public/img/player_haiyue-28720124.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_kaesi1-043cca1a.webp b/public/img/player_kaesi1-043cca1a.webp new file mode 100644 index 0000000..7a2b485 --- /dev/null +++ b/public/img/player_kaesi1-043cca1a.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_lingke-a6dfa678.webp b/public/img/player_lingke-a6dfa678.webp new file mode 100644 index 0000000..0574e99 --- /dev/null +++ b/public/img/player_lingke-a6dfa678.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_yiluoyi-2eeff6ec.webp b/public/img/player_yiluoyi-2eeff6ec.webp new file mode 100644 index 0000000..009c57c --- /dev/null +++ b/public/img/player_yiluoyi-2eeff6ec.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/public/img/player_zhenhong-1c5f3031.webp b/public/img/player_zhenhong-1c5f3031.webp new file mode 100644 index 0000000..80a33b4 --- /dev/null +++ b/public/img/player_zhenhong-1c5f3031.webp @@ -0,0 +1 @@ +Everness Database \ No newline at end of file diff --git a/src/db/adapters/idb.ts b/src/db/adapters/idb.ts new file mode 100644 index 0000000..d0d2419 --- /dev/null +++ b/src/db/adapters/idb.ts @@ -0,0 +1,161 @@ +/** + * The normal tier. + * + * One database, integer-versioned, with explicit migrations in `upgrade`. + * + * The rule that governs every write here: **an IndexedDB transaction + * auto-commits the moment you await anything that is not an IndexedDB request.** + * So each transaction body below is a straight run of `store.clear()` and + * `store.put()` calls with a single await on `tx.done` at the end. Nothing else + * may creep in - not a `structuredClone`, not a progress callback - or the + * transaction closes underneath the remaining writes and the import lands half + * applied. + */ +import { openDB, type IDBPDatabase } from "idb"; + +import { + DB_NAME, + DB_VERSION, + ITEM_KIND_INDEX, + STORES, + UNDO_LIMIT, + type EquipmentRow, + type UndoRow, +} from "../schema.ts"; +import { emptyState, type PersistenceAdapter, type StoredState } from "./types.ts"; + +const SNAPSHOT_KEY = "preImport"; + +export async function openDatabase(): Promise { + return openDB(DB_NAME, DB_VERSION, { + upgrade(db, oldVersion) { + // Migrations are explicit and additive; each `if` is one version step. + if (oldVersion < 1) { + const items = db.createObjectStore(STORES.items, { keyPath: "instance" }); + items.createIndex(ITEM_KIND_INDEX, "kind"); + // Keyed on `instance`: an item is worn in exactly one place, and the + // primary key is what enforces it. + db.createObjectStore(STORES.equipment, { keyPath: "instance" }); + db.createObjectStore(STORES.characters, { keyPath: "characterId" }); + db.createObjectStore(STORES.ownerNames, { keyPath: "ownerGroup" }); + db.createObjectStore(STORES.undo, { keyPath: "id", autoIncrement: true }); + db.createObjectStore(STORES.snapshots); + db.createObjectStore(STORES.meta, { keyPath: "key" }); + } + }, + }); +} + +export function createIdbAdapter(db: IDBPDatabase): PersistenceAdapter { + return { + kind: "idb", + durable: true, + + async read(): Promise { + const [items, equipment, characters, ownerNames, meta, undo, snapshot] = + await Promise.all([ + db.getAll(STORES.items), + db.getAll(STORES.equipment), + db.getAll(STORES.characters), + db.getAll(STORES.ownerNames), + db.getAll(STORES.meta), + db.getAll(STORES.undo), + db.get(STORES.snapshots, SNAPSHOT_KEY), + ]); + const state = emptyState(); + state.db = { items, equipment, characters, ownerNames, meta }; + state.undo = undo as UndoRow[]; + state.snapshot = (snapshot as StoredState["snapshot"]) ?? null; + return state; + }, + + async replaceAll(next: StoredState): Promise { + const tx = db.transaction( + [ + STORES.items, + STORES.equipment, + STORES.characters, + STORES.ownerNames, + STORES.undo, + STORES.snapshots, + STORES.meta, + ], + "readwrite", + ); + // Synchronous from here to `tx.done`. + const snapshots = tx.objectStore(STORES.snapshots); + if (next.snapshot) void snapshots.put(next.snapshot, SNAPSHOT_KEY); + else void snapshots.delete(SNAPSHOT_KEY); + + const items = tx.objectStore(STORES.items); + void items.clear(); + for (const row of next.db.items) void items.put(row); + + const equipment = tx.objectStore(STORES.equipment); + void equipment.clear(); + for (const row of next.db.equipment) void equipment.put(row); + + const characters = tx.objectStore(STORES.characters); + void characters.clear(); + for (const row of next.db.characters) void characters.put(row); + + // Never touched by import - the player named these once, and the values + // they key on are stable across exports. + const ownerNames = tx.objectStore(STORES.ownerNames); + void ownerNames.clear(); + for (const row of next.db.ownerNames) void ownerNames.put(row); + + const undo = tx.objectStore(STORES.undo); + void undo.clear(); + for (const row of next.undo.slice(-UNDO_LIMIT)) void undo.put(row); + + const meta = tx.objectStore(STORES.meta); + void meta.clear(); + for (const row of next.db.meta) void meta.put(row); + + await tx.done; + }, + + async writeEquipment(rows: EquipmentRow[], undoRows: UndoRow[]): Promise { + const tx = db.transaction([STORES.equipment, STORES.undo], "readwrite"); + const equipment = tx.objectStore(STORES.equipment); + void equipment.clear(); + for (const row of rows) void equipment.put(row); + const undo = tx.objectStore(STORES.undo); + void undo.clear(); + for (const row of undoRows.slice(-UNDO_LIMIT)) void undo.put(row); + await tx.done; + }, + + close() { + db.close(); + }, + }; +} + +/** + * IndexedDB, then `localStorage`, then memory. + * + * Each tier is tried by *using* it, not by feature detection: on a `file://` + * page `indexedDB` is a defined global that throws on `open`, and `localStorage` + * can be present but throw on `setItem`. + */ +export async function createBestAdapter(): Promise { + try { + return createIdbAdapter(await openDatabase()); + } catch { + // Fall through. + } + try { + const storage = globalThis.localStorage; + const probe = "nte-optimizer:probe"; + storage.setItem(probe, "1"); + storage.removeItem(probe); + const { createLocalStorageAdapter } = await import("./local-storage.ts"); + return createLocalStorageAdapter(storage); + } catch { + // Fall through. + } + const { createMemoryAdapter } = await import("./memory.ts"); + return createMemoryAdapter(); +} diff --git a/src/db/adapters/local-storage.ts b/src/db/adapters/local-storage.ts new file mode 100644 index 0000000..f87f0dd --- /dev/null +++ b/src/db/adapters/local-storage.ts @@ -0,0 +1,74 @@ +/** + * The `file://` tier. + * + * Chrome gives a `file://` document an opaque origin, so IndexedDB is gone but + * `localStorage` sometimes survives. It is synchronous and small, so the whole + * database is one key and the snapshot is another - a snapshot is about a + * megabyte, which is most of the budget, so it is dropped first when the quota + * is hit rather than failing the write. + */ +import { emptyState, type PersistenceAdapter, type StoredState } from "./types.ts"; +import type { EquipmentRow, UndoRow } from "../schema.ts"; + +export const STATE_KEY = "nte-optimizer:state"; +export const SNAPSHOT_KEY = "nte-optimizer:snapshot"; + +export interface StorageLike { + getItem: (key: string) => string | null; + setItem: (key: string, value: string) => void; + removeItem: (key: string) => void; +} + +export function createLocalStorageAdapter(storage: StorageLike): PersistenceAdapter { + const readState = (): StoredState => { + const raw = storage.getItem(STATE_KEY); + if (!raw) return emptyState(); + try { + const parsed = JSON.parse(raw) as StoredState; + const snapshotRaw = storage.getItem(SNAPSHOT_KEY); + parsed.snapshot = snapshotRaw ? (JSON.parse(snapshotRaw) as StoredState["db"]) : null; + return parsed; + } catch { + // A corrupt value is not worth a crash on boot; start clean. + return emptyState(); + } + }; + + const write = (state: StoredState): void => { + const { snapshot, ...rest } = state; + try { + storage.setItem(STATE_KEY, JSON.stringify({ ...rest, snapshot: null })); + } catch (error) { + // Out of quota: the snapshot is the largest thing here and the least + // essential, so it goes before the database does. + storage.removeItem(SNAPSHOT_KEY); + storage.setItem(STATE_KEY, JSON.stringify({ ...rest, snapshot: null })); + throw error; + } + if (snapshot) { + try { + storage.setItem(SNAPSHOT_KEY, JSON.stringify(snapshot)); + } catch { + storage.removeItem(SNAPSHOT_KEY); + } + } else { + storage.removeItem(SNAPSHOT_KEY); + } + }; + + return { + kind: "localStorage", + durable: false, + async read() { + return readState(); + }, + async replaceAll(next) { + write(next); + }, + async writeEquipment(equipment: EquipmentRow[], undo: UndoRow[]) { + const state = readState(); + write({ ...state, db: { ...state.db, equipment }, undo }); + }, + close() {}, + }; +} diff --git a/src/db/adapters/memory.ts b/src/db/adapters/memory.ts new file mode 100644 index 0000000..696d490 --- /dev/null +++ b/src/db/adapters/memory.ts @@ -0,0 +1,21 @@ +/** Last resort: the state lives only as long as the tab does. */ +import { emptyState, type PersistenceAdapter, type StoredState } from "./types.ts"; +import type { EquipmentRow, UndoRow } from "../schema.ts"; + +export function createMemoryAdapter(initial?: StoredState): PersistenceAdapter { + let state = initial ?? emptyState(); + return { + kind: "memory", + durable: false, + async read() { + return structuredClone(state); + }, + async replaceAll(next) { + state = structuredClone(next); + }, + async writeEquipment(equipment: EquipmentRow[], undo: UndoRow[]) { + state = structuredClone({ ...state, db: { ...state.db, equipment }, undo }); + }, + close() {}, + }; +} diff --git a/src/db/adapters/types.ts b/src/db/adapters/types.ts new file mode 100644 index 0000000..990f564 --- /dev/null +++ b/src/db/adapters/types.ts @@ -0,0 +1,40 @@ +/** + * Where the database actually lives. + * + * Three tiers, one interface: IndexedDB normally, `localStorage` when a + * `file://` document's opaque origin denies IndexedDB, and memory when even that + * is refused. The app never sees through this - it asks for the state and hands + * back a new one - so the degraded modes cost nothing above the adapter beyond a + * banner telling the player their data is not durable. + */ +import type { Database, EquipmentRow, UndoRow } from "../schema.ts"; + +export interface StoredState { + db: Database; + undo: UndoRow[]; + /** The last pre-import dump. One click back from a wrong file. */ + snapshot: Database | null; +} + +export interface PersistenceAdapter { + readonly kind: "idb" | "localStorage" | "memory"; + /** False in the degraded tiers, where the UI must say so. */ + readonly durable: boolean; + read: () => Promise; + /** Replace everything atomically: import, or a database restore. */ + replaceAll: (state: StoredState) => Promise; + /** + * The frequent path. Equipping changes equipment and undo and nothing else, + * so rewriting 817 item rows for it would be pure waste. + */ + writeEquipment: (equipment: EquipmentRow[], undo: UndoRow[]) => Promise; + close: () => void; +} + +export function emptyState(): StoredState { + return { + db: { items: [], equipment: [], characters: [], ownerNames: [], meta: [] }, + undo: [], + snapshot: null, + }; +} diff --git a/src/db/dbfile.ts b/src/db/dbfile.ts new file mode 100644 index 0000000..8a8792f --- /dev/null +++ b/src/db/dbfile.ts @@ -0,0 +1,106 @@ +/** + * Database export and import - the "backend" without a backend. + * + * Deliberately separate from importing a game capture and labelled that way in + * the UI: a capture is the game telling you what you own, this is your whole + * workspace including everything you configured by hand. It is backup, moving + * between machines, sharing a snapshot - and it is the only persistence story + * the `file://` build has, where IndexedDB does not exist. + */ +import { DB_VERSION } from "./schema.ts"; +import { emptyState, type StoredState } from "./adapters/types.ts"; + +export const DBFILE_FORMAT = "nte-optimizer-db"; +export const DBFILE_VERSION = 1; + +export interface DbFile { + format: string; + format_version: number; + /** Schema version the rows were written against. */ + schema_version: number; + /** Which generated game data was in play, so a mismatch can be reported. */ + gamedata_version: string | null; + exported_at: number; + state: StoredState; +} + +export function exportDatabase( + state: StoredState, + gamedataVersion: string | null, + now = Date.now, +): DbFile { + return { + format: DBFILE_FORMAT, + format_version: DBFILE_VERSION, + schema_version: DB_VERSION, + gamedata_version: gamedataVersion, + exported_at: now(), + state: structuredClone(state), + }; +} + +export function fileName(now = new Date()): string { + const date = now.toISOString().slice(0, 10); + return `nte-db-${date}.json`; +} + +export interface DbFileImport { + ok: boolean; + problems: string[]; + state?: StoredState; + /** True when the file was written against an older schema. */ + migrated: boolean; +} + +/** + * Read a database file back. + * + * A file from a *newer* schema is refused rather than partially understood: the + * rows may carry fields this build would drop on the next write, and silently + * discarding the player's configuration is worse than refusing to open it. + */ +export function importDatabase(raw: unknown): DbFileImport { + const problems: string[] = []; + if (typeof raw !== "object" || raw === null) { + return { ok: false, problems: ["not an object"], migrated: false }; + } + const file = raw as Partial; + if (file.format !== DBFILE_FORMAT) { + return { ok: false, problems: [`not a database file: ${String(file.format)}`], migrated: false }; + } + if (file.format_version !== DBFILE_VERSION) { + return { + ok: false, + problems: [`unsupported file version ${String(file.format_version)}`], + migrated: false, + }; + } + const schema = file.schema_version ?? 0; + if (schema > DB_VERSION) { + return { + ok: false, + problems: [`written by a newer build (schema ${schema} > ${DB_VERSION})`], + migrated: false, + }; + } + if (typeof file.state !== "object" || file.state === null) { + return { ok: false, problems: ["no state"], migrated: false }; + } + + const base = emptyState(); + const state = file.state as Partial; + const merged: StoredState = { + db: { ...base.db, ...(state.db ?? {}) }, + undo: state.undo ?? [], + snapshot: state.snapshot ?? null, + }; + + for (const key of ["items", "equipment", "characters", "ownerNames", "meta"] as const) { + if (!Array.isArray(merged.db[key])) { + problems.push(`${key} is not a list`); + } + } + if (problems.length > 0) return { ok: false, problems, migrated: false }; + + return { ok: true, problems, state: merged, migrated: schema < DB_VERSION }; +} diff --git a/src/db/import.ts b/src/db/import.ts new file mode 100644 index 0000000..97c60ab --- /dev/null +++ b/src/db/import.ts @@ -0,0 +1,306 @@ +/** + * Turning a gear export into rows. + * + * **Fail closed.** Any error at all and nothing is written: a partially imported + * account is worse than a refused import, because the player cannot tell which + * half is stale. The report is diff-shaped on purpose - "817 expected, 811 + * parsed, 6 rejected" tells you something is wrong with the capture; a silent + * 811 does not. + * + * This module is pure. It parses, validates and normalises; it never touches + * IndexedDB, so it runs in a worker and in a test unchanged. + */ +import { SET_IDS } from "../domain/cartridges.ts"; +import { SHAPES } from "../domain/shapes.ts"; +import { isKnownStat } from "../domain/statvec.ts"; +import { + emptyCharacter, + type CharacterRow, + type EquipmentRow, + type ItemRow, +} from "./schema.ts"; + +export const EXPORT_FORMAT = "nte-gear-export"; +export const SUPPORTED_FORMAT_VERSION = 1; + +export interface ImportProblem { + code: string; + detail: string; + /** The item or character it concerns, when there is one. */ + subject?: string; +} + +export interface ImportReport { + /** How many item records the export claimed, from its own `scan` block. */ + expected: number | null; + parsed: number; + rejected: number; + problems: ImportProblem[]; +} + +export interface ImportResult { + ok: boolean; + report: ImportReport; + /** Only present when `ok` - there is nothing partial to apply. */ + rows?: { + items: ItemRow[]; + equipment: EquipmentRow[]; + characters: CharacterRow[]; + userUid: string | null; + serverId: string | null; + exporterVersion: string | null; + }; +} + +const isObject = (value: unknown): value is Record => + typeof value === "object" && value !== null && !Array.isArray(value); + +function statPairs( + raw: unknown, + problems: ImportProblem[], + subject: string, + allowNull: boolean, +): Array<{ stat: string; value: number | null }> | null { + if (!Array.isArray(raw)) { + problems.push({ code: "stats_not_a_list", detail: "expected a list", subject }); + return null; + } + const out: Array<{ stat: string; value: number | null }> = []; + for (const entry of raw) { + if (!isObject(entry) || typeof entry["stat"] !== "string") { + problems.push({ code: "stat_malformed", detail: "missing stat id", subject }); + return null; + } + const stat = entry["stat"]; + const value = entry["value"]; + if (!isKnownStat(stat)) { + // A stat the model has no slot for cannot be scored, so it cannot be + // silently kept either. + problems.push({ code: "unknown_stat", detail: stat, subject }); + return null; + } + if (value === null || value === undefined) { + if (!allowNull) { + problems.push({ code: "substat_without_value", detail: stat, subject }); + return null; + } + out.push({ stat, value: null }); + continue; + } + if (typeof value !== "number" || !Number.isFinite(value)) { + problems.push({ code: "stat_value_not_a_number", detail: stat, subject }); + return null; + } + out.push({ stat, value }); + } + return out; +} + +export function parseGearExport(raw: unknown): ImportResult { + const problems: ImportProblem[] = []; + const fail = (report?: Partial): ImportResult => ({ + ok: false, + report: { expected: null, parsed: 0, rejected: 0, problems, ...report }, + }); + + if (!isObject(raw)) return fail(); + if (raw["format"] !== EXPORT_FORMAT) { + problems.push({ code: "wrong_format", detail: String(raw["format"]) }); + return fail(); + } + if (raw["format_version"] !== SUPPORTED_FORMAT_VERSION) { + problems.push({ + code: "unsupported_format_version", + detail: String(raw["format_version"]), + }); + return fail(); + } + + const scan = isObject(raw["scan"]) ? raw["scan"] : null; + const expected = + scan && typeof scan["cartridges"] === "number" && typeof scan["modules"] === "number" + ? scan["cartridges"] + scan["modules"] + : null; + + const rawItems = raw["items"]; + if (!Array.isArray(rawItems)) { + problems.push({ code: "items_missing", detail: "no items list" }); + return fail({ expected }); + } + + const items: ItemRow[] = []; + const equipment: EquipmentRow[] = []; + const seen = new Set(); + const at = Date.now(); + const batchId = `import-${at}`; + let rejected = 0; + + for (const entry of rawItems) { + if (!isObject(entry)) { + rejected += 1; + problems.push({ code: "item_not_an_object", detail: "skipped" }); + continue; + } + const instance = entry["instance"]; + const itemId = entry["item_id"]; + const kind = entry["kind"]; + const subject = typeof instance === "string" ? instance : ""; + + if (typeof instance !== "string" || instance.length === 0) { + rejected += 1; + problems.push({ code: "item_without_instance", detail: String(itemId), subject }); + continue; + } + if (seen.has(instance)) { + // The primary key would silently overwrite; say so instead. + rejected += 1; + problems.push({ code: "duplicate_instance", detail: instance, subject }); + continue; + } + if (kind !== "module" && kind !== "cartridge") { + rejected += 1; + problems.push({ code: "unknown_kind", detail: String(kind), subject }); + continue; + } + if (typeof itemId !== "string") { + rejected += 1; + problems.push({ code: "item_without_id", detail: "missing item_id", subject }); + continue; + } + + const shape = typeof entry["shape"] === "string" ? entry["shape"] : null; + if (kind === "module" && (shape === null || !(shape in SHAPES))) { + rejected += 1; + problems.push({ code: "unknown_shape", detail: String(shape), subject }); + continue; + } + + const set = + kind === "cartridge" + ? (SET_IDS[itemId] ?? (typeof entry["set"] === "string" ? entry["set"] : null)) + : null; + if (kind === "cartridge" && set === null) { + rejected += 1; + problems.push({ code: "unknown_set", detail: itemId, subject }); + continue; + } + + const before = problems.length; + const mains = statPairs(entry["main_stats"], problems, subject, true); + const subs = statPairs(entry["substats"], problems, subject, false); + if (mains === null || subs === null || problems.length !== before) { + rejected += 1; + continue; + } + + const level = entry["level"]; + if (typeof level !== "number" || !Number.isInteger(level) || level < 0 || level > 20) { + rejected += 1; + problems.push({ code: "bad_level", detail: String(level), subject }); + continue; + } + + seen.add(instance); + items.push({ + instance, + kind, + itemId, + shape, + cells: shape ? SHAPES[shape as keyof typeof SHAPES].length : null, + set, + level, + rarity: typeof entry["rarity"] === "string" ? entry["rarity"] : "unknown", + mainStats: mains, + substats: subs as Array<{ stat: string; value: number }>, + }); + + const ownerGroup = entry["owner_group"]; + if (typeof ownerGroup === "string" && ownerGroup.length > 0) { + equipment.push({ + instance, + ownerGroup, + characterId: null, + cells: null, + origin: "imported", + batchId, + at, + }); + } + } + + const characters: CharacterRow[] = []; + const rawCharacters = raw["characters"]; + if (Array.isArray(rawCharacters)) { + for (const entry of rawCharacters) { + if (!isObject(entry) || typeof entry["key"] !== "string") { + problems.push({ code: "character_malformed", detail: "missing key" }); + continue; + } + const row = emptyCharacter(entry["key"]); + row.level = typeof entry["level"] === "number" ? entry["level"] : null; + row.breakthroughs = + typeof entry["breakthroughs"] === "number" ? entry["breakthroughs"] : null; + characters.push(row); + } + } + + // The count from the export's own scan block is the check that catches a + // truncated capture, which no per-record validation can see. + if (expected !== null && items.length + rejected !== expected) { + problems.push({ + code: "count_mismatch", + detail: `${expected} expected, ${items.length + rejected} present`, + }); + } + + const report: ImportReport = { + expected, + parsed: items.length, + rejected, + problems, + }; + + if (rejected > 0 || problems.length > 0) return { ok: false, report }; + + return { + ok: true, + report, + rows: { + items, + equipment, + characters, + userUid: typeof raw["user_uid"] === "string" ? raw["user_uid"] : null, + serverId: typeof raw["server_id"] === "string" ? raw["server_id"] : null, + exporterVersion: isObject(raw["exporter"]) + ? ((raw["exporter"]["version"] as string | undefined) ?? null) + : null, + }, + }; +} + +/** + * Merge imported character rows onto stored ones. + * + * Level and ascension come from the game and are refreshed; everything the + * player configured - Arc, refinement, effect toggles, build variant, custom + * targets - is theirs and survives. + */ +export function mergeCharacters( + stored: readonly CharacterRow[], + imported: readonly CharacterRow[], +): CharacterRow[] { + const byId = new Map(stored.map((row) => [row.characterId, row])); + const out: CharacterRow[] = []; + for (const row of imported) { + const previous = byId.get(row.characterId); + byId.delete(row.characterId); + out.push( + previous + ? { ...previous, level: row.level, breakthroughs: row.breakthroughs } + : row, + ); + } + // A character the capture did not mention is still the player's; keep it. + for (const remaining of byId.values()) out.push(remaining); + return out; +} diff --git a/src/db/schema.ts b/src/db/schema.ts new file mode 100644 index 0000000..213a55c --- /dev/null +++ b/src/db/schema.ts @@ -0,0 +1,137 @@ +/** + * The local database. + * + * One IndexedDB database, integer-versioned with explicit migrations. Treated as + * a **durable log, not a query engine**: everything is loaded into memory at + * boot - well under 5 MB at 817 items - and filtered and sorted in JS. Substat + * filters are not indexable in IndexedDB anyway, so one index carries the whole + * schema and it stops churning. + */ + +export const DB_NAME = "nte-optimizer"; +export const DB_VERSION = 1; + +export const STORES = { + /** Cleared and replaced on import. Keyed by `instance`. */ + items: "items", + /** + * Cleared and replaced on import. Keyed by `instance` too - an item is worn in + * exactly one place, so the primary key makes double-equipping structurally + * impossible rather than merely something to test for. + */ + equipment: "equipment", + /** + * Level and ascension are refreshed by import; the Arc, refinement, effect + * toggles, build variant, custom targets and priorities are preserved. + */ + characters: "characters", + /** Named once by the player and **never touched by import**. */ + ownerNames: "ownerNames", + /** Bounded ring of equipment changes. Cleared by import. */ + undo: "undo", + /** The last pre-import dump, so a wrong file is a click to undo. */ + snapshots: "snapshots", + meta: "meta", +} as const; + +export type StoreName = (typeof STORES)[keyof typeof STORES]; + +export const ITEM_KIND_INDEX = "by_kind"; + +export interface ItemRow { + instance: string; + kind: "module" | "cartridge"; + itemId: string; + shape: string | null; + cells: number | null; + set: string | null; + level: number; + rarity: string; + mainStats: Array<{ stat: string; value: number | null }>; + substats: Array<{ stat: string; value: number }>; +} + +export type EquipmentOrigin = "imported" | "app"; + +export interface EquipmentRow { + instance: string; + /** + * Resolved through `ownerNames` at read time and null when unknown. The + * character's name is **never** stored on the row: the owner group is exact, + * the name attached to it is a guess until the player makes it. + */ + ownerGroup: string | null; + characterId: string | null; + /** Board cells this item covers, or null when the capture did not say. */ + cells: number[] | null; + /** `imported` means the game says so; `app` means you have not done it yet. */ + origin: EquipmentOrigin; + /** Shared by every row written in one equip action, so undo is one entry. */ + batchId: string; + at: number; +} + +export interface CharacterRow { + characterId: string; + /** Refreshed by import. */ + level: number | null; + breakthroughs: number | null; + /** Preserved across imports. */ + arcId: string | null; + arcRefinement: number; + effectToggles: Record; + buildVariant: string | null; + customTargets: Array<{ stat: string; target: number; weight: number }> | null; + useCustom: boolean; + /** + * What the game actually shows, read off-team and typed in by the player. + * + * The stat model has measured gaps, so a permanent predicted-vs-actual panel + * is how drift gets caught by the player instead of being trusted silently. + */ + measuredSheet: Record | null; +} + +export interface OwnerNameRow { + ownerGroup: string; + characterId: string; + at: number; +} + +export interface UndoRow { + id?: number; + batchId: string; + before: EquipmentRow[]; + after: EquipmentRow[]; + at: number; +} + +export const UNDO_LIMIT = 50; + +export interface MetaRow { + key: string; + value: unknown; +} + +export interface Database { + items: ItemRow[]; + equipment: EquipmentRow[]; + characters: CharacterRow[]; + ownerNames: OwnerNameRow[]; + meta: MetaRow[]; +} + +export function emptyCharacter(characterId: string): CharacterRow { + return { + characterId, + level: null, + breakthroughs: null, + arcId: null, + arcRefinement: 0, + effectToggles: {}, + buildVariant: null, + customTargets: null, + useCustom: false, + measuredSheet: null, + }; +} diff --git a/src/db/store.ts b/src/db/store.ts new file mode 100644 index 0000000..939f977 --- /dev/null +++ b/src/db/store.ts @@ -0,0 +1,277 @@ +/** + * The in-memory mirror and the operations that change it. + * + * IndexedDB is the durable log; this is the query engine. Everything is loaded + * at boot - well under 5 MB - and filtered and sorted in JS, because substat + * filters are not indexable in IndexedDB anyway. + */ +import { mergeCharacters, type ImportResult } from "./import.ts"; +import { + UNDO_LIMIT, + type Database, + type EquipmentRow, + type ItemRow, + type OwnerNameRow, + type UndoRow, +} from "./schema.ts"; +import type { PersistenceAdapter, StoredState } from "./adapters/types.ts"; + +/** How many cells a complete board covers. */ +export const BOARD_CELLS = 20; + +export interface EquipOptions { + /** Cells each instance covers, when a packing decided them. */ + cells?: Record; + now?: () => number; + newBatchId?: () => string; +} + +export interface EquipOutcome { + state: StoredState; + /** + * Characters left with a hole because this equip took an item they were + * wearing. Their build is `incomplete` - covered cells no longer total 20 - + * and the confirmation dialog has to name them and the piece before it runs. + */ + displaced: Array<{ characterId: string; instances: string[] }>; +} + +/** The character wearing a row: stored directly, or resolved through the group. */ +export function resolveCharacter( + row: EquipmentRow, + ownerNames: readonly OwnerNameRow[], +): string | null { + if (row.characterId) return row.characterId; + if (!row.ownerGroup) return null; + return ownerNames.find((name) => name.ownerGroup === row.ownerGroup)?.characterId ?? null; +} + +export function equipmentOf( + db: Database, + characterId: string, +): EquipmentRow[] { + return db.equipment.filter((row) => resolveCharacter(row, db.ownerNames) === characterId); +} + +/** Covered cells, when the rows carry them. A complete build totals 20. */ +export function coveredCells(rows: readonly EquipmentRow[]): number { + let total = 0; + for (const row of rows) total += row.cells?.length ?? 0; + return total; +} + +export function isComplete(rows: readonly EquipmentRow[]): boolean { + return coveredCells(rows) === BOARD_CELLS; +} + +/** + * Rows the player has not actually applied in game yet. + * + * `origin` does all the work: after the next import these vanish on their own, + * because either you did it or you didn't. There is no reconciliation logic and + * there does not need to be. + */ +export function todoInGame(db: Database): Map { + const out = new Map(); + for (const row of db.equipment) { + if (row.origin !== "app") continue; + const character = resolveCharacter(row, db.ownerNames) ?? ""; + const bucket = out.get(character); + if (bucket) bucket.push(row); + else out.set(character, [row]); + } + return out; +} + +/** + * Correct one item by hand. + * + * The decode is good but not infallible, and a player who spots a wrong value + * needs to fix it rather than work around it. The edit is stored like any other + * row, so the **next import overwrites it** - which is right: the import is the + * game speaking, and a correction that outlived the thing it corrected would be + * worse than losing it. + */ +export function editItem( + state: StoredState, + instance: string, + patch: Partial>, +): StoredState { + const items = state.db.items.map((row) => + row.instance === instance ? { ...row, ...patch, instance } : row, + ); + return { ...state, db: { ...state.db, items } }; +} + +/** + * Instances worn by anyone other than these characters. + * + * This is R2's toggle turned **off**: no item may be taken from another + * character. With the toggle on the solve sees the whole pool, which is why the + * team solve has to name whoever is left with a hole. + * + * An item with no resolvable owner is *not* excluded: the capture says it is + * worn, but until the player names that owner group it belongs to nobody the app + * can reason about, and locking it away would hide most of the pool. + */ +export function heldByOthers( + db: Database, + characterIds: readonly string[], +): string[] { + const mine = new Set(characterIds); + const out: string[] = []; + for (const row of db.equipment) { + const owner = resolveCharacter(row, db.ownerNames); + if (owner !== null && !mine.has(owner)) out.push(row.instance); + } + return out; +} + +/** + * Apply an import. + * + * Items and equipment are replaced outright; the pre-import snapshot is taken + * first; character configuration is merged rather than overwritten; owner names + * are left completely alone; undo is cleared, because its rows refer to items + * that may no longer exist. + */ +export function applyImport( + state: StoredState, + result: ImportResult, + now = Date.now, +): StoredState { + if (!result.ok || !result.rows) throw new Error("refusing to apply a failed import"); + const { items, equipment, characters, userUid, serverId, exporterVersion } = result.rows; + + const meta = state.db.meta.filter( + (row) => !["lastImport", "userUid", "serverId", "exporterVersion"].includes(row.key), + ); + meta.push( + { key: "lastImport", value: now() }, + { key: "userUid", value: userUid }, + { key: "serverId", value: serverId }, + { key: "exporterVersion", value: exporterVersion }, + ); + + return { + snapshot: structuredClone(state.db), + undo: [], + db: { + items, + equipment, + characters: mergeCharacters(state.db.characters, characters), + ownerNames: state.db.ownerNames, + meta, + }, + }; +} + +/** + * Equip a set of items on one character, as one atomic change. + * + * Both sides of the move go into a **single** undo entry: the character's old + * rows and any rows taken from someone else. One undo then restores both, which + * is the only behaviour that is not surprising. + */ +export function equip( + state: StoredState, + characterId: string, + instances: readonly string[], + options: EquipOptions = {}, +): EquipOutcome { + const now = options.now ?? Date.now; + const at = now(); + const batchId = options.newBatchId?.() ?? `equip-${at}-${characterId}`; + const wanted = new Set(instances); + + const before: EquipmentRow[] = []; + const displacedBy = new Map(); + + const kept = state.db.equipment.filter((row) => { + const owner = resolveCharacter(row, state.db.ownerNames); + if (owner === characterId) { + before.push(row); + return false; + } + if (wanted.has(row.instance)) { + before.push(row); + if (owner) { + const bucket = displacedBy.get(owner); + if (bucket) bucket.push(row.instance); + else displacedBy.set(owner, [row.instance]); + } + return false; + } + return true; + }); + + const after: EquipmentRow[] = instances.map((instance) => ({ + instance, + ownerGroup: null, + characterId, + cells: options.cells?.[instance] ?? null, + origin: "app", + batchId, + at, + })); + + const undo: UndoRow[] = [...state.undo, { batchId, before, after, at }].slice(-UNDO_LIMIT); + + return { + state: { ...state, db: { ...state.db, equipment: [...kept, ...after] }, undo }, + displaced: [...displacedBy].map(([id, list]) => ({ characterId: id, instances: list })), + }; +} + +/** Reverse the most recent equip, both sides of it. */ +export function undoLast(state: StoredState): StoredState { + const entry = state.undo[state.undo.length - 1]; + if (!entry) return state; + const removed = new Set(entry.after.map((row) => row.instance)); + const equipment = state.db.equipment.filter((row) => !removed.has(row.instance)); + const restored = entry.before.filter( + (row) => !equipment.some((existing) => existing.instance === row.instance), + ); + return { + ...state, + db: { ...state.db, equipment: [...equipment, ...restored] }, + undo: state.undo.slice(0, -1), + }; +} + +/** + * Name an owner group. + * + * Keyed by the group, which is stable across exports, so this is answered once + * ever rather than once per import - and the name is never written onto an + * equipment row. + */ +export function nameOwnerGroup( + state: StoredState, + ownerGroup: string, + characterId: string, + now = Date.now, +): StoredState { + const ownerNames = state.db.ownerNames.filter((row) => row.ownerGroup !== ownerGroup); + ownerNames.push({ ownerGroup, characterId, at: now() }); + return { ...state, db: { ...state.db, ownerNames } }; +} + +/** Groups the capture found that nobody has named yet. */ +export function unnamedGroups(db: Database): string[] { + const named = new Set(db.ownerNames.map((row) => row.ownerGroup)); + const groups = new Set(); + for (const row of db.equipment) { + if (row.ownerGroup && !named.has(row.ownerGroup)) groups.add(row.ownerGroup); + } + return [...groups].sort(); +} + +export async function persist( + adapter: PersistenceAdapter, + state: StoredState, + scope: "all" | "equipment", +): Promise { + if (scope === "all") await adapter.replaceAll(state); + else await adapter.writeEquipment(state.db.equipment, state.undo); +} diff --git a/src/domain/arcs.ts b/src/domain/arcs.ts new file mode 100644 index 0000000..c5dd9ab --- /dev/null +++ b/src/domain/arcs.ts @@ -0,0 +1,153 @@ +/** + * What an Arc contributes. + * + * Two separate things, and they behave differently: + * + * 1. Its **own stat line** (`stats`), indexed by the Arc's level 1..80. Every + * Arc carries flat `AtkBase` plus one secondary stat. + * 2. Its **effect placeholders** (`values`), indexed by refinement 1..5. These + * are only usable when `data/arc_effects.json` classifies them, because the + * game data gives 104 of the 144 placeholders an empty `id_stats` and no way + * to tell a stat from a cooldown. + * + * The classification decides the control, not a guess about the text: + * `always` is unconditional, `toggle` is a checkbox, `stacks` is a 0..N count, + * and `duration` and `unmodellable` are never scored at all - they are reported + * so the UI can say what it is leaving out rather than silently dropping it. + */ +import type { Arc, ArcEffect, ArcEffectMode, GameData } from "../state/gamedata.ts"; +import { emptyVector, slotOf } from "./statvec.ts"; + +export const MAX_ARC_LEVEL = 80; +export const MAX_REFINEMENT = 5; + +export interface ArcConfig { + arcId: string; + /** 1..80. */ + level: number; + /** 1..5. */ + refinement: number; + /** + * Per placeholder index: `true`/`false` for a toggle, a count for stacks. + * Missing means the effect's own default. + */ + toggles?: Record; +} + +export interface ArcContribution { + vector: Float32Array; + /** Effects deliberately not scored, so the UI can say so. */ + omitted: Array<{ placeholder: number; mode: ArcEffectMode; why: string }>; + /** Stats the model has no slot for. Should stay empty; a warning if not. */ + unknownStats: string[]; +} + +interface RawStatCurve { + id_stats: string; + bIsPercent: boolean; + values: number[]; +} + +interface RawValue { + id_value: number; + id_stats: string; + bIsPercent: boolean; + values: Array; +} + +/** `"12%"` is 0.12; a bare number is itself. */ +export function parseArcValue(raw: string | number, percent: boolean): number { + if (typeof raw === "number") return percent ? raw / 100 : raw; + const trimmed = raw.trim(); + const numeric = Number.parseFloat(trimmed.replace("%", "")); + if (!Number.isFinite(numeric)) return 0; + return trimmed.endsWith("%") || percent ? numeric / 100 : numeric; +} + +export function arcContribution( + arc: Arc, + effects: GameData["arcEffects"][string] | undefined, + config: ArcConfig, +): ArcContribution { + const vector = emptyVector(); + const omitted: ArcContribution["omitted"] = []; + const unknownStats: string[] = []; + + const level = Math.min(Math.max(Math.round(config.level), 1), MAX_ARC_LEVEL); + const refinement = Math.min(Math.max(Math.round(config.refinement), 1), MAX_REFINEMENT); + + const add = (stat: string, value: number): void => { + const slot = slotOf(stat); + if (slot < 0) { + if (stat && !unknownStats.includes(stat)) unknownStats.push(stat); + return; + } + vector[slot] = vector[slot]! + value; + }; + + for (const curve of (arc.stats ?? []) as RawStatCurve[]) { + const raw = curve.values?.[level - 1]; + if (raw === undefined) continue; + add(curve.id_stats, curve.bIsPercent ? raw / 100 : raw); + } + + const byPlaceholder = new Map( + (effects?.effects ?? []).map((effect) => [effect.placeholder, effect]), + ); + + for (const entry of (arc.values ?? []) as RawValue[]) { + const effect = byPlaceholder.get(entry.id_value); + const mode: ArcEffectMode = effect?.mode ?? "unmodellable"; + const raw = entry.values?.[refinement - 1]; + + if (mode === "duration" || mode === "unmodellable" || !entry.id_stats || raw === undefined) { + omitted.push({ + placeholder: entry.id_value, + mode, + why: effect?.why ?? "no stat id in the game data", + }); + continue; + } + + const value = parseArcValue(raw, entry.bIsPercent); + const setting = config.toggles?.[entry.id_value]; + + if (mode === "always") { + add(entry.id_stats, value); + continue; + } + if (mode === "toggle") { + const on = typeof setting === "boolean" ? setting : (effect?.default ?? false); + if (on) add(entry.id_stats, value); + else omitted.push({ placeholder: entry.id_value, mode, why: "toggled off" }); + continue; + } + // stacks + const count = typeof setting === "number" ? Math.max(0, Math.round(setting)) : 0; + if (count > 0) add(entry.id_stats, value * count); + else omitted.push({ placeholder: entry.id_value, mode, why: "no stacks assumed" }); + } + + return { vector, omitted, unknownStats }; +} + +/** The controls a UI needs for one Arc, in placeholder order. */ +export function arcControls( + arc: Arc, + effects: GameData["arcEffects"][string] | undefined, +): Array<{ placeholder: number; mode: ArcEffectMode; stat: string; why: string }> { + const byPlaceholder = new Map( + (effects?.effects ?? []).map((effect) => [effect.placeholder, effect]), + ); + return ((arc.values ?? []) as RawValue[]) + .map((entry) => { + const effect = byPlaceholder.get(entry.id_value); + return { + placeholder: entry.id_value, + mode: effect?.mode ?? ("unmodellable" as ArcEffectMode), + stat: entry.id_stats, + why: effect?.why ?? "", + }; + }) + .filter((control) => control.mode === "toggle" || control.mode === "stacks"); +} diff --git a/src/domain/board.ts b/src/domain/board.ts new file mode 100644 index 0000000..bc2826e --- /dev/null +++ b/src/domain/board.ts @@ -0,0 +1,132 @@ +/** + * Board geometry and packing. + * + * A board is the character's console grid: everness ships it as a 7x7 matrix + * with -1 blocked and 0 free. Every character's grid has 20 free cells. + * + * Positions never affect score - only the shape multiset does, via set tier and + * console trait - so packing is decided once, offline, and the runtime only + * ever looks up one canonical placement per multiset for rendering. + */ +import { SHAPES, SHAPE_IDS, sizeOf, type Cell, type ShapeId } from "./shapes.ts"; + +export type BoardCells = readonly number[]; +export interface Board { + /** Free cells as row * 7 + col, ascending. */ + cells: BoardCells; + rows: number; + cols: number; +} + +export const GRID = 7; + +export function boardFromSlots(slots: readonly (readonly number[])[]): Board { + const cells: number[] = []; + for (let row = 0; row < slots.length; row += 1) { + const line = slots[row]!; + for (let col = 0; col < line.length; col += 1) { + if (line[col] === 0) cells.push(row * GRID + col); + } + } + return { cells, rows: slots.length, cols: slots[0]?.length ?? GRID }; +} + +/** A stable identity for a board, so identical grids share one tiling table. */ +export function boardKey(board: Board): string { + return board.cells.join(","); +} + +/** Every translation of a shape that lands entirely on the board. */ +export function placements(shape: ShapeId, board: Board): number[][] { + const free = new Set(board.cells); + const offsets = SHAPES[shape] as readonly Cell[]; + const out: number[][] = []; + for (let dr = 0; dr < board.rows; dr += 1) { + for (let dc = 0; dc < board.cols; dc += 1) { + const placed: number[] = []; + let ok = true; + for (const [r, c] of offsets) { + const row = r + dr; + const col = c + dc; + if (col >= GRID) { ok = false; break; } + const index = row * GRID + col; + if (!free.has(index)) { ok = false; break; } + placed.push(index); + } + if (ok) out.push(placed.sort((a, b) => a - b)); + } + } + return out; +} + +export interface Placement { + shape: ShapeId; + cells: number[]; +} + +/** + * Exact-cover the board with the given shapes, or null. + * + * Always fills the lowest free cell next, so the search never explores two + * orderings of the same placement set. + */ +export function tile(board: Board, multiset: readonly ShapeId[]): Placement[] | null { + const ordered = [...multiset].sort(); + const options = new Map(); + for (const shape of new Set(ordered)) options.set(shape, placements(shape, board)); + + const free = new Set(board.cells); + const order = [...board.cells]; + const placed: Placement[] = []; + + const solve = (remaining: readonly ShapeId[]): boolean => { + if (remaining.length === 0) return free.size === 0; + const target = order.find((cell) => free.has(cell)); + if (target === undefined) return false; + for (let i = 0; i < remaining.length; i += 1) { + const shape = remaining[i]!; + // Identical shapes are interchangeable; trying the second is wasted work. + if (i > 0 && shape === remaining[i - 1]) continue; + const rest = remaining.slice(0, i).concat(remaining.slice(i + 1)); + for (const spot of options.get(shape)!) { + if (!spot.includes(target)) continue; + let fits = true; + for (const cell of spot) { + if (!free.has(cell)) { fits = false; break; } + } + if (!fits) continue; + for (const cell of spot) free.delete(cell); + placed.push({ shape, cells: spot }); + if (solve(rest)) return true; + placed.pop(); + for (const cell of spot) free.add(cell); + } + } + return false; + }; + + return solve(ordered) ? placed : null; +} + +/** + * Shape multisets whose cells total exactly `freeCells`. + * + * Sizes are 2, 3 and 4, so a multiset covering 8 cells holds 2 to 4 pieces - + * which is why a full build is 6, 7 or 8 modules and never always 7. + */ +export function fillers(freeCells: number): ShapeId[][] { + const found: ShapeId[][] = []; + const walk = (start: number, left: number, current: ShapeId[]): void => { + if (left === 0) { found.push([...current]); return; } + for (let i = start; i < SHAPE_IDS.length; i += 1) { + const shape = SHAPE_IDS[i]!; + const size = sizeOf(shape); + if (size > left) continue; + current.push(shape); + walk(i, left - size, current); + current.pop(); + } + }; + walk(0, freeCells, []); + return found; +} diff --git a/src/domain/cartridges.ts b/src/domain/cartridges.ts new file mode 100644 index 0000000..6ced849 --- /dev/null +++ b/src/domain/cartridges.ts @@ -0,0 +1,65 @@ +/** + * Cartridge sets: the four module shapes each one needs to switch its bonuses on. + * + * A set needs four *specific distinct* shapes - not four of a type. Every set's + * four shapes total exactly 12 cells, so on a 20-cell board the requirement + * fixes 12 cells and leaves 8 free. That is the optimizer's search space. + * + * Bonus tiers count how many *distinct* required shapes are on the board, in any + * order and any position. Duplicates do not count twice. + */ +import type { ShapeId } from "./shapes.ts"; + +export type SetName = keyof typeof REQUIRED_PIECES; + +export const REQUIRED_PIECES = { + "Crimson: Twin Butterflies": ["cell2_style2", "cell3_style1", "cell3_style6", "cell4_style5"], + "Devil's Blood: Curse": ["cell2_style2", "cell3_style2", "cell3_style4", "cell4_style6"], + Diabolos: ["cell2_style2", "cell3_style4", "cell3_style6", "cell4_style1"], + "Fireflies and the Forest": ["cell2_style1", "cell3_style2", "cell3_style3", "cell4_style6"], + "Kingdom's Guard": ["cell3_style1", "cell3_style2", "cell3_style5", "cell3_style6"], + "Lost Radiance": ["cell2_style1", "cell3_style3", "cell3_style5", "cell4_style2"], + "Quiet Manor": ["cell2_style1", "cell2_style2", "cell4_style2", "cell4_style6"], + "Shadow Creed": ["cell2_style1", "cell2_style2", "cell4_style1", "cell4_style6"], + "Speedy Hedgehog": ["cell3_style3", "cell3_style4", "cell3_style5", "cell3_style6"], + "Street Boxer": ["cell2_style1", "cell3_style1", "cell3_style5", "cell4_style5"], + "Thea's Night Tavern": ["cell3_style1", "cell3_style2", "cell3_style3", "cell3_style4"], + "Tiny Big Adventure": ["cell2_style1", "cell2_style2", "cell4_style1", "cell4_style5"], +} as const satisfies Record; + +export const SET_NAMES = Object.keys(REQUIRED_PIECES) as SetName[]; + +/** + * Set ids as the packets spell them, confirmed against everness's cartridge + * boxes (`Testeqbox_`) - the only source that names the three sets this + * account does not own. Those three are Psyche, Shield and Heal; an earlier + * guess of Blood, Night and Kingdom was wrong on all three. + */ +export const SET_IDS: Record = { + Attack_orange: "Shadow Creed", + Chaos_orange: "Diabolos", + Cosmos_orange: "Lost Radiance", + GetEfficiency_orange: "Speedy Hedgehog", + Incantation_orange: "Crimson: Twin Butterflies", + Lakshana_orange: "Street Boxer", + Nature_orange: "Fireflies and the Forest", + Psychically_orange: "Quiet Manor", + Mag_orange: "Tiny Big Adventure", + // Not owned, so never yet seen in a capture. + Psyche_orange: "Devil's Blood: Curse", + Heal_orange: "Thea's Night Tavern", + Shield_orange: "Kingdom's Guard", +}; + +export type Tier = 2 | 4; + +/** Which bonus tiers a board unlocks: [], [2] or [2, 4]. */ +export function activeTiers(set: SetName, shapesOnBoard: Iterable): Tier[] { + const required = new Set(REQUIRED_PIECES[set]); + const present = new Set(); + for (const shape of shapesOnBoard) { + if (required.has(shape)) present.add(shape); + } + if (present.size >= 4) return [2, 4]; + return present.size >= 2 ? [2] : []; +} diff --git a/src/domain/guides.ts b/src/domain/guides.ts new file mode 100644 index 0000000..0ab3f88 --- /dev/null +++ b/src/domain/guides.ts @@ -0,0 +1,85 @@ +/** + * Published build guidance: targets and a ranked substat priority per character. + * + * The **weights the solver runs with come from the ranking**, not from a number + * somebody typed. A rank is what a guide actually publishes; inventing weights + * from it in one place keeps every character on the same scale. + * + * `data-src/guides.json` is committed and human-reviewed. Nothing is scraped at + * runtime: CORS forbids it, and a site redesign should break a script somebody + * runs deliberately rather than the app in a player's hands. + */ +import { isKnownStat, type StatId } from "./statvec.ts"; +import type { StatTarget } from "./scoring.ts"; + +export interface GuideVariant { + /** "Main DPS", "SubDPS", "Break", "DoT" - a character can have several. */ + name: string; + /** Recommended endgame stats: a floor to reach, not a ceiling. */ + targets: Array<{ stat: string; target: number }>; + /** Substat priority, best first. */ + priority: string[]; +} + +export interface CharacterGuide { + /** The `GA__*` ability key, so it joins to a capture directly. */ + key: string; + source: string; + updated: string; + variants: GuideVariant[]; +} + +export interface GuideTable { + format: string; + format_version: number; + characters: CharacterGuide[]; +} + +/** + * Rank to weight. + * + * Linear from `top` down to 1: rank 1 is worth `top`, and the last ranked stat + * is still worth something. A geometric curve would make anything past third + * place worthless, which is not what "priority" means on a guide - the lower + * ranks are where a shortfall is *supposed* to land, not stats to ignore. + */ +export const TOP_WEIGHT = 5; + +export function weightForRank(rank: number, total: number): number { + if (total <= 1) return TOP_WEIGHT; + const step = (TOP_WEIGHT - 1) / (total - 1); + return TOP_WEIGHT - step * rank; +} + +/** The scoring targets a variant implies. */ +export function targetsFromGuide(variant: GuideVariant): StatTarget[] { + const ranked = variant.priority.filter(isKnownStat); + const rankOf = new Map(ranked.map((stat, index) => [stat, index])); + + const out: StatTarget[] = []; + for (const entry of variant.targets) { + if (!isKnownStat(entry.stat)) continue; + const rank = rankOf.get(entry.stat); + out.push({ + stat: entry.stat as StatId, + target: entry.target, + // A stat with a target but no place in the ranking still matters; it just + // sits at the bottom rather than being dropped. + weight: rank === undefined ? 1 : weightForRank(rank, ranked.length), + }); + } + return out; +} + +export function guideFor(table: GuideTable, key: string): CharacterGuide | null { + return table.characters.find((entry) => entry.key === key) ?? null; +} + +export function variantFor( + guide: CharacterGuide | null, + name: string | null, +): GuideVariant | null { + if (!guide || guide.variants.length === 0) return null; + if (name) return guide.variants.find((variant) => variant.name === name) ?? guide.variants[0]!; + return guide.variants[0]!; +} diff --git a/src/domain/items.ts b/src/domain/items.ts new file mode 100644 index 0000000..1c13cba --- /dev/null +++ b/src/domain/items.ts @@ -0,0 +1,136 @@ +/** + * The owned pool, as the solver wants it. + * + * An export gives items as records with named stats. The solver wants one flat + * `Float32Array` and integer indices into it, so this is the one place the two + * representations meet. Nothing downstream of here handles a stat by name. + */ +import { SET_IDS, type SetName } from "./cartridges.ts"; +import type { ShapeId } from "./shapes.ts"; +import { SHAPES } from "./shapes.ts"; +import { emptyPool, poolSlice, vectorFrom, type StatPair } from "./statvec.ts"; + +/** One item as an export spells it. */ +export interface ExportedItem { + instance: string; + kind: "module" | "cartridge"; + item_id: string; + // Explicitly `| undefined`: `exactOptionalPropertyTypes` otherwise refuses a + // value built by spreading a row whose field may be absent. + shape?: string | undefined; + module_type?: string | undefined; + set?: string | undefined; + level: number; + rarity: string; + main_stats: StatPair[]; + substats: StatPair[]; + owner_group: string | null; +} + +export interface OwnedItem { + instance: string; + kind: "module" | "cartridge"; + itemId: string; + /** Modules only. */ + shape: ShapeId | null; + /** 2, 3 or 4. Modules only. */ + cells: number | null; + /** Cartridges only. */ + set: SetName | null; + level: number; + rarity: string; + ownerGroup: string | null; + /** Index into the pool's flat vector array. */ + index: number; + /** + * The cartridge's main stat, which enters scoring only as a tiebreak. Null + * for modules, whose mains are fixed by cell count and carry no choice. + */ + mainStat: string | null; +} + +export interface ItemPool { + items: OwnedItem[]; + /** `items.length * SLOT_COUNT` values, laid end to end. */ + vectors: Float32Array; + modulesByShape: Map; + cartridgesBySet: Map; + /** Items an import says are already worn, by owner group. */ + equippedByOwner: Map; + /** Item ids the decoder emitted that this build has no shape for. */ + unknownShapes: string[]; +} + +const isShapeId = (value: string): value is ShapeId => value in SHAPES; + +/** + * Build the pool. + * + * Level is deliberately not a filter: substat values are identical at +0 and + * +20, so an unlevelled item is a valid recommendation and the UI shows its + * level rather than the solver hiding it. + */ +export function buildPool(exported: readonly ExportedItem[]): ItemPool { + const items: OwnedItem[] = []; + const vectors = emptyPool(exported.length); + const modulesByShape = new Map(); + const cartridgesBySet = new Map(); + const equippedByOwner = new Map(); + const unknownShapes: string[] = []; + + exported.forEach((raw, index) => { + const shape = raw.shape && isShapeId(raw.shape) ? raw.shape : null; + if (raw.kind === "module" && shape === null) unknownShapes.push(raw.item_id); + + const set = + raw.kind === "cartridge" + ? (SET_IDS[raw.item_id] ?? (raw.set as SetName | undefined) ?? null) + : null; + + vectorFrom(raw.main_stats, poolSlice(vectors, index)); + vectorFrom(raw.substats, poolSlice(vectors, index)); + + const item: OwnedItem = { + instance: raw.instance, + kind: raw.kind, + itemId: raw.item_id, + shape, + cells: shape ? SHAPES[shape].length : null, + set, + level: raw.level, + rarity: raw.rarity, + ownerGroup: raw.owner_group, + index, + mainStat: raw.kind === "cartridge" ? (raw.main_stats[0]?.stat ?? null) : null, + }; + items.push(item); + + if (item.kind === "module" && shape) { + const bucket = modulesByShape.get(shape); + if (bucket) bucket.push(index); + else modulesByShape.set(shape, [index]); + } + if (item.kind === "cartridge" && set) { + const bucket = cartridgesBySet.get(set); + if (bucket) bucket.push(index); + else cartridgesBySet.set(set, [index]); + } + if (item.ownerGroup) { + const bucket = equippedByOwner.get(item.ownerGroup); + if (bucket) bucket.push(index); + else equippedByOwner.set(item.ownerGroup, [index]); + } + }); + + return { items, vectors, modulesByShape, cartridgesBySet, equippedByOwner, unknownShapes }; +} + +/** Indices of every module of a shape, minus anything excluded. */ +export function availableModules( + pool: ItemPool, + shape: ShapeId, + excluded: ReadonlySet, +): number[] { + const all = pool.modulesByShape.get(shape) ?? []; + return excluded.size === 0 ? all : all.filter((index) => !excluded.has(index)); +} diff --git a/src/domain/render.ts b/src/domain/render.ts new file mode 100644 index 0000000..6762cab --- /dev/null +++ b/src/domain/render.ts @@ -0,0 +1,76 @@ +/** + * Turning a packing into something drawable. + * + * The result view has to read as blocks, not as a grid of squares: borders are + * drawn only on the edges facing a *different* piece, so each polyomino looks + * like one object rather than three or four cells that happen to share a colour. + * That is the whole point of the visual - the player looks at a block, reads its + * stats, and finds the matching module in their own inventory list. + */ +import { GRID } from "./board.ts"; + +export interface RenderedCell { + cell: number; + row: number; + col: number; + /** Index of the piece covering this cell, or -1 for a free board cell. */ + piece: number; + /** Draw a border on this side: the neighbour is a different piece or off-board. */ + top: boolean; + right: boolean; + bottom: boolean; + left: boolean; +} + +export interface BoardRender { + cells: RenderedCell[]; + rows: number; + cols: number; +} + +/** + * `cells` are the board's free cells ascending; `placement[i]` is the piece + * covering `cells[i]`, matching `Tiling`. + */ +export function renderBoard( + cells: readonly number[], + placement: readonly number[], +): BoardRender { + const pieceAt = new Map(); + cells.forEach((cell, index) => pieceAt.set(cell, placement[index] ?? -1)); + + const samePiece = (cell: number, deltaRow: number, deltaCol: number): boolean => { + const row = Math.floor(cell / GRID) + deltaRow; + const col = (cell % GRID) + deltaCol; + // A move off the grid is not a neighbour, so that side always gets a border. + if (row < 0 || row >= GRID || col < 0 || col >= GRID) return false; + const neighbour = pieceAt.get(row * GRID + col); + return neighbour !== undefined && neighbour === pieceAt.get(cell); + }; + + const rendered = cells.map((cell, index) => ({ + cell, + row: Math.floor(cell / GRID), + col: cell % GRID, + piece: placement[index] ?? -1, + top: !samePiece(cell, -1, 0), + right: !samePiece(cell, 0, 1), + bottom: !samePiece(cell, 1, 0), + left: !samePiece(cell, 0, -1), + })); + + return { cells: rendered, rows: GRID, cols: GRID }; +} + +/** + * Distinct hues per piece, evenly spaced round the wheel. + * + * A build is 6 to 8 pieces, so an even split keeps neighbours far apart in hue + * without needing a hand-tuned palette that would break as soon as a build had + * one more piece than the palette had entries. + */ +export function pieceColour(piece: number, total: number): string { + if (piece < 0) return "transparent"; + const hue = Math.round((360 / Math.max(total, 1)) * piece); + return `hsl(${hue} 62% 55%)`; +} diff --git a/src/domain/scoring.ts b/src/domain/scoring.ts new file mode 100644 index 0000000..ef6e8fa --- /dev/null +++ b/src/domain/scoring.ts @@ -0,0 +1,220 @@ +/** + * The objective. + * + * Targets are Prydwen's recommended endgame stats - a floor to reach, not a + * ceiling - so each stat's attainment saturates at `min(value / target, 1)` and + * the score is the weighted mean of those attainments. Weights come from the + * character's published substat ranking, so where the targets cannot all be met + * the shortfall lands on the lowest-ranked stats by construction. + * + * Saturation has a consequence worth stating plainly: **once every target is + * cleared, every build ties at 1.0** and the winner is decided entirely by the + * tie-breakers below. Both are therefore per-stat, configurable and rendered - + * never a hidden constant. + * + * There is no damage model here. Without rotation or ability-multiplier data, + * anything claiming to maximise DPS would be inventing numbers. + */ +import { SLOT_COUNT, STAT_SLOTS, slotOf, type StatId } from "./statvec.ts"; + +export interface StatTarget { + stat: StatId; + /** The floor to reach. A target of 0 means "no target": weight is ignored. */ + target: number; + /** Relative importance, from the substat ranking. Any positive scale. */ + weight: number; + /** + * Credit for exceeding the target, as a fraction of this stat's own weight. + * 0 disables it; the default is small on purpose, so overshoot breaks ties + * rather than competing with reaching a target at all. + */ + overshoot?: number; +} + +export interface ScoringConfig { + targets: StatTarget[]; + /** + * How far past a target overshoot keeps paying, as a multiple of the target. + * 1 means credit runs out at double the target. + */ + overshootCap?: number; + /** + * The cartridge main-stat ranking is only a tiebreak - substats dominate - so + * it enters as an explicit epsilon rather than as a weight. Without a term + * like this the rule is not implementable at all. + */ + mainStatEpsilon?: number; + /** Published main-stat preference, 1 best down to 0. */ + mainStatRank?: Partial>; +} + +export interface CompiledScoring { + targets: Float32Array; + weights: Float32Array; + overshoot: Float32Array; + overshootCap: number; + mainStatEpsilon: number; + mainStatRank: Float32Array; + /** Sum of weights, so the score lands in 0..1 before tie-breakers. */ + weightSum: number; +} + +export const DEFAULT_OVERSHOOT = 0.1; +export const DEFAULT_OVERSHOOT_CAP = 1; +export const DEFAULT_MAIN_STAT_EPSILON = 0.001; + +export function compile(config: ScoringConfig): CompiledScoring { + const targets = new Float32Array(SLOT_COUNT); + const weights = new Float32Array(SLOT_COUNT); + const overshoot = new Float32Array(SLOT_COUNT); + const mainStatRank = new Float32Array(SLOT_COUNT); + let weightSum = 0; + + for (const entry of config.targets) { + const slot = slotOf(entry.stat); + if (slot < 0) throw new Error(`no stat slot for ${entry.stat}`); + if (entry.target <= 0 || entry.weight <= 0) continue; + targets[slot] = entry.target; + weights[slot] = entry.weight; + overshoot[slot] = entry.overshoot ?? DEFAULT_OVERSHOOT; + weightSum += entry.weight; + } + for (const [stat, rank] of Object.entries(config.mainStatRank ?? {})) { + const slot = slotOf(stat); + if (slot >= 0 && rank !== undefined) mainStatRank[slot] = rank; + } + + return { + targets, + weights, + overshoot, + overshootCap: config.overshootCap ?? DEFAULT_OVERSHOOT_CAP, + mainStatEpsilon: config.mainStatEpsilon ?? DEFAULT_MAIN_STAT_EPSILON, + mainStatRank, + weightSum, + }; +} + +/** + * The hot path: one pass over the vector, no allocation. + * + * `mainStat` is the cartridge's main stat slot, or -1. It contributes only + * epsilon - substats decide the build, the main-stat ranking breaks the tie. + */ +export function score( + vector: Float32Array, + compiled: CompiledScoring, + mainStat = -1, +): number { + if (compiled.weightSum === 0) return 0; + let total = 0; + for (let i = 0; i < SLOT_COUNT; i += 1) { + const weight = compiled.weights[i]!; + if (weight === 0) continue; + const ratio = vector[i]! / compiled.targets[i]!; + if (ratio >= 1) { + const excess = Math.min(ratio - 1, compiled.overshootCap); + total += weight * (1 + compiled.overshoot[i]! * excess); + } else { + total += weight * ratio; + } + } + let value = total / compiled.weightSum; + if (mainStat >= 0) value += compiled.mainStatEpsilon * compiled.mainStatRank[mainStat]!; + return value; +} + +/** + * An admissible upper bound for branch and bound. + * + * Every stat's attainment is monotone nondecreasing and concave in its value, so + * assuming each remaining slot takes the largest amount still available per stat + * can only overestimate. If the search closes against this bound the answer is a + * proof of optimality - and when it does not, the UI has to say so. + */ +export function upperBound( + partial: Float32Array, + bestRemaining: Float32Array, + compiled: CompiledScoring, +): number { + if (compiled.weightSum === 0) return 0; + let total = 0; + for (let i = 0; i < SLOT_COUNT; i += 1) { + const weight = compiled.weights[i]!; + if (weight === 0) continue; + const ratio = (partial[i]! + bestRemaining[i]!) / compiled.targets[i]!; + if (ratio >= 1) { + const excess = Math.min(ratio - 1, compiled.overshootCap); + total += weight * (1 + compiled.overshoot[i]! * excess); + } else { + total += weight * ratio; + } + } + return total / compiled.weightSum + compiled.mainStatEpsilon; +} + +export interface StatBreakdown { + stat: StatId; + value: number; + target: number; + weight: number; + /** min(value / target, 1) - what the bars render. */ + attainment: number; + /** How far past the target, as a fraction of it. 0 when short. */ + overshoot: number; + /** This stat's share of the total, tie-breakers excluded. */ + contribution: number; +} + +export interface ScoreReport { + total: number; + /** The score with every overshoot and epsilon term removed. */ + base: number; + /** True when every weighted target is met. */ + complete: boolean; + stats: StatBreakdown[]; +} + +/** + * The same arithmetic, itemised. The result view renders this rather than a bare + * number, because a saturating objective is only trustworthy if the player can + * see which stats are carrying it. + */ +export function explain( + vector: Float32Array, + compiled: CompiledScoring, + mainStat = -1, +): ScoreReport { + const stats: StatBreakdown[] = []; + let base = 0; + let complete = true; + + for (let i = 0; i < SLOT_COUNT; i += 1) { + const weight = compiled.weights[i]!; + if (weight === 0) continue; + const target = compiled.targets[i]!; + const value = vector[i]!; + const ratio = value / target; + const attainment = Math.min(ratio, 1); + const overshoot = ratio > 1 ? Math.min(ratio - 1, compiled.overshootCap) : 0; + if (attainment < 1) complete = false; + base += weight * attainment; + stats.push({ + stat: STAT_SLOTS[i]!, + value, + target, + weight, + attainment, + overshoot, + contribution: (weight * attainment) / compiled.weightSum, + }); + } + + stats.sort((a, b) => b.weight - a.weight || a.stat.localeCompare(b.stat)); + return { + total: score(vector, compiled, mainStat), + base: compiled.weightSum === 0 ? 0 : base / compiled.weightSum, + complete, + stats, + }; +} diff --git a/src/domain/setbonus.ts b/src/domain/setbonus.ts new file mode 100644 index 0000000..061d139 --- /dev/null +++ b/src/domain/setbonus.ts @@ -0,0 +1,66 @@ +/** + * Cartridge set bonuses. + * + * The bonus *values* are the one piece of the model no available source + * carries: the capture never sends them, and everness's `items.json` holds only + * the cartridge boxes, not their effects. They have to be read in game or + * scraped from a guide. + * + * Until then every tier is explicitly unknown and contributes **nothing**. The + * requirements are firm that the app never invents numbers, so a missing bonus + * shows as a gap in the UI rather than as a plausible-looking zero the player + * cannot tell apart from a real one. + */ +import { activeTiers, type SetName, type Tier } from "./cartridges.ts"; +import type { ShapeId } from "./shapes.ts"; +import { vectorFrom, type StatPair } from "./statvec.ts"; + +export interface TierBonus { + unknown: boolean; + stats: StatPair[]; +} + +export interface SetBonusTable { + format: string; + format_version: number; + sets: Record>; +} + +export interface SetBonusResult { + tiers: Tier[]; + vector: Float32Array; + /** Tiers that are active but whose values nobody has measured yet. */ + unknownTiers: Tier[]; +} + +/** What a board's set bonuses contribute, and what is missing from that answer. */ +export function setBonus( + table: SetBonusTable, + set: SetName, + shapesOnBoard: readonly ShapeId[], +): SetBonusResult { + const tiers = activeTiers(set, shapesOnBoard); + const entry = table.sets[set]; + const pairs: StatPair[] = []; + const unknownTiers: Tier[] = []; + + for (const tier of tiers) { + const bonus = entry?.[String(tier) as "2" | "4"]; + if (!bonus || bonus.unknown) { + unknownTiers.push(tier); + continue; + } + pairs.push(...bonus.stats); + } + + return { tiers, vector: vectorFrom(pairs), unknownTiers }; +} + +/** Sets with at least one unmeasured tier, for the UI to flag up front. */ +export function incompleteSets(table: SetBonusTable): SetName[] { + const out: SetName[] = []; + for (const [set, tiers] of Object.entries(table.sets)) { + if (tiers["2"].unknown || tiers["4"].unknown) out.push(set as SetName); + } + return out.sort(); +} diff --git a/src/domain/shapes.ts b/src/domain/shapes.ts new file mode 100644 index 0000000..b130e7c --- /dev/null +++ b/src/domain/shapes.ts @@ -0,0 +1,96 @@ +/** + * Module polyomino geometry, keyed by the id the packets carry. + * + * This is the complete shape set: 12 shapes, every one the game currently makes + * obtainable. The gap at cell4_style3/style4 is dead id space, not missing + * inventory - Type IV has four shapes and no more. + * + * Orientation is part of the item, not a placement choice: the horizontal and + * vertical dominoes are separate ids, as are the horizontal and vertical + * I-pieces. Modules therefore cannot be rotated when placed, and packing is + * translation-only. + * + * Cells are [row, col] with the origin at the shape's top-left corner. + */ + +export type Cell = readonly [row: number, col: number]; +export type ShapeId = keyof typeof SHAPES; + +export const SHAPES = { + cell2_style1: [[0, 0], [0, 1]], + cell2_style2: [[0, 0], [1, 0]], + + cell3_style1: [[0, 0], [0, 1], [0, 2]], + cell3_style2: [[0, 0], [1, 0], [2, 0]], + // The four L-trominoes are the four rotations of the same piece. + cell3_style3: [[0, 0], [1, 0], [1, 1]], + cell3_style4: [[0, 0], [0, 1], [1, 0]], + cell3_style5: [[0, 0], [0, 1], [1, 1]], + cell3_style6: [[0, 1], [1, 0], [1, 1]], + + cell4_style1: [[0, 0], [0, 1], [0, 2], [0, 3]], + cell4_style2: [[0, 0], [1, 0], [2, 0], [3, 0]], + // These two are mirror images - an S and a Z - not one piece in two + // orientations. Rotating style5 gives 10/11/01, which is not style6, so the + // available orientations are an arbitrary subset per piece and cannot be + // generated. + cell4_style5: [[0, 1], [0, 2], [1, 0], [1, 1]], + cell4_style6: [[0, 1], [1, 0], [1, 1], [2, 0]], +} as const satisfies Record; + +/** The order the in-game icons and Prydwen's `module_N.webp` use. */ +export const ICON_ORDER = [ + "cell2_style1", + "cell2_style2", + "cell3_style1", + "cell3_style2", + "cell3_style3", + "cell3_style4", + "cell3_style5", + "cell3_style6", + "cell4_style1", + "cell4_style2", + "cell4_style5", + "cell4_style6", +] as const satisfies readonly ShapeId[]; + +export const SHAPE_IDS = ICON_ORDER; + +export function cellsOf(shape: ShapeId): readonly Cell[] { + return SHAPES[shape]; +} + +export function sizeOf(shape: ShapeId): number { + return SHAPES[shape].length; +} + +/** 2, 3 or 4 - the module type, straight off the id. */ +export function moduleCells(shape: ShapeId): number { + return Number(shape.slice(4, 5)); +} + +export function extentOf(shape: ShapeId): { rows: number; cols: number } { + const cells = SHAPES[shape]; + let rows = 0; + let cols = 0; + for (const [row, col] of cells) { + if (row + 1 > rows) rows = row + 1; + if (col + 1 > cols) cols = col + 1; + } + return { rows, cols }; +} + +/** Rows of '1' and '0', for eyeballing and for test failure messages. */ +export function renderShape(shape: ShapeId): string[] { + const { rows, cols } = extentOf(shape); + const filled = new Set(SHAPES[shape].map(([r, c]) => r * cols + c)); + const out: string[] = []; + for (let row = 0; row < rows; row += 1) { + let line = ""; + for (let col = 0; col < cols; col += 1) { + line += filled.has(row * cols + col) ? "1" : "0"; + } + out.push(line); + } + return out; +} diff --git a/src/domain/sheet.ts b/src/domain/sheet.ts new file mode 100644 index 0000000..ab860d7 --- /dev/null +++ b/src/domain/sheet.ts @@ -0,0 +1,162 @@ +/** + * The predicted character sheet. + * + * This exists to be **checked against the game**, not trusted. The stat model + * has measured gaps - the base-stat multiplier has never been read at level 80, + * which is the level builds actually use - so every value here is either derived + * from something measured or reported as unavailable. Nothing is estimated to + * fill a hole. + * + * Read sheets with the character OFF the active team. On field an Arc's + * conditional effects are folded into the displayed numbers with no way to + * separate them from gear. + */ +import { + BASE_CHARGE_EFFICIENCY, + BASE_CRIT_DAMAGE, + BASE_CRIT_RATE, + BASE_CYCLE_INTENSITY, + baseStat, + hasMultiplier, +} from "./stats.ts"; +import { slotOf } from "./statvec.ts"; + +export interface SheetLine { + key: string; + label: string; + /** Null when the model cannot produce a number honestly. */ + predicted: number | null; + /** Why it is null, when it is. */ + unavailable?: string; + percent: boolean; +} + +export interface EsperCurves { + stats: Array<{ id_stats: string; values: number[] }>; +} + +const curve = (esper: EsperCurves, id: string): number[] | null => + esper.stats.find((entry) => entry.id_stats === id)?.values ?? null; + +/** + * `total` is the character's whole stat vector: base contributions (Arc + * included) plus every equipped piece. + */ +export function predictSheet( + esper: EsperCurves, + level: number | null, + total: Float32Array, +): SheetLine[] { + const get = (stat: string): number => { + const slot = slotOf(stat); + return slot < 0 ? 0 : (total[slot] ?? 0); + }; + + const scaled = ( + key: string, + label: string, + curveId: string, + which: "HP" | "ATK" | "DEF", + percentStat: string, + flatStat: string, + extraBase = 0, + ): SheetLine => { + const values = curve(esper, curveId); + if (level === null) { + return { key, label, predicted: null, unavailable: "character level unknown", percent: false }; + } + if (!hasMultiplier(level)) { + // Level 80 is the level builds actually use and has never been measured. + // One gearless, off-team reading of any character at 80 fills it in for + // everyone - so this says what is missing rather than guessing. + return { + key, + label, + predicted: null, + unavailable: `base multiplier not measured at level ${level}`, + percent: false, + }; + } + const base = values ? baseStat(values, level, which) : null; + if (base === null) { + return { key, label, predicted: null, unavailable: "no stat curve", percent: false }; + } + return { + key, + label, + predicted: (base + extraBase) * (1 + get(percentStat)) + get(flatStat), + percent: false, + }; + }; + + return [ + scaled("hp", "HP", "HPMaxBase", "HP", "HPMaxUp", "HPMaxAdd"), + // The Arc's flat ATK scales with ATK%; gear's flat ATK does not, which is + // why they sit in different slots and enter here differently. + scaled("atk", "ATK", "AtkBase", "ATK", "AtkUp", "AtkAdd", get("AtkBase")), + scaled("def", "DEF", "DefBase", "DEF", "DefUp", "DefAdd"), + { + key: "crit", + label: "CRIT Rate", + predicted: BASE_CRIT_RATE + get("CritBase"), + percent: true, + }, + { + key: "critDamage", + label: "CRIT DMG", + predicted: BASE_CRIT_DAMAGE + get("CritDamageBase"), + percent: true, + }, + { + key: "cycle", + label: "Cycle Intensity", + predicted: BASE_CYCLE_INTENSITY + get("UnbalIntensityBase") + get("UnbalIntensity"), + percent: false, + }, + { + key: "charge", + label: "Charge Efficiency", + predicted: BASE_CHARGE_EFFICIENCY + get("ChargeGetEfficiencyBase"), + percent: true, + }, + { + key: "break", + label: "Break", + // `MagBase` is believed to be the Break stat, but that mapping has never + // been confirmed against a sheet, so it is shown for comparison rather + // than presented as settled. + predicted: get("MagBase") + get("Mag"), + percent: false, + }, + ]; +} + +export interface SheetComparison extends SheetLine { + actual: number | null; + /** predicted - actual, when both exist. */ + delta: number | null; + /** True when the gap is larger than rounding can explain. */ + drifted: boolean; +} + +/** Anything past this is a model error, not display rounding. */ +export const DRIFT_TOLERANCE = 1; + +export function compareSheet( + lines: readonly SheetLine[], + measured: Record | null | undefined, +): SheetComparison[] { + return lines.map((line) => { + const actual = measured?.[line.key] ?? null; + const delta = + line.predicted !== null && actual !== null ? line.predicted - actual : null; + return { + ...line, + actual, + delta, + // Percentages are compared on their own scale, not against a flat 1. + drifted: + delta !== null && Math.abs(delta) > (line.percent ? 0.005 : DRIFT_TOLERANCE), + }; + }); +} diff --git a/src/domain/stats.ts b/src/domain/stats.ts new file mode 100644 index 0000000..688f1aa --- /dev/null +++ b/src/domain/stats.ts @@ -0,0 +1,153 @@ +/** + * The stat model, ported from `stats.py`. + * + * Two rules govern everything here, and both were expensive to learn: + * + * 1. **Sheets must be read with the character OFF the active team.** On field an + * Arc's conditional effects are folded into the displayed numbers with no way + * to separate them from gear. Zankou reads 75% / 203.20% on field and + * 59% / 200.00% off it. + * 2. **One character cannot separate a flat bonus from a multiplicative one.** + * An earlier model fitted a flat base-stat bonus to Zankou alone and was + * simply wrong; a second character falsified it outright. Never confirm a + * model shape against a single reading. + */ +import type { ShapeId } from "./shapes.ts"; + +export const BASE_CRIT_RATE = 0.05; +export const BASE_CRIT_DAMAGE = 0.5; +export const BASE_CYCLE_INTENSITY = 100; +export const BASE_CHARGE_EFFICIENCY = 1; + +/** A measured value, or the band a rounded curve leaves it in. */ +export type Measured = number | { readonly min: number; readonly max: number }; + +export const midpoint = (value: Measured): number => + typeof value === "number" ? value : (value.min + value.max) / 2; + +/** + * base(stat) = floor(curve[level - 1] * M(level, stat)) + * + * M does not depend on the character: Haniel and Adler both give 1.48777 at + * level 50 to five decimals while their flat deltas differ, so one table indexed + * by level covers all 23 espers. + * + * HP and DEF track together; ATK runs lower, and at level 50 the bands do not + * overlap (~1.4878 vs ~1.4380), so the split is real rather than rounding. + */ +export const MULTIPLIER: Record> = { + // The level-50 HP figure is a band, not the five-decimal 1.48777 the Python + // records: that value floors Adler to 8637 against a measured 8638. Two + // readings pin it to [8638/5806, 8273/5560), and the midpoint reproduces both. + 50: { + HP: { min: 1.4877713, max: 1.4879435 }, + ATK: { min: 1.43684, max: 1.43925 }, + DEF: { min: 1.48883, max: 1.49128 }, + }, + 70: { HP: 1.61347, ATK: 1.56369, DEF: 1.6135 }, +}; + +/** + * Level 80 is the level builds actually use and it has never been measured. One + * gearless, off-team reading of any character at 80 fills it in for everyone. + */ +export const UNMEASURED_LEVELS = [80]; + +export function hasMultiplier(level: number): boolean { + return level in MULTIPLIER; +} + +export function baseStat( + curve: readonly number[], + level: number, + stat: "HP" | "ATK" | "DEF", +): number | null { + const row = MULTIPLIER[level]; + const value = curve[level - 1]; + if (!row || value === undefined) return null; + return Math.floor(value * midpoint(row[stat])); +} + +/** + * total ATK = (base + arc) * (1 + atkPercent) + flat + * + * The Arc's ATK scales with ATK%; flat gear ATK does not. A rival fit of + * `base * (1 + pct) + arc + flat` also lands on the sheet exactly - the sheet + * truncates, so an exact hit is no stronger evidence than a truncated one, and + * only a fully unequipped reading can settle it. + */ +export function totalAtk(base: number, arc: number, flat: number, atkPercent: number): number { + return (base + arc) * (1 + atkPercent) + flat; +} + +export interface TraitStat { + id_stats: string; + name: string; + bShowPercent: boolean; + value: number; +} + +export interface ConsoleTrait { + /** Raw stat id, e.g. `CritDamageBase`. */ + stat: string; + name: string; + /** Per qualifying module: already divided by 100 when the stat is a percent. */ + per: number; + /** + * The module *cell count* the trait counts - 2 or 3. This is everness's + * `OwnerGridCount`, which is NOT the grid type despite the name; Prydwen's + * "Console Grid Type" means this same number. + */ + moduleCells: number; +} + +export interface EsperTraitSource { + trait: readonly TraitStat[]; + ownerGridCount: number; +} + +/** + * Read the trait from the data, never from a table. + * + * It is not always Type III and not always CRIT DMG: three characters key on + * Type II, and the values run 6 to 16 across eight different stats. + */ +export function consoleTrait(esper: EsperTraitSource): ConsoleTrait | null { + const stat = esper.trait[0]; + if (!stat) return null; + return { + stat: stat.id_stats, + name: stat.name, + per: stat.bShowPercent ? stat.value / 100 : stat.value, + moduleCells: esper.ownerGridCount, + }; +} + +/** What the console trait contributes for a given set of modules on the board. */ +export function traitContribution( + trait: ConsoleTrait | null, + shapes: readonly ShapeId[], +): { stat: string; value: number } | null { + if (!trait) return null; + let qualifying = 0; + for (const shape of shapes) { + if (Number(shape.slice(4, 5)) === trait.moduleCells) qualifying += 1; + } + return { stat: trait.stat, value: trait.per * qualifying }; +} + +/** + * Ravenous Blade's +16% CRIT Rate needs the Arc equipped AND the character on + * field, isolated by three readings: arc off / on field 35%, arc on / off field + * 59%, arc on / on field 75%. + */ +export const ARC_ON_FIELD_EFFECTS: Record> = { + "Ravenous Blade": { CritBase: 0.16 }, +}; + +/** + * +3.2% CRIT DMG appears in both on-field readings, with and without the Arc, so + * it is neither gear nor the Arc. Source unidentified; harmless as long as + * sheets are read off-team, which is why the app never models on-field numbers. + */ +export const ON_FIELD_UNKNOWN: Record = { CritDamageBase: 0.032 }; diff --git a/src/domain/statvec.ts b/src/domain/statvec.ts new file mode 100644 index 0000000..8bb3397 --- /dev/null +++ b/src/domain/statvec.ts @@ -0,0 +1,146 @@ +/** + * The fixed stat vector. + * + * Every contribution - module main, module substat, cartridge main, set bonus, + * console trait, Arc - is normalised into one `Float32Array` with a fixed slot + * per stat, and the whole owned pool lives in a single flat array. Scoring a + * partial build then costs one vector add. Nearly all of the solver's speed is + * this decision, which is why it is made before any solver code exists. + * + * Slots are raw stat ids, never display names: naming is presentation and + * belongs in the UI, where it can change without invalidating stored data. + */ + +/** Elements the roster actually has. */ +export const ELEMENTS = [ + "Chaos", + "Cosmos", + "Incantation", + "Lakshana", + "Nature", + "Psyche", +] as const; + +/** + * Slot order is part of the on-disk contract for anything that caches vectors, + * so append only - never reorder. + * + * The first eleven are the stats that appear as substats; the rest appear only + * as mains. `DamageUpPsychicallyBase` is a seventh damage-bonus id with no + * matching element - it shows up on 19 real items, so it gets a slot whatever + * it turns out to mean. + */ +export const STAT_SLOTS = [ + "HPMaxAdd", + "HPMaxUp", + "AtkAdd", + "AtkUp", + "DefAdd", + "DefUp", + "CritBase", + "CritDamageBase", + "MagBase", + "UnbalIntensityBase", + "DamageUpGeneralBase", + "HealUp", + "DamageUpChaosBase", + "DamageUpCosmosBase", + "DamageUpIncantationBase", + "DamageUpLakshanaBase", + "DamageUpNatureBase", + "DamageUpPsycheBase", + "DamageUpPsychicallyBase", + + // --- appended for Arcs. Slot order is a contract: append only. --- + // + // `AtkBase` is the Arc's flat ATK and is deliberately NOT folded into + // `AtkAdd`: the Arc's ATK scales with ATK% and gear's flat ATK does not, so + // they are different quantities that happen to share a unit. + "AtkBase", + "ChargeGetEfficiencyBase", + "DefIgnore", + // `UnbalIntensity` and `Mag` appear only in Arc effect tables, while gear uses + // `UnbalIntensityBase` and `MagBase`. They are probably the same stats spelled + // differently, but nothing confirms it - and merging two stats wrongly is a + // worse error than carrying two slots, so they stay separate until measured. + "UnbalIntensity", + "Mag", +] as const; + +export type StatId = (typeof STAT_SLOTS)[number]; + +export const SLOT_COUNT = STAT_SLOTS.length; + +const SLOT_INDEX = new Map(STAT_SLOTS.map((stat, index) => [stat, index])); + +/** The slot for a stat id, or -1 for one the model has no place for. */ +export function slotOf(stat: string): number { + return SLOT_INDEX.get(stat) ?? -1; +} + +export function isKnownStat(stat: string): stat is StatId { + return SLOT_INDEX.has(stat); +} + +/** The damage-bonus slot a character's own element reads. */ +export function elementSlot(element: string | null): number { + return element === null ? -1 : slotOf(`DamageUp${element}Base`); +} + +export function emptyVector(): Float32Array { + return new Float32Array(SLOT_COUNT); +} + +/** + * A flat pool: `count` vectors laid end to end, so an item's contribution is a + * subarray rather than an object. + */ +export function emptyPool(count: number): Float32Array { + return new Float32Array(count * SLOT_COUNT); +} + +export function poolSlice(pool: Float32Array, index: number): Float32Array { + return pool.subarray(index * SLOT_COUNT, (index + 1) * SLOT_COUNT); +} + +/** `into += from`. Both must be full-length vectors. */ +export function addInto(into: Float32Array, from: Float32Array): void { + for (let i = 0; i < SLOT_COUNT; i += 1) into[i] = into[i]! + from[i]!; +} + +/** `into += pool[index]`, without materialising a subarray. */ +export function addPoolInto(into: Float32Array, pool: Float32Array, index: number): void { + const base = index * SLOT_COUNT; + for (let i = 0; i < SLOT_COUNT; i += 1) into[i] = into[i]! + pool[base + i]!; +} + +export function subtractInto(into: Float32Array, from: Float32Array): void { + for (let i = 0; i < SLOT_COUNT; i += 1) into[i] = into[i]! - from[i]!; +} + +export type StatPair = { stat: string; value: number | null }; + +/** + * Fold a list of `{stat, value}` into a vector. + * + * Unknown stats and null values are skipped: a main stat whose displayed value + * the game never transmits is a real, expected null, not a parse failure. + */ +export function vectorFrom(pairs: Iterable, into?: Float32Array): Float32Array { + const vector = into ?? emptyVector(); + for (const { stat, value } of pairs) { + if (value === null) continue; + const slot = slotOf(stat); + if (slot >= 0) vector[slot] = vector[slot]! + value; + } + return vector; +} + +/** Non-zero slots, for display and for test failure messages. */ +export function describe(vector: Float32Array): Record { + const out: Record = {}; + for (let i = 0; i < SLOT_COUNT; i += 1) { + if (vector[i] !== 0) out[STAT_SLOTS[i]!] = vector[i]!; + } + return out; +} diff --git a/src/domain/tilings.ts b/src/domain/tilings.ts new file mode 100644 index 0000000..d1975b4 --- /dev/null +++ b/src/domain/tilings.ts @@ -0,0 +1,82 @@ +/** + * Reads the precomputed packing table. + * + * Exact cover never runs in the app: `tools/precompute-tilings.ts` solved every + * (board, set, filler) combination offline. What survives is which shape + * multisets tile a board with a given set, plus one canonical placement each + * for drawing. + */ +import type { SetName } from "./cartridges.ts"; +import type { ShapeId } from "./shapes.ts"; + +type RawEntry = [set: number, pieces: string, placement: string]; + +interface RawBoard { + cells: number[]; + espers: string[]; + entries: RawEntry[]; +} + +export interface RawTilings { + format: string; + format_version: number; + gridSize: number; + cellCount: number; + shapes: ShapeId[]; + sets: SetName[]; + boards: RawBoard[]; +} + +export interface Tiling { + set: SetName; + /** In packing order, so `placement` indexes straight into it. */ + pieces: ShapeId[]; + /** Board cells, ascending. */ + cells: number[]; + /** `placement[i]` is the piece covering `cells[i]`. */ + placement: number[]; +} + +export interface BoardTilings { + cells: number[]; + espers: string[]; + /** Every packing, grouped by cartridge set. */ + bySet: Map; +} + +const digit = (char: string): number => parseInt(char, 36); + +export function loadTilings(raw: RawTilings): BoardTilings[] { + return raw.boards.map((board) => { + const bySet = new Map(); + for (const [setIndex, pieces, placement] of board.entries) { + const set = raw.sets[setIndex]!; + const tiling: Tiling = { + set, + pieces: [...pieces].map((char) => raw.shapes[digit(char)]!), + cells: board.cells, + placement: [...placement].map(digit), + }; + const list = bySet.get(set); + if (list) list.push(tiling); + else bySet.set(set, [tiling]); + } + return { cells: board.cells, espers: board.espers, bySet }; + }); +} + +/** The shape multiset of a packing, as counts keyed by shape. */ +export function multisetOf(tiling: Tiling): Map { + const counts = new Map(); + for (const shape of tiling.pieces) counts.set(shape, (counts.get(shape) ?? 0) + 1); + return counts; +} + +/** Cells covered by piece `index`, as board cell ids. */ +export function cellsOfPiece(tiling: Tiling, index: number): number[] { + const out: number[] = []; + for (let i = 0; i < tiling.placement.length; i += 1) { + if (tiling.placement[i] === index) out.push(tiling.cells[i]!); + } + return out; +} diff --git a/src/generated/gamedata.json b/src/generated/gamedata.json new file mode 100644 index 0000000..7966cc5 --- /dev/null +++ b/src/generated/gamedata.json @@ -0,0 +1 @@ +{"format":"nte-gamedata","format_version":1,"generated":"2026-08-21","espers":[{"id":"1003","abilityKey":"Sagiri","name":"Sakiri","element":"Incantation","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_003","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1360,1469,1578,1686,1795,1904,2013,2122,2230,2339,2448,2557,2666,2774,2883,2992,3101,3210,3318,3427,3536,3645,3754,3862,3971,4080,4189,4298,4406,4515,4624,4733,4842,4950,5059,5168,5277,5386,5494,5603,5712,5821,5930,6038,6147,6256,6365,6474,6582,6691,6800,6909,7018,7126,7235,7344,7453,7562,7670,7779,7888,7997,8106,8214,8323,8432,8541,8650,8758,8867,8976,9085,9194,9302,9411,9520,9629,9738,9846,9955]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[78,82,86,90,94,98,101,105,109,113,117,121,125,129,133,137,140,144,148,152,156,160,164,168,172,176,179,183,187,191,195,199,203,207,211,215,218,222,226,230,234,238,242,246,250,254,257,261,265,269,273,277,281,285,289,293,296,300,304,308,312,316,320,324,328,332,335,339,343,347,351,355,359,363,367,371,374,378,382,386]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,-1,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"DamageUpIncantationBase","name":"Incantation DMG Bonus","bShowPercent":true,"value":9}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1004","abilityKey":"Lacrimosa","name":"Lacrimosa","element":"Chaos","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_004","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1320,1426,1531,1637,1742,1848,1954,2059,2165,2270,2376,2482,2587,2693,2798,2904,3010,3115,3221,3326,3432,3538,3643,3749,3854,3960,4066,4171,4277,4382,4488,4594,4699,4805,4910,5016,5122,5227,5333,5438,5544,5650,5755,5861,5966,6072,6178,6283,6389,6494,6600,6706,6811,6917,7022,7128,7234,7339,7445,7550,7656,7762,7867,7973,8078,8184,8290,8395,8501,8606,8712,8818,8923,9029,9134,9240,9346,9451,9557,9662]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"DamageUpChaosBase","name":"Chaos DMG Bonus","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1008","abilityKey":"Skia","name":"Skia","element":"Lakshana","rarity":4,"icon":"/Game/UI/UI_Icon/AvatarImage/player_008","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1100,1188,1276,1364,1452,1540,1628,1716,1804,1892,1980,2068,2156,2244,2332,2420,2508,2596,2684,2772,2860,2948,3036,3124,3212,3300,3388,3476,3564,3652,3740,3828,3916,4004,4092,4180,4268,4356,4444,4532,4620,4708,4796,4884,4972,5060,5148,5236,5324,5412,5500,5588,5676,5764,5852,5940,6028,6116,6204,6292,6380,6468,6556,6644,6732,6820,6908,6996,7084,7172,7260,7348,7436,7524,7612,7700,7788,7876,7964,8052]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[70,74,77,81,84,88,91,95,98,102,105,109,112,116,119,123,126,130,133,137,140,144,147,151,154,158,161,165,168,172,175,179,182,186,189,193,196,200,203,207,210,214,217,221,224,228,231,235,238,242,245,249,252,256,259,263,266,270,273,277,280,284,287,291,294,298,301,305,308,312,315,319,322,326,329,333,336,340,343,347]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[55,59,64,68,73,77,81,86,90,95,99,103,108,112,117,121,125,130,134,139,143,147,152,156,161,165,169,174,178,183,187,191,196,200,205,209,213,218,222,227,231,235,240,244,249,253,257,262,266,271,275,279,284,288,293,297,301,306,310,315,319,323,328,332,337,341,345,350,354,359,363,367,372,376,381,385,389,394,398,403]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,-1,0,-1],[-1,0,0,-1,-1,0,-1],[-1,0,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"AtkUp","name":"ATK","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1010","abilityKey":"Nanally","name":"Nanally","element":"Nature","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_010","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1320,1426,1531,1637,1742,1848,1954,2059,2165,2270,2376,2482,2587,2693,2798,2904,3010,3115,3221,3326,3432,3538,3643,3749,3854,3960,4066,4171,4277,4382,4488,4594,4699,4805,4910,5016,5122,5227,5333,5438,5544,5650,5755,5861,5966,6072,6178,6283,6389,6494,6600,6706,6811,6917,7022,7128,7234,7339,7445,7550,7656,7762,7867,7973,8078,8184,8290,8395,8501,8606,8712,8818,8923,9029,9134,9240,9346,9451,9557,9662]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":2,"trait":[{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"value":6}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1019","abilityKey":"Mint019","name":"Mint","element":"Nature","rarity":4,"icon":"/Game/UI/UI_Icon/AvatarImage/player_019","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1000,1080,1160,1240,1320,1400,1480,1560,1640,1720,1800,1880,1960,2040,2120,2200,2280,2360,2440,2520,2600,2680,2760,2840,2920,3000,3080,3160,3240,3320,3400,3480,3560,3640,3720,3800,3880,3960,4040,4120,4200,4280,4360,4440,4520,4600,4680,4760,4840,4920,5000,5080,5160,5240,5320,5400,5480,5560,5640,5720,5800,5880,5960,6040,6120,6200,6280,6360,6440,6520,6600,6680,6760,6840,6920,7000,7080,7160,7240,7320]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[75,79,83,86,90,94,98,101,105,109,113,116,120,124,128,131,135,139,143,146,150,154,158,161,165,169,173,176,180,184,188,191,195,199,203,206,210,214,218,221,225,229,233,236,240,244,248,251,255,259,263,266,270,274,278,281,285,289,293,296,300,304,308,311,315,319,323,326,330,334,338,341,345,349,353,356,360,364,368,371]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[60,65,70,74,79,84,89,94,98,103,108,113,118,122,127,132,137,142,146,151,156,161,166,170,175,180,185,190,194,199,204,209,214,218,223,228,233,238,242,247,252,257,262,266,271,276,281,286,290,295,300,305,310,314,319,324,329,334,338,343,348,353,358,362,367,372,377,382,386,391,396,401,406,410,415,420,425,430,434,439]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,-1,0,-1],[-1,0,0,-1,-1,0,-1],[-1,0,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"value":7.5}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1020","abilityKey":"Haniel","name":"Haniel","element":"Psyche","rarity":4,"icon":"/Game/UI/UI_Icon/AvatarImage/player_020","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1130,1220,1311,1401,1492,1582,1672,1763,1853,1944,2034,2124,2215,2305,2396,2486,2576,2667,2757,2848,2938,3028,3119,3209,3300,3390,3480,3571,3661,3752,3842,3932,4023,4113,4204,4294,4384,4475,4565,4656,4746,4836,4927,5017,5108,5198,5288,5379,5469,5560,5650,5740,5831,5921,6012,6102,6192,6283,6373,6464,6554,6644,6735,6825,6916,7006,7096,7187,7277,7368,7458,7548,7639,7729,7820,7910,8000,8091,8181,8272]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[62,65,68,71,74,78,81,84,87,90,93,96,99,102,105,109,112,115,118,121,124,127,130,133,136,140,143,146,149,152,155,158,161,164,167,171,174,177,180,183,186,189,192,195,198,202,205,208,211,214,217,220,223,226,229,233,236,239,242,245,248,251,254,257,260,264,267,270,273,276,279,282,285,288,291,295,298,301,304,307]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[70,76,81,87,92,98,104,109,115,120,126,132,137,143,148,154,160,165,171,176,182,188,193,199,204,210,216,221,227,232,238,244,249,255,260,266,272,277,283,288,294,300,305,311,316,322,328,333,339,344,350,356,361,367,372,378,384,389,395,400,406,412,417,423,428,434,440,445,451,456,462,468,473,479,484,490,496,501,507,512]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,-1,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"AtkUp","name":"ATK","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1021","abilityKey":"Edgar","name":"Edgar","element":"Cosmos","rarity":4,"icon":"/Game/UI/UI_Icon/AvatarImage/player_021","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1350,1458,1566,1674,1782,1890,1998,2106,2214,2322,2430,2538,2646,2754,2862,2970,3078,3186,3294,3402,3510,3618,3726,3834,3942,4050,4158,4266,4374,4482,4590,4698,4806,4914,5022,5130,5238,5346,5454,5562,5670,5778,5886,5994,6102,6210,6318,6426,6534,6642,6750,6858,6966,7074,7182,7290,7398,7506,7614,7722,7830,7938,8046,8154,8262,8370,8478,8586,8694,8802,8910,9018,9126,9234,9342,9450,9558,9666,9774,9882]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[53,56,58,61,64,66,69,72,74,77,80,82,85,87,90,93,95,98,101,103,106,109,111,114,117,119,122,125,127,130,133,135,138,140,143,146,148,151,154,156,159,162,164,167,170,172,175,178,180,183,186,188,191,193,196,199,201,204,207,209,212,215,217,220,223,225,228,231,233,236,239,241,244,246,249,252,254,257,260,262]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[68,73,79,84,90,95,101,106,112,117,122,128,133,139,144,150,155,160,166,171,177,182,188,193,199,204,209,215,220,226,231,237,242,248,253,258,264,269,275,280,286,291,296,302,307,313,318,324,329,335,340,345,351,356,362,367,373,378,384,389,394,400,405,411,416,422,427,432,438,443,449,454,460,465,471,476,481,487,492,498]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"HPMaxUp","name":"HP","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1023","abilityKey":"Cang","name":"Baicang","element":"Incantation","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_028","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1370,1480,1589,1699,1808,1918,2028,2137,2247,2356,2466,2576,2685,2795,2904,3014,3124,3233,3343,3452,3562,3672,3781,3891,4000,4110,4220,4329,4439,4548,4658,4768,4877,4987,5096,5206,5316,5425,5535,5644,5754,5864,5973,6083,6192,6302,6412,6521,6631,6740,6850,6960,7069,7179,7288,7398,7508,7617,7727,7836,7946,8056,8165,8275,8384,8494,8604,8713,8823,8932,9042,9152,9261,9371,9480,9590,9700,9809,9919,10028]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[81,85,89,93,97,101,105,109,113,117,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267,271,275,279,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,365,369,373,377,381,385,389,393,397,401]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[66,71,77,82,87,92,98,103,108,114,119,124,129,135,140,145,150,156,161,166,172,177,182,187,193,198,203,209,214,219,224,230,235,240,246,251,256,261,267,272,277,282,288,293,298,304,309,314,319,325,330,335,341,346,351,356,362,367,372,378,383,388,393,399,404,409,414,420,425,430,436,441,446,451,457,462,467,473,478,483]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,-1,0,-1],[-1,0,0,-1,-1,0,-1],[-1,0,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"value":7.5}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1025","abilityKey":"Hathor","name":"Hathor","element":"Lakshana","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_012","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1320,1426,1531,1637,1742,1848,1954,2059,2165,2270,2376,2482,2587,2693,2798,2904,3010,3115,3221,3326,3432,3538,3643,3749,3854,3960,4066,4171,4277,4382,4488,4594,4699,4805,4910,5016,5122,5227,5333,5438,5544,5650,5755,5861,5966,6072,6178,6283,6389,6494,6600,6706,6811,6917,7022,7128,7234,7339,7445,7550,7656,7762,7867,7973,8078,8184,8290,8395,8501,8606,8712,8818,8923,9029,9134,9240,9346,9451,9557,9662]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[81,85,89,93,97,101,105,109,113,117,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267,271,275,279,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,365,369,373,377,381,385,389,393,397,401]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[73,79,85,91,96,102,108,114,120,126,131,137,143,149,155,161,166,172,178,184,190,196,201,207,213,219,225,231,237,242,248,254,260,266,272,277,283,289,295,301,307,312,318,324,330,336,342,347,353,359,365,371,377,383,388,394,400,406,412,418,423,429,435,441,447,453,458,464,470,476,482,488,493,499,505,511,517,523,529,534]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,-1,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"AtkUp","name":"ATK","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1033","abilityKey":"Adler","name":"Adler","element":"Incantation","rarity":4,"icon":"/Game/UI/UI_Icon/AvatarImage/player_015","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1180,1274,1369,1463,1558,1652,1746,1841,1935,2030,2124,2218,2313,2407,2502,2596,2690,2785,2879,2974,3068,3162,3257,3351,3446,3540,3634,3729,3823,3918,4012,4106,4201,4295,4390,4484,4578,4673,4767,4862,4956,5050,5145,5239,5334,5428,5522,5617,5711,5806,5900,5994,6089,6183,6278,6372,6466,6561,6655,6750,6844,6938,7033,7127,7222,7316,7410,7505,7599,7694,7788,7882,7977,8071,8166,8260,8354,8449,8543,8638]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[55,58,61,63,66,69,72,74,77,80,83,85,88,91,94,96,99,102,105,107,110,113,116,118,121,124,127,129,132,135,138,140,143,146,149,151,154,157,160,162,165,168,171,173,176,179,182,184,187,190,193,195,198,201,204,206,209,212,215,217,220,223,226,228,231,234,237,239,242,245,248,250,253,256,259,261,264,267,270,272]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[82,89,95,102,108,115,121,128,134,141,148,154,161,167,174,180,187,194,200,207,213,220,226,233,239,246,253,259,266,272,279,285,292,298,305,312,318,325,331,338,344,351,358,364,371,377,384,390,397,403,410,417,423,430,436,443,449,456,462,469,476,482,489,495,502,508,515,522,528,535,541,548,554,561,567,574,581,587,594,600]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,-1,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"DefUp","name":"DEF","bShowPercent":true,"value":12}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1036","abilityKey":"Zankou","name":"Zankou","element":"Incantation","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_canhong","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1280,1382,1485,1587,1690,1792,1894,1997,2099,2202,2304,2406,2509,2611,2714,2816,2918,3021,3123,3226,3328,3430,3533,3635,3738,3840,3942,4045,4147,4250,4352,4454,4557,4659,4762,4864,4966,5069,5171,5274,5376,5478,5581,5683,5786,5888,5990,6093,6195,6298,6400,6502,6605,6707,6810,6912,7014,7117,7219,7322,7424,7526,7629,7731,7834,7936,8038,8141,8243,8346,8448,8550,8653,8755,8858,8960,9062,9165,9267,9370]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[83,87,91,95,100,104,108,112,116,120,125,129,133,137,141,145,149,154,158,162,166,170,174,178,183,187,191,195,199,203,208,212,216,220,224,228,232,237,241,245,249,253,257,261,266,270,274,278,282,286,291,295,299,303,307,311,315,320,324,328,332,336,340,344,349,353,357,361,365,369,374,378,382,386,390,394,398,403,407,411]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,-1,0,-1],[-1,0,0,-1,-1,0,-1],[-1,0,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"value":16}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1039","abilityKey":"Fadia","name":"Fadia","element":"Psyche","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_027","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1410,1523,1636,1748,1861,1974,2087,2200,2312,2425,2538,2651,2764,2876,2989,3102,3215,3328,3440,3553,3666,3779,3892,4004,4117,4230,4343,4456,4568,4681,4794,4907,5020,5132,5245,5358,5471,5584,5696,5809,5922,6035,6148,6260,6373,6486,6599,6712,6824,6937,7050,7163,7276,7388,7501,7614,7727,7840,7952,8065,8178,8291,8404,8516,8629,8742,8855,8968,9080,9193,9306,9419,9532,9644,9757,9870,9983,10096,10208,10321]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[75,79,83,86,90,94,98,101,105,109,113,116,120,124,128,131,135,139,143,146,150,154,158,161,165,169,173,176,180,184,188,191,195,199,203,206,210,214,218,221,225,229,233,236,240,244,248,251,255,259,263,266,270,274,278,281,285,289,293,296,300,304,308,311,315,319,323,326,330,334,338,341,345,349,353,356,360,364,368,371]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,-1,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":2,"trait":[{"id_stats":"HPMaxUp","name":"HP","bShowPercent":true,"value":6}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1046","abilityKey":"Female046","name":"Zero","element":"Cosmos","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_046","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1250,1350,1450,1550,1650,1750,1850,1950,2050,2150,2250,2350,2450,2550,2650,2750,2850,2950,3050,3150,3250,3350,3450,3550,3650,3750,3850,3950,4050,4150,4250,4350,4450,4550,4650,4750,4850,4950,5050,5150,5250,5350,5450,5550,5650,5750,5850,5950,6050,6150,6250,6350,6450,6550,6650,6750,6850,6950,7050,7150,7250,7350,7450,7550,7650,7750,7850,7950,8050,8150,8250,8350,8450,8550,8650,8750,8850,8950,9050,9150]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[85,89,94,98,102,106,111,115,119,123,128,132,136,140,145,149,153,157,162,166,170,174,179,183,187,191,196,200,204,208,213,217,221,225,230,234,238,242,247,251,255,259,264,268,272,276,281,285,289,293,298,302,306,310,315,319,323,327,332,336,340,344,349,353,357,361,366,370,374,378,383,387,391,395,400,404,408,412,417,421]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,-1,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"AtkUp","name":"ATK","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1051","abilityKey":"Female051","name":"Zero","element":"Cosmos","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_009","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1250,1350,1450,1550,1650,1750,1850,1950,2050,2150,2250,2350,2450,2550,2650,2750,2850,2950,3050,3150,3250,3350,3450,3550,3650,3750,3850,3950,4050,4150,4250,4350,4450,4550,4650,4750,4850,4950,5050,5150,5250,5350,5450,5550,5650,5750,5850,5950,6050,6150,6250,6350,6450,6550,6650,6750,6850,6950,7050,7150,7250,7350,7450,7550,7650,7750,7850,7950,8050,8150,8250,8350,8450,8550,8650,8750,8850,8950,9050,9150]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[85,89,94,98,102,106,111,115,119,123,128,132,136,140,145,149,153,157,162,166,170,174,179,183,187,191,196,200,204,208,213,217,221,225,230,234,238,242,247,251,255,259,264,268,272,276,281,285,289,293,298,302,306,310,315,319,323,327,332,336,340,344,349,353,357,361,366,370,374,378,383,387,391,395,400,404,408,412,417,421]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,-1,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"AtkUp","name":"ATK","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1052","abilityKey":"Jin","name":"Hotori","element":"Cosmos","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_013","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1330,1436,1543,1649,1756,1862,1968,2075,2181,2288,2394,2500,2607,2713,2820,2926,3032,3139,3245,3352,3458,3564,3671,3777,3884,3990,4096,4203,4309,4416,4522,4628,4735,4841,4948,5054,5160,5267,5373,5480,5586,5692,5799,5905,6012,6118,6224,6331,6437,6544,6650,6756,6863,6969,7076,7182,7288,7395,7501,7608,7714,7820,7927,8033,8140,8246,8352,8459,8565,8672,8778,8884,8991,9097,9204,9310,9416,9523,9629,9736]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[82,86,90,94,98,103,107,111,115,119,123,127,131,135,139,144,148,152,156,160,164,168,172,176,180,185,189,193,197,201,205,209,213,217,221,226,230,234,238,242,246,250,254,258,262,267,271,275,279,283,287,291,295,299,303,308,312,316,320,324,328,332,336,340,344,349,353,357,361,365,369,373,377,381,385,390,394,398,402,406]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[70,76,81,87,92,98,104,109,115,120,126,132,137,143,148,154,160,165,171,176,182,188,193,199,204,210,216,221,227,232,238,244,249,255,260,266,272,277,283,288,294,300,305,311,316,322,328,333,339,344,350,356,361,367,372,378,384,389,395,400,406,412,417,423,428,434,440,445,451,456,462,468,473,479,484,490,496,501,507,512]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,-1,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"DamageUpCosmosBase","name":"Cosmos DMG Bonus","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1054","abilityKey":"Daffodill","name":"Daffodill","element":"Chaos","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_005","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1335,1442,1549,1655,1762,1869,1976,2083,2189,2296,2403,2510,2617,2723,2830,2937,3044,3151,3257,3364,3471,3578,3685,3791,3898,4005,4112,4219,4325,4432,4539,4646,4753,4859,4966,5073,5180,5287,5393,5500,5607,5714,5821,5927,6034,6141,6248,6355,6461,6568,6675,6782,6889,6995,7102,7209,7316,7423,7529,7636,7743,7850,7957,8063,8170,8277,8384,8491,8597,8704,8811,8918,9025,9131,9238,9345,9452,9559,9665,9772]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[81,85,89,93,97,101,105,109,113,117,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267,271,275,279,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,365,369,373,377,381,385,389,393,397,401]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[72,78,84,89,95,101,107,112,118,124,130,135,141,147,153,158,164,170,176,181,187,193,199,204,210,216,222,228,233,239,245,251,256,262,268,274,279,285,291,297,302,308,314,320,325,331,337,343,348,354,360,366,372,377,383,389,395,400,406,412,418,423,429,435,441,446,452,458,464,469,475,481,487,492,498,504,510,516,521,527]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,-1,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"DamageUpChaosBase","name":"Chaos DMG Bonus","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1055","abilityKey":"Kuhara","name":"Jiuyuan","element":"Nature","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/player_104","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1290,1393,1496,1600,1703,1806,1909,2012,2116,2219,2322,2425,2528,2632,2735,2838,2941,3044,3148,3251,3354,3457,3560,3664,3767,3870,3973,4076,4180,4283,4386,4489,4592,4696,4799,4902,5005,5108,5212,5315,5418,5521,5624,5728,5831,5934,6037,6140,6244,6347,6450,6553,6656,6760,6863,6966,7069,7172,7276,7379,7482,7585,7688,7792,7895,7998,8101,8204,8308,8411,8514,8617,8720,8824,8927,9030,9133,9236,9340,9443]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[82,86,90,94,98,103,107,111,115,119,123,127,131,135,139,144,148,152,156,160,164,168,172,176,180,185,189,193,197,201,205,209,213,217,221,226,230,234,238,242,246,250,254,258,262,267,271,275,279,283,287,291,295,299,303,308,312,316,320,324,328,332,336,340,344,349,353,357,361,365,369,373,377,381,385,390,394,398,402,406]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":2,"trait":[{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"value":6}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1070","abilityKey":"Mitsuki","name":"Aurelia","element":"Psyche","rarity":4,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_haiyue","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[980,1058,1137,1215,1294,1372,1450,1529,1607,1686,1764,1842,1921,1999,2078,2156,2234,2313,2391,2470,2548,2626,2705,2783,2862,2940,3018,3097,3175,3254,3332,3410,3489,3567,3646,3724,3802,3881,3959,4038,4116,4194,4273,4351,4430,4508,4586,4665,4743,4822,4900,4978,5057,5135,5214,5292,5370,5449,5527,5606,5684,5762,5841,5919,5998,6076,6154,6233,6311,6390,6468,6546,6625,6703,6782,6860,6938,7017,7095,7174]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[76,80,84,87,91,95,99,103,106,110,114,118,122,125,129,133,137,141,144,148,152,156,160,163,167,171,175,179,182,186,190,194,198,201,205,209,213,217,220,224,228,232,236,239,243,247,251,255,258,262,266,270,274,277,281,285,289,293,296,300,304,308,312,315,319,323,327,331,334,338,342,346,350,353,357,361,365,369,372,376]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[60,65,70,74,79,84,89,94,98,103,108,113,118,122,127,132,137,142,146,151,156,161,166,170,175,180,185,190,194,199,204,209,214,218,223,228,233,238,242,247,252,257,262,266,271,276,281,286,290,295,300,305,310,314,319,324,329,334,338,343,348,353,358,362,367,372,377,382,386,391,396,401,406,410,415,420,425,430,434,439]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,0,0,-1,-1],[-1,0,0,-1,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"AtkUp","name":"ATK","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1072","abilityKey":"Radio072","name":"Linko","element":"Nature","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_lingke","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1280,1382,1485,1587,1690,1792,1894,1997,2099,2202,2304,2406,2509,2611,2714,2816,2918,3021,3123,3226,3328,3430,3533,3635,3738,3840,3942,4045,4147,4250,4352,4454,4557,4659,4762,4864,4966,5069,5171,5274,5376,5478,5581,5683,5786,5888,5990,6093,6195,6298,6400,6502,6605,6707,6810,6912,7014,7117,7219,7322,7424,7526,7629,7731,7834,7936,8038,8141,8243,8346,8448,8550,8653,8755,8858,8960,9062,9165,9267,9370]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[82,86,90,94,98,103,107,111,115,119,123,127,131,135,139,144,148,152,156,160,164,168,172,176,180,185,189,193,197,201,205,209,213,217,221,226,230,234,238,242,246,250,254,258,262,267,271,275,279,283,287,291,295,299,303,308,312,316,320,324,328,332,336,340,344,349,353,357,361,365,369,373,377,381,385,390,394,398,402,406]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[76,82,88,94,100,106,112,119,125,131,137,143,149,155,161,167,173,179,185,192,198,204,210,216,222,228,234,240,246,252,258,264,271,277,283,289,295,301,307,313,319,325,331,337,344,350,356,362,368,374,380,386,392,398,404,410,416,423,429,435,441,447,453,459,465,471,477,483,489,496,502,508,514,520,526,532,538,544,550,556]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,-1,0,-1],[-1,0,0,-1,-1,0,-1],[-1,0,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"value":8}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1073","abilityKey":"Chiichan073","name":"Chiz","element":"Cosmos","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_073","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1280,1382,1485,1587,1690,1792,1894,1997,2099,2202,2304,2406,2509,2611,2714,2816,2918,3021,3123,3226,3328,3430,3533,3635,3738,3840,3942,4045,4147,4250,4352,4454,4557,4659,4762,4864,4966,5069,5171,5274,5376,5478,5581,5683,5786,5888,5990,6093,6195,6298,6400,6502,6605,6707,6810,6912,7014,7117,7219,7322,7424,7526,7629,7731,7834,7936,8038,8141,8243,8346,8448,8550,8653,8755,8858,8960,9062,9165,9267,9370]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[83,87,91,95,100,104,108,112,116,120,125,129,133,137,141,145,149,154,158,162,166,170,174,178,183,187,191,195,199,203,208,212,216,220,224,228,232,237,241,245,249,253,257,261,266,270,274,278,282,286,291,295,299,303,307,311,315,320,324,328,332,336,340,344,349,353,357,361,365,369,374,378,382,386,390,394,398,403,407,411]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,-1,0,-1],[-1,0,0,-1,-1,0,-1],[-1,0,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"DamageUpCosmosBase","name":"Cosmos DMG Bonus","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1075","abilityKey":"Oneiroi","name":"Iroi","element":"Nature","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_yiluoyi","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1420,1534,1647,1761,1874,1988,2102,2215,2329,2442,2556,2670,2783,2897,3010,3124,3238,3351,3465,3578,3692,3806,3919,4033,4146,4260,4374,4487,4601,4714,4828,4942,5055,5169,5282,5396,5510,5623,5737,5850,5964,6078,6191,6305,6418,6532,6646,6759,6873,6986,7100,7214,7327,7441,7554,7668,7782,7895,8009,8122,8236,8350,8463,8577,8690,8804,8918,9031,9145,9258,9372,9486,9599,9713,9826,9940,10054,10167,10281,10394]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[75,79,83,86,90,94,98,101,105,109,113,116,120,124,128,131,135,139,143,146,150,154,158,161,165,169,173,176,180,184,188,191,195,199,203,206,210,214,218,221,225,229,233,236,240,244,248,251,255,259,263,266,270,274,278,281,285,289,293,296,300,304,308,311,315,319,323,326,330,334,338,341,345,349,353,356,360,364,368,371]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[75,81,87,93,99,105,111,117,123,129,135,141,147,153,159,165,171,177,183,189,195,201,207,213,219,225,231,237,243,249,255,261,267,273,279,285,291,297,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,543,549]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,-1,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"AtkUp","name":"ATK","bShowPercent":true,"value":10}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1071","abilityKey":"Chaos071","name":"Chaos","element":"Lakshana","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_kaesi1","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1300,1404,1508,1612,1716,1820,1924,2028,2132,2236,2340,2444,2548,2652,2756,2860,2964,3068,3172,3276,3380,3484,3588,3692,3796,3900,4004,4108,4212,4316,4420,4524,4628,4732,4836,4940,5044,5148,5252,5356,5460,5564,5668,5772,5876,5980,6084,6188,6292,6396,6500,6604,6708,6812,6916,7020,7124,7228,7332,7436,7540,7644,7748,7852,7956,8060,8164,8268,8372,8476,8580,8684,8788,8892,8996,9100,9204,9308,9412,9516]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[76,82,88,94,100,106,112,119,125,131,137,143,149,155,161,167,173,179,185,192,198,204,210,216,222,228,234,240,246,252,258,264,271,277,283,289,295,301,307,313,319,325,331,337,344,350,356,362,368,374,380,386,392,398,404,410,416,423,429,435,441,447,453,459,465,471,477,483,489,496,502,508,514,520,526,532,538,544,550,556]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,-1,0,-1],[-1,0,0,-1,-1,0,-1],[-1,0,0,0,0,-1,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"value":16}],"breakthroughLevels":[20,30,40,50,60,70]},{"id":"1076","abilityKey":"Shinku","name":"Shinku","element":"Cosmos","rarity":5,"icon":"/Game/UI/UI_Icon/AvatarImage/200/player_zhenhong","stats":[{"id_stats":"HPMaxBase","name":"HP","bShowPercent":false,"values":[1330,1436,1543,1649,1756,1862,1968,2075,2181,2288,2394,2500,2607,2713,2820,2926,3032,3139,3245,3352,3458,3564,3671,3777,3884,3990,4096,4203,4309,4416,4522,4628,4735,4841,4948,5054,5160,5267,5373,5480,5586,5692,5799,5905,6012,6118,6224,6331,6437,6544,6650,6756,6863,6969,7076,7182,7288,7395,7501,7608,7714,7820,7927,8033,8140,8246,8352,8459,8565,8672,8778,8884,8991,9097,9204,9310,9416,9523,9629,9736]},{"id_stats":"AtkBase","name":"ATK","bShowPercent":false,"values":[80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392,396]},{"id_stats":"DefBase","name":"DEF","bShowPercent":false,"values":[74,80,86,92,98,104,110,115,121,127,133,139,145,151,157,163,169,175,181,186,192,198,204,210,216,222,228,234,240,246,252,258,263,269,275,281,287,293,299,305,311,317,323,329,334,340,346,352,358,364,370,376,382,388,394,400,406,411,417,423,429,435,441,447,453,459,465,471,477,482,488,494,500,506,512,518,524,530,536,542]},{"id_stats":"CritBase","name":"CRIT Rate","bShowPercent":true,"values":[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]},{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"values":[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]}],"slots":[[-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,0,0,0,0,0,-1],[-1,-1,-1,-1,-1,-1,-1]],"ownerGridCount":3,"trait":[{"id_stats":"CritDamageBase","name":"CRIT DMG","bShowPercent":true,"value":16}],"breakthroughLevels":[20,30,40,50,60,70]}],"arcs":[{"id":"fork_yuren","name":"Umbrella","icon":"/Game/UI/UI_Icon/Fork/fork_yuren_256","quality":"purple","desc":"Remember to get enough sleep and check the weather forecast; remember to eat your meals and take an umbrella when going out.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[25,29,32,35,39,42,45,48,52,55,58,62,65,68,72,75,78,81,85,106,109,113,116,119,123,126,129,132,136,157,160,164,167,170,174,177,180,183,187,208,211,215,218,221,225,228,231,234,238,259,262,266,269,272,276,279,282,285,289,310,313,317,320,323,327,330,333,336,340,362,365,369,372,375,379,382,385,388,392,395]},{"id_stats":"DefUp","name":"DEF","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_fangyu","bIsPercent":true,"values":[21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,36.8,36.8,36.8,36.8,36.8,36.8,36.8,36.8,36.8,36.8,42,42,42,42,42,42,42,42,42,42,47.2,47.2,47.2,47.2,47.2,47.2,47.2,47.2,47.2,47.2,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]},{"id_value":1,"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]}]},{"id":"fork_bopu","name":"Cosmos Daze, Wild Reverie","icon":"/Game/UI/UI_Icon/Fork/fork_bopu_256","quality":"purple","desc":"Masterpiece from Pop Re-Creator!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,15,15,15,15,15,15,15,15,15,15,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,20,20,20,20,20,20,20,20,20,20,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,25,25,25,25,25,25,25,25,25,25,25]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["18%","21%","24%","27%","30%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_mofeikesi","name":"Good Boy's Grand Adventure","icon":"/Game/UI/UI_Icon/Fork/fork_mofeikesi_256","quality":"orange","desc":"What do you see? A winged white wolf? An adorable white dog? Or perhaps…?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,434,438,442,446,450,454,458,462,466,470,474]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,27,27,27,27,27,27,27,27,27,27,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,36,36,36,36,36,36,36,36,36,36,40.5,40.5,40.5,40.5,40.5,40.5,40.5,40.5,40.5,40.5,45,45,45,45,45,45,45,45,45,45,45]}],"values":[{"id_value":0,"id_stats":"ChargeGetEfficiencyBase","name":"Charge Efficiency","icon":"/Game/UI/UI_Icon/Attribute/Icon_CostGainEfficiency","bIsPercent":true,"values":["18%","21%","24%","27%","30%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]},{"id_value":2,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["10%","11.5%","13%","14.5%","16%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["6%","7%","8%","9%","10%"]}]},{"id":"fork_jiaojuan","name":"Shiny Days","icon":"/Game/UI/UI_Icon/Fork/fork_jiaojuan_256","quality":"purple","desc":"Capturing these radiant moments, even in dreams they must go on. Regret was never beautiful, and you were never alone.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,15,15,15,15,15,15,15,15,15,15,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,20,20,20,20,20,20,20,20,20,20,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,25,25,25,25,25,25,25,25,25,25,25]}],"values":[{"id_value":0,"id_stats":"UnbalIntensity","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[48,57,66,75,84]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]}]},{"id":"fork_wuhuakuang","name":"The Forgotten","icon":"/Game/UI/UI_Icon/Fork/fork_wuhuakuang_256","quality":"purple","desc":"Even if I'm just a complement to those masterpieces… I'm still beautiful too, right?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,15,15,15,15,15,15,15,15,15,15,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,20,20,20,20,20,20,20,20,20,20,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,25,25,25,25,25,25,25,25,25,25,25]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["20%","24%","28%","32%","36%"]},{"id_value":1,"id_stats":"DefUp","name":"DEF","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_fangyu","bIsPercent":true,"values":["20%","24%","28%","32%","36%"]}]},{"id":"fork_jingmotingyuan","name":"Camellia Society","icon":"/Game/UI/UI_Icon/Fork/fork_jingmotingyuan_256","quality":"orange","desc":"Though I'm not supposed to let my composure slip onto the petals… that flower really cut deep.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[43,48,54,59,65,70,76,81,87,93,98,104,109,115,120,126,131,137,142,178,184,189,195,200,206,211,217,222,228,265,270,276,281,287,292,298,303,309,314,351,357,362,368,373,379,384,390,395,401,438,443,449,454,460,465,471,476,482,487,524,530,535,541,546,552,557,563,568,574,611,616,622,627,633,638,644,649,655,660,666]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,4.8,6,6,6,6,6,6,6,6,6,6,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,8.4,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,10.8,10.8,10.8,10.8,10.8,10.8,10.8,10.8,10.8,10.8,12,12,12,12,12,12,12,12,12,12,12]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[5,5,5,5,5]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["12%","14%","16%","18%","20%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["5%","5%","5%","5%","5%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[25,25,25,25,25]},{"id_value":4,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["24%","28%","32%","36%","40%"]},{"id_value":5,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["18%","21%","24%","27%","30%"]}]},{"id":"fork_oulaquantao","name":"Oraora!","icon":"/Game/UI/UI_Icon/Fork/fork_oulaquantao_256","quality":"purple","desc":"It's said that in a faraway place, Ora Puncher has a cousin, Muda Puncher.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[25,29,32,35,39,42,45,48,52,55,58,62,65,68,72,75,78,81,85,106,109,113,116,119,123,126,129,132,136,157,160,164,167,170,174,177,180,183,187,208,211,215,218,221,225,228,231,234,238,259,262,266,269,272,276,279,282,285,289,310,313,317,320,323,327,330,333,336,340,362,365,369,372,375,379,382,385,388,392,395]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,30,30,30,30,30,30,30,30,30,30,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2%","2.4%","2.8%","3.2%","3.6%"]}]},{"id":"fork_lingganzhongjiezhe","name":"Mind Royale","icon":"/Game/UI/UI_Icon/Fork/fork_lingganzhongjiezhe_256","quality":"purple","desc":"Inspiration is like potato chips—crunching and crackling, leaving scattered crumbs everywhere, without rhyme or reason.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[36,40,45,50,54,59,64,68,73,78,82,87,91,96,101,105,110,115,119,149,154,158,163,168,172,177,182,186,191,222,226,231,235,240,245,249,254,259,263,293,298,302,307,312,316,321,326,330,335,366,370,375,379,384,389,393,398,403,407,437,442,446,451,456,460,465,470,474,479,509,513,518,522,527,532,536,541,546,550,555]},{"id_stats":"UnbalIntensityBase","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,30,30,30,30,30,30,30,30,30,30,36,36,36,36,36,36,36,36,36,36,42,42,42,42,42,42,42,42,42,42,48,48,48,48,48,48,48,48,48,48,54,54,54,54,54,54,54,54,54,54,60,60,60,60,60,60,60,60,60,60,60]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,12,14,16,18]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_rishi","name":"Day Off","icon":"/Game/UI/UI_Icon/Fork/fork_rishi_256","quality":"orange","desc":"Eclipse said, \"Let there be double days off.\"\nAnd thus, the double days off came into being (Eclipse Exclusive Edition).","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"ChargeGetEfficiencyBase","name":"Charge Efficiency","icon":"/Game/UI/UI_Icon/Attribute/Icon_CostGainEfficiency","bIsPercent":true,"values":[13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,23.1,23.1,23.1,23.1,23.1,23.1,23.1,23.1,23.1,23.1,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,29.7,29.7,29.7,29.7,29.7,29.7,29.7,29.7,29.7,29.7,33,33,33,33,33,33,33,33,33,33,33]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["30%","35%","40%","45%","50%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[40,40,40,40,40]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[6,7,8,9,10]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[5,5,5,5,5]},{"id_value":4,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[300,300,300,300,300]}]},{"id":"fork_dustbin","name":"Dangerous Game","icon":"/Game/UI/UI_Icon/Fork/fork_dustbin_256","quality":"blue","desc":"Let's make a bet. Loser goes broke.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[24,27,30,34,37,40,43,46,49,53,56,59,62,65,68,71,75,78,81,101,104,107,110,114,117,120,123,126,129,151,154,157,160,163,166,169,173,176,179,200,203,206,209,213,216,219,222,225,228,250,253,256,259,262,265,268,272,275,278,299,302,305,308,312,315,318,321,324,327,349,352,355,358,361,364,367,371,374,377,380]},{"id_stats":"UnbalIntensityBase","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,48,48,48,48,48,48,48,48,48,48,58,58,58,58,58,58,58,58,58,58,67,67,67,67,67,67,67,67,67,67,77,77,77,77,77,77,77,77,77,77,86,86,86,86,86,86,86,86,86,86,96,96,96,96,96,96,96,96,96,96,96]}],"values":[{"id_value":0,"id_stats":"UnbalIntensity","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[60,66,72,78,84]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_nonos","name":"First Step to Success","icon":"/Game/UI/UI_Icon/Fork/fork_nonos_256","quality":"blue","desc":"Good self-control is the first step on the road to success.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[24,27,30,34,37,40,43,46,49,53,56,59,62,65,68,71,75,78,81,101,104,107,110,114,117,120,123,126,129,151,154,157,160,163,166,169,173,176,179,200,203,206,209,213,216,219,222,225,228,250,253,256,259,262,265,268,272,275,278,299,302,305,308,312,315,318,321,324,327,349,352,355,358,361,364,367,371,374,377,380]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,12,12,12,12,12,14,14,14,14,14,14,14,14,14,14,16,16,16,16,16,16,16,16,16,16,18,18,18,18,18,18,18,18,18,18,20,20,20,20,20,20,20,20,20,20,20]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["12%","13%","14%","15%","16%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_vine","name":"Be Happy","icon":"/Game/UI/UI_Icon/Fork/fork_HugVine_256","quality":"blue","desc":"Hm? Why aren't you laughing?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[21,23,26,29,32,34,37,40,42,45,48,50,53,56,59,61,64,67,69,86,89,91,94,97,100,102,105,108,110,126,129,131,134,137,140,142,145,148,150,167,170,172,175,178,181,183,186,189,191,208,211,213,216,219,222,224,227,230,232,248,251,253,256,259,262,264,267,270,272,289,292,294,297,300,303,305,308,311,313,316]},{"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":[12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,15,15,15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,18,21,21,21,21,21,21,21,21,21,21,24,24,24,24,24,24,24,24,24,24,27,27,27,27,27,27,27,27,27,27,30,30,30,30,30,30,30,30,30,30,30]}],"values":[{"id_value":0,"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":["12%","14%","16%","18%","20%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_Prokaryon","name":"Us.","icon":"/Game/UI/UI_Icon/Fork/fork_yuanheti_256","quality":"blue","desc":"I am… you… are… you, are… it, is… me… no, I… am… us.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[24,27,30,34,37,40,43,46,49,53,56,59,62,65,68,71,75,78,81,101,104,107,110,114,117,120,123,126,129,151,154,157,160,163,166,169,173,176,179,200,203,206,209,213,216,219,222,225,228,250,253,256,259,262,265,268,272,275,278,299,302,305,308,312,315,318,321,324,327,349,352,355,358,361,364,367,371,374,377,380]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,12,12,12,12,12,14,14,14,14,14,14,14,14,14,14,16,16,16,16,16,16,16,16,16,16,18,18,18,18,18,18,18,18,18,18,20,20,20,20,20,20,20,20,20,20,20]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["12%","13%","14%","15%","16%"]}]},{"id":"fork_BitterCake","name":"The Good, The Bad, The Bitter","icon":"/Game/UI/UI_Icon/Fork/fork_BitterCake_256","quality":"purple","desc":"A touch of bitterness, but it'll still put you in a good mood, won't it?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,15,15,15,15,15,15,15,15,15,15,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,20,20,20,20,20,20,20,20,20,20,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,25,25,25,25,25,25,25,25,25,25,25]}],"values":[{"id_value":0,"id_stats":"DefUp","name":"DEF","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_fangyu","bIsPercent":true,"values":["26%","31%","36%","41%","46%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_appliance","name":"\"Real Music\"","icon":"/Game/UI/UI_Icon/Fork/fork_fudianling_256","quality":"blue","desc":"Waddaya mean ya prefer \"real music\"? Is this not \"real\" enough for yer taste?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[24,27,30,34,37,40,43,46,49,53,56,59,62,65,68,71,75,78,81,101,104,107,110,114,117,120,123,126,129,151,154,157,160,163,166,169,173,176,179,200,203,206,209,213,216,219,222,225,228,250,253,256,259,262,265,268,272,275,278,299,302,305,308,312,315,318,321,324,327,349,352,355,358,361,364,367,371,374,377,380]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,12,12,12,12,12,14,14,14,14,14,14,14,14,14,14,16,16,16,16,16,16,16,16,16,16,18,18,18,18,18,18,18,18,18,18,20,20,20,20,20,20,20,20,20,20,20]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["12%","13%","14%","15%","16%"]}]},{"id":"fork_TigerTally","name":"Ready-Ready","icon":"/Game/UI/UI_Icon/Fork/fork_TigerTally_256","quality":"orange","desc":"Hold me close, embrace the courage and resolve that transcends the fallen—I salute you, great Tiger warriors.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["15%","18.8%","22.5%","26.2%","30%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["15%","18.8%","22.5%","26.2%","30%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[15,15,15,15,15]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[15,15,15,15,15]},{"id_value":4,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","12.5%","15%","17.5%","20%"]},{"id_value":5,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]}]},{"id":"fork_BitGame","name":"Blow up the Crowd","icon":"/Game/UI/UI_Icon/Fork/fork_BitGame_256","quality":"orange","desc":"Shh… it's coming, it's coming! IT'S COMING!!!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","11%","12%","13%","14%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2%","2.3%","2.6%","2.9%","3.2%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[2,2,2,2,2]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["12%","14%","16%","18%","20%"]},{"id_value":4,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2%","2.3%","2.6%","2.9%","3.2%"]}]},{"id":"fork_BlackBook","name":"Youthful Fantasy","icon":"/Game/UI/UI_Icon/Fork/fork_BlackBook_256","quality":"orange","desc":"\"Secret\"… The moment it was recorded, it was already known by everyone.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,15,15,15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,18,21,21,21,21,21,21,21,21,21,21,24,24,24,24,24,24,24,24,24,24,27,27,27,27,27,27,27,27,27,27,30,30,30,30,30,30,30,30,30,30,30]}],"values":[{"id_value":0,"id_stats":"UnbalIntensity","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[60,67,74,81,88]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[5,5,5,5,5]},{"id_value":3,"id_stats":"DamageUpChaosBase","name":"Chaos DMG Bonus","icon":"/Game/UI/UI_Icon/Attribute/Icon_DamageUp_black","bIsPercent":true,"values":["20%","24%","28%","32%","36%"]},{"id_value":4,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2%","2.3%","2.6%","2.9%","3.2%"]}]},{"id":"fork_mamen","name":"Contemplative Cat","icon":"/Game/UI/UI_Icon/Fork/fork_mamen_256","quality":"orange","desc":"The meaning of life… the reason for existence… the answer to the universe is… 4… balls of yarn!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"CritDamageBase","name":"CRIT DMG","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai","bIsPercent":true,"values":[17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,22,22,22,22,22,22,22,22,22,22,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,35.2,35.2,35.2,35.2,35.2,35.2,35.2,35.2,35.2,35.2,39.6,39.6,39.6,39.6,39.6,39.6,39.6,39.6,39.6,39.6,44,44,44,44,44,44,44,44,44,44,44]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[100000,100000,100000,100000,100000]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2.5%","3%","3.5%","4%","4.5%"]}]},{"id":"fork_Nakupeda","name":"Your Happiness is Priceless","icon":"/Game/UI/UI_Icon/Fork/fork_Nakupeda_256","quality":"orange","desc":"Mm, mm-hmm, mm-hmm-hmm-hmm-hmm-hmm-hmm! (Give me Fons— You'll be happy, and I'll be happy too!)","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"DefUp","name":"DEF","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_fangyu","bIsPercent":true,"values":[15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,23.1,23.1,23.1,23.1,23.1,23.1,23.1,23.1,23.1,23.1,27,27,27,27,27,27,27,27,27,27,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,34.6,34.6,34.6,34.6,34.6,34.6,34.6,34.6,34.6,34.6,38.5,38.5,38.5,38.5,38.5,38.5,38.5,38.5,38.5,38.5,38.5]}],"values":[{"id_value":0,"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":["24%","28%","32%","36%","40%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["20%","25%","30%","35%","40%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["20%","25%","30%","35%","40%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[15,15,15,15,15]},{"id_value":4,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","12.5%","15%","17.5%","20%"]},{"id_value":5,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[30,30,30,30,30]}]},{"id":"fork_wushoutieyu","name":"Raging Flames","icon":"/Game/UI/UI_Icon/Fork/fork_wushoutieyu_256","quality":"orange","desc":"The desire for speed flows through my veins, the roar of engines thunders in my chest! Come on, let's go! Step onto this racetrack where we pledge our souls!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[43,48,54,59,65,70,76,81,87,93,98,104,109,115,120,126,131,137,142,178,184,189,195,200,206,211,217,222,228,265,270,276,281,287,292,298,303,309,314,351,357,362,368,373,379,384,390,395,401,438,443,449,454,460,465,471,476,482,487,524,530,535,541,546,552,557,563,568,574,611,616,622,627,633,638,644,649,655,660,666]},{"id_stats":"CritDamageBase","name":"CRIT DMG","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","12.5%","15%","17.5%","20%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["5%","6%","7%","8%","9%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["15%","17.5%","20%","22.5%","25%"]}]},{"id":"fork_Arachne","name":"Eternal Waltz","icon":"/Game/UI/UI_Icon/Fork/fork_Arachne_256","quality":"orange","desc":"Dance to the beat, feel the dizzying sensation as if the world is ending, until forever!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[28,31,35,38,42,46,49,53,56,60,64,67,71,74,78,82,85,89,92,114,118,121,125,128,132,136,139,143,146,168,172,175,179,182,186,190,193,197,200,223,227,230,234,237,241,245,248,252,255,278,282,285,289,292,296,300,303,307,310,333,337,340,344,347,351,355,358,362,365,388,392,395,399,402,406,410,413,417,420,424]},{"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":[16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,20.6,20.6,20.6,20.6,20.6,20.6,20.6,20.6,20.6,20.6,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,28.9,28.9,28.9,28.9,28.9,28.9,28.9,28.9,28.9,28.9,33,33,33,33,33,33,33,33,33,33,37.1,37.1,37.1,37.1,37.1,37.1,37.1,37.1,37.1,37.1,41.2,41.2,41.2,41.2,41.2,41.2,41.2,41.2,41.2,41.2,41.2]}],"values":[{"id_value":0,"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":["20%","23%","26%","29%","32%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]}]},{"id":"fork_PoliceRat","name":"Hethereau's Keeper","icon":"/Game/UI/UI_Icon/Fork/fork_PoliceRat_256","quality":"orange","desc":"Once again, another day has passed peacefully. Hats off to Officer Whisker!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["15%","17.5%","20%","22.5%","25%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["15%","17.5%","20%","22.5%","25%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["1%","1.2%","1.5%","1.8%","2%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[60,60,60,60,60]}]},{"id":"fork_tuansanlang","name":"The Great Thief","icon":"/Game/UI/UI_Icon/Fork/fork_tuansanlang_256","quality":"purple","desc":"The moment I saw you, I was captivated. Your soft fur, that mischievous look on your face—I was mesmerized for so long that it wasn't until you left that I realized… where are my grilled skewers?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"UnbalIntensityBase","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,60,60,60,60,60,60,60,60,60,60,72,72,72,72,72,72,72,72,72,72,84,84,84,84,84,84,84,84,84,84,96,96,96,96,96,96,96,96,96,96,108,108,108,108,108,108,108,108,108,108,120,120,120,120,120,120,120,120,120,120,120]}],"values":[{"id_value":0,"id_stats":"UnbalIntensity","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[70,84,98,112,126]}]},{"id":"fork_Kite","name":"Watch Your Heads!","icon":"/Game/UI/UI_Icon/Fork/fork_Kite_256","quality":"purple","desc":"Hehehe… Don't be scared, it's just a laughing kite…","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"CritDamageBase","name":"CRIT DMG","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai","bIsPercent":true,"values":[16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,20,20,20,20,20,20,20,20,20,20,24,24,24,24,24,24,24,24,24,24,28,28,28,28,28,28,28,28,28,28,32,32,32,32,32,32,32,32,32,32,36,36,36,36,36,36,36,36,36,36,40,40,40,40,40,40,40,40,40,40,40]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[15,15,15,15,15]}]},{"id":"fork_PaperPlane","name":"Clear Skies","icon":"/Game/UI/UI_Icon/Fork/fork_PaperPlane_256","quality":"purple","desc":"Formation complete, securing air superiority.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,15,15,15,15,15,15,15,15,15,15,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,20,20,20,20,20,20,20,20,20,20,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,25,25,25,25,25,25,25,25,25,25,25]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["20%","23.8%","27.5%","31.2%","35%"]}]},{"id":"fork_spider","name":"Failing You, Heavy in My Heart","icon":"/Game/UI/UI_Icon/Fork/fork_spider_256","quality":"purple","desc":"When you see red reflected in your teacher's eyes, that usually means you're about to fail the class.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"UnbalIntensityBase","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,60,60,60,60,60,60,60,60,60,60,72,72,72,72,72,72,72,72,72,72,84,84,84,84,84,84,84,84,84,84,96,96,96,96,96,96,96,96,96,96,108,108,108,108,108,108,108,108,108,108,120,120,120,120,120,120,120,120,120,120,120]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]},{"id_value":1,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["1%","1.1%","1.3%","1.5%","1.6%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2%","2.3%","2.6%","2.9%","3.2%"]}]},{"id":"fork_yaodao","name":"Drawn Blade","icon":"/Game/UI/UI_Icon/Fork/fork_yaodao_256","quality":"purple","desc":"Lone moon, dark clouds. Blade drawn, soul departs. Form fades, blade weeps.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[25,29,32,35,39,42,45,48,52,55,58,62,65,68,72,75,78,81,85,106,109,113,116,119,123,126,129,132,136,157,160,164,167,170,174,177,180,183,187,208,211,215,218,221,225,228,231,234,238,259,262,266,269,272,276,279,282,285,289,310,313,317,320,323,327,330,333,336,340,362,365,369,372,375,379,382,385,388,392,395]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,30,30,30,30,30,30,30,30,30,30,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2%","2.3%","2.6%","2.9%","3.2%"]}]},{"id":"fork_koinobori","name":"A Time Will Come","icon":"/Game/UI/UI_Icon/Fork/fork_koinobori_256","quality":"purple","desc":"Descending from the heavens, returning to the heavens. Believing in that destined day, we leap into this endless migration with no visible end.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,12,12,12,12,12,14,14,14,14,14,14,14,14,14,14,16,16,16,16,16,16,16,16,16,16,18,18,18,18,18,18,18,18,18,18,20,20,20,20,20,20,20,20,20,20,20]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]},{"id_value":1,"id_stats":"DefUp","name":"DEF","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_fangyu","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]},{"id_value":2,"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":["10%","12%","14%","16%","18%"]}]},{"id":"fork_snowman","name":"The Fools' Spring","icon":"/Game/UI/UI_Icon/Fork/fork_snowman_256","quality":"purple","desc":"If I were a cicada, I'd still sing with my raspy voice.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[25,29,32,35,39,42,45,48,52,55,58,62,65,68,72,75,78,81,85,106,109,113,116,119,123,126,129,132,136,157,160,164,167,170,174,177,180,183,187,208,211,215,218,221,225,228,231,234,238,259,262,266,269,272,276,279,282,285,289,310,313,317,320,323,327,330,333,336,340,362,365,369,372,375,379,382,385,388,392,395]},{"id_stats":"DefUp","name":"DEF","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_fangyu","bIsPercent":true,"values":[21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,31.5,36.8,36.8,36.8,36.8,36.8,36.8,36.8,36.8,36.8,36.8,42,42,42,42,42,42,42,42,42,42,47.2,47.2,47.2,47.2,47.2,47.2,47.2,47.2,47.2,47.2,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5,52.5]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["18%","21%","24%","27%","30%"]}]},{"id":"fork_BoxingCandy","name":"Fluff of Fortitude","icon":"/Game/UI/UI_Icon/Fork/fork_BoxingCandy_256","quality":"orange","desc":"Hunter Guild Commemorative Arc: So fluffy!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["22%","26%","30%","34%","38%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["28%","34%","40%","46%","52%"]}]},{"id":"fork_KnightCandy","name":"Fluff of Ferocity","icon":"/Game/UI/UI_Icon/Fork/fork_KnightCandy_256","quality":"orange","desc":"Hunter Guild Commemorative Arc: Discard all that is useless…","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["4%","4.8%","5.6%","6.4%","7.2%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]}]},{"id":"fork_ThiefCandy","name":"Fluff of Finesse","icon":"/Game/UI/UI_Icon/Fork/fork_ThiefCandy_256","quality":"orange","desc":"Hunter Guild Commemorative Arc: Not every encounter is a pleasant one…","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["8%","9.6%","11.2%","12.8%","14.4%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]}]},{"id":"fork_MotorCandy","name":"Fluff of Fleetness","icon":"/Game/UI/UI_Icon/Fork/fork_MotorCandy_256","quality":"orange","desc":"Hunter Guild Commemorative Arc: MAD FLUFF!","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"CritDamageBase","name":"CRIT DMG","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baojishanghai","bIsPercent":true,"values":[17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,22,22,22,22,22,22,22,22,22,22,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,26.4,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,30.8,35.2,35.2,35.2,35.2,35.2,35.2,35.2,35.2,35.2,35.2,39.6,39.6,39.6,39.6,39.6,39.6,39.6,39.6,39.6,39.6,44,44,44,44,44,44,44,44,44,44,44]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[1,1,1,1,1]},{"id_value":1,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["5%","6%","7%","8%","9%"]}]},{"id":"fork_BlastCandy","name":"Fluff of Fearlessness","icon":"/Game/UI/UI_Icon/Fork/fork_BlastCandy_256","quality":"orange","desc":"Hunter Guild Commemorative Arc: Cool fluffs don't look at explosions.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,11,11,11,11,11,11,11,11,11,11,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,22,22,22,22,22,22,22,22,22,22,22]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["25%","30%","35%","40%","45%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]}]},{"id":"fork_Crowbar","name":"Time Bandit","icon":"/Game/UI/UI_Icon/Fork/fork_Qiaoqiao_256","quality":"purple","desc":"Time is like water next to a sponge. Look away for only a second, and it vanishes.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[31,35,39,43,47,51,55,59,63,68,72,76,80,84,88,92,96,100,104,129,133,137,141,145,149,153,157,161,165,190,194,198,202,206,210,214,218,222,226,251,255,259,263,267,271,275,279,283,287,312,316,320,324,328,332,336,340,344,348,373,377,381,385,389,393,397,401,405,409,435,439,443,447,451,455,459,463,467,471,475]},{"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,12.5,15,15,15,15,15,15,15,15,15,15,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,17.5,20,20,20,20,20,20,20,20,20,20,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,25,25,25,25,25,25,25,25,25,25,25]}],"values":[{"id_value":0,"id_stats":"UnbalIntensity","name":"Break Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_strength_qingxian","bIsPercent":false,"values":[90,108,126,144,162]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[50,50,50,50,50]}]},{"id":"fork_Castle","name":"Call of the Twisted City","icon":"/Game/UI/UI_Icon/Fork/fork_Castle_256","quality":"purple","desc":"When the world begins to warp, crying out in ways no one can understand, who among us can hold on to their sanity?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[25,29,32,35,39,42,45,48,52,55,58,62,65,68,72,75,78,81,85,106,109,113,116,119,123,126,129,132,136,157,160,164,167,170,174,177,180,183,187,208,211,215,218,221,225,228,231,234,238,259,262,266,269,272,276,279,282,285,289,310,313,317,320,323,327,330,333,336,340,362,365,369,372,375,379,382,385,388,392,395]},{"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":[15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,18.8,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,22.5,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,26.2,30,30,30,30,30,30,30,30,30,30,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,33.8,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5]}],"values":[{"id_value":0,"id_stats":"HealUp","name":"Healing Bonus","icon":"/Game/UI/UI_Icon/Attribute/Icon_HealUp","bIsPercent":true,"values":["12%","14%","16%","18%","20%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[10,10,10,10,10]}]},{"id":"fork_Butterfly","name":"Reality Refuge","icon":"/Game/UI/UI_Icon/Fork/fork_Butterfly_256","quality":"orange","desc":"She told me that I was only ever a butterfly.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,15,15,15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,18,21,21,21,21,21,21,21,21,21,21,24,24,24,24,24,24,24,24,24,24,27,27,27,27,27,27,27,27,27,27,30,30,30,30,30,30,30,30,30,30,30]}],"values":[{"id_value":0,"id_stats":"DamageUpNatureBase","name":"Anima DMG Bonus","icon":"/Game/UI/UI_Icon/Attribute/Icon_DamageUp_ching","bIsPercent":true,"values":["15%","17.5%","20%","22.5%","25%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["10%","11.2%","12.5%","13.8%","15%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["20%","22.5%","25%","27.5%","30%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[6,6,6,6,6]}]},{"id":"fork_NestBird","name":"Tears Beneath the Mask","icon":"/Game/UI/UI_Icon/Fork/fork_NestBird_256","quality":"orange","desc":"Who stole my child? Was it you? Was it him? Or was it…","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[]},{"id":"fork_Whale","name":"Song of the Whale","icon":"/Game/UI/UI_Icon/Fork/fork_Whale_256","quality":"orange","desc":"The surging tide is its final farewell.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["12%","14%","16%","18%","20%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["12%","14%","16%","18%","20%"]},{"id_value":2,"id_stats":"HPMaxUp","name":"HP","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_shengming","bIsPercent":true,"values":["30%","30%","30%","30%","30%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[30,30,30,30,30]}]},{"id":"fork_Time","name":"Marching Beyond Time","icon":"/Game/UI/UI_Icon/Fork/fork_Time_256","quality":"orange","desc":"We press on, lest we rust away to nothing.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["16%","20%","24%","28%","32%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["24%","30%","36%","42%","48%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["8%","10%","12%","14%","16%"]},{"id_value":3,"id_stats":"DefIgnore","name":"Penetration","icon":"/Game/UI/UI_Icon/Attribute/Icon_DefIgnore","bIsPercent":true,"values":["12%","15%","18%","21%","24%"]},{"id_value":4,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[70,70,70,70,70]}]},{"id":"fork_Rose","name":"The Last Rose","icon":"/Game/UI/UI_Icon/Fork/fork_Rose_256","quality":"orange","desc":"On the water's surface, the last rose blooms alone. She waits… for a dear friend, or perhaps for a boundless dream.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["14%","17.5%","21%","24.5%","28%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["6%","7.5%","9%","10.5%","12%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[3,3,3,3,3]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[3,3,3,3,3]}]},{"id":"fork_worldrain","name":"The Rain That Shook the World","icon":"/Game/UI/UI_Icon/Fork/fork_worldrain_256","quality":"orange","desc":"It emerged from a downpour that turned the world upside down.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,8.8,11,11,11,11,11,11,11,11,11,11,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,13.2,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,15.4,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,17.6,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,19.8,22,22,22,22,22,22,22,22,22,22,22]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["30%","33%","36%","39%","42%"]},{"id_value":1,"id_stats":"Mag","name":"Cycle Intensity","icon":"/Game/UI/UI_Icon/Attribute/Icon_attri_surpass","bIsPercent":false,"values":[36,45,54,63,72]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[15,15,15,15,15]}]},{"id":"fork_moon","name":"Stellar Veil","icon":"/Game/UI/UI_Icon/Fork/fork_moon_256","quality":"orange","desc":"At sunrise, the lost stars are merely homeward bound.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[33,38,42,46,51,55,59,64,68,73,77,81,86,90,94,99,103,107,112,137,141,146,150,154,159,163,167,172,176,203,207,211,216,220,224,229,233,237,242,269,273,278,282,286,291,295,299,304,308,336,340,344,349,353,357,362,366,370,375,402,406,411,415,419,424,428,432,437,441,469,473,477,482,486,490,495,499,503,508,512]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,13.8,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,16.5,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,22,22,22,22,22,22,22,22,22,22,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,24.8,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5,27.5]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["12%","14.5%","17%","19.5%","21%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["2%","2.4%","2.8%","3.2%","3.6%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[5,5,5,5,5]}]},{"id":"fork_GoldWool","name":"What's Desired","icon":"/Game/UI/UI_Icon/Fork/fork_GoldWool_256","quality":"orange","desc":"And so the epic begins, and everyone sets out on the journey. As for where the road ends, does it really matter?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["20%","25%","30%","35%","40%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["40%","50%","60%","70%","80%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_LunarPhase","name":"Blushing Mirage","icon":"/Game/UI/UI_Icon/Fork/fork_LunarPhase_256","quality":"orange","desc":"Moonlight whispers a promise of unfurled wings, stirring rare passion and inspiration. But not every whisper should be trusted.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["20%","23%","26%","29%","32%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["32%","36.8%","41.6%","46.4%","51.2%"]},{"id_value":2,"id_stats":"DefIgnore","name":"Penetration","icon":"/Game/UI/UI_Icon/Attribute/Icon_DefIgnore","bIsPercent":true,"values":["12%","13.8%","15.6%","17.4%","19.2%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_Door","name":"The Wrong Gate","icon":"/Game/UI/UI_Icon/Fork/fork_Door_256","quality":"orange","desc":"Do not open that door. Do not leave this place. Wouldn't you rather stay somewhere warm?","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":[12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,15,15,15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,18,21,21,21,21,21,21,21,21,21,21,24,24,24,24,24,24,24,24,24,24,27,27,27,27,27,27,27,27,27,27,30,30,30,30,30,30,30,30,30,30,30]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["16%","20%","24%","28%","32%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["15%","18.8%","22.5%","26.2%","30%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["30%","37.5%","45%","52.5%","60%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[20,20,20,20,20]}]},{"id":"fork_DemonBlade","name":"Ravenous Blade","icon":"/Game/UI/UI_Icon/Fork/fork_DemonBlade_256","quality":"orange","desc":"Where fear takes hold, death is never far behind.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":["16%","20%","24%","28%","32%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["9%","11.2%","13.5%","15.8%","18%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[15,15,15,15,15]}]},{"id":"fork_GoldRecord","name":"Voice of the Voyager","icon":"/Game/UI/UI_Icon/Fork/fork_GoldRecord_256","quality":"orange","desc":"The languages engraved upon it remain indecipherable. Yet their message is clear enough: somewhere in the cosmos, we are not alone.","stats":[{"id_stats":"AtkBase","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":false,"values":[37,42,46,51,56,61,66,70,75,80,85,90,94,99,104,109,114,118,123,154,159,164,168,173,178,183,188,192,197,227,232,237,241,246,251,256,261,265,270,301,306,311,315,320,325,330,335,339,344,374,379,384,388,393,398,403,408,412,417,448,453,458,462,467,472,477,482,486,491,522,527,532,536,541,546,551,556,560,565,570]},{"id_stats":"CritBase","name":"CRIT Rate","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_baoji","bIsPercent":true,"values":[9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,9.6,12,12,12,12,12,12,12,12,12,12,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,14.4,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,16.8,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,19.2,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,21.6,24,24,24,24,24,24,24,24,24,24,24]}],"values":[{"id_value":0,"id_stats":"AtkUp","name":"ATK","icon":"/Game/UI/UI_Icon/Attribute/icon_attri_gongji","bIsPercent":true,"values":["24%","30%","36%","42%","48%"]},{"id_value":1,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["66%","82.5%","99%","1.2%","1.3%"]},{"id_value":2,"id_stats":"","name":" ","icon":"","bIsPercent":true,"values":["22%","27.5%","33%","38.5%","44%"]},{"id_value":3,"id_stats":"","name":" ","icon":"","bIsPercent":false,"values":[3,3,3,3,3]}]}],"arcEffects":{"fork_appliance":{"name":"Real Music","effects":[{"placeholder":0,"stat":null,"mode":"unmodellable","why":"Redirect Skill DMG is named ability damage, not a sheet stat."}]},"fork_vine":{"name":"Be Happy","effects":[{"placeholder":0,"stat":"HP","percent":true,"mode":"toggle","default":false,"why":"Heal-on-kill is conditional HP recovery for wearer."},{"placeholder":1,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_dustbin":{"name":"Dangerous Game","effects":[{"placeholder":0,"stat":"Break Intensity","mode":"toggle","default":false,"why":"Conditional Break Intensity while reducing Break."},{"placeholder":1,"stat":null,"mode":"duration","why":"Buff duration in seconds, not a stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_nonos":{"name":"First Step to Success","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Conditional ATK buff after Redirect Skill."},{"placeholder":1,"stat":null,"mode":"duration","why":"Buff duration in seconds, not a stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_Prokaryon":{"name":"Us.","effects":[{"placeholder":0,"stat":null,"mode":"unmodellable","why":"Basic Attack damage is named ability damage, not a sheet stat."}]},"fork_BitGame":{"name":"Blow up the Crowd","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Off-field ATK buff is conditional."},{"placeholder":1,"stat":"ATK","percent":true,"mode":"stacks","max_stacks":4,"default_stacks":0,"why":"ATK gained per damage trigger stacks to 4."},{"placeholder":2,"stat":null,"mode":"duration","why":"Trigger interval in seconds, not a stat."},{"placeholder":3,"stat":null,"mode":"toggle","default":false,"why":"Psyche DMG is ability/element damage, not a sheet stat."},{"placeholder":4,"stat":null,"mode":"stacks","max_stacks":10,"default_stacks":0,"why":"Named ability damage stacker; not modelled as sheet stat."}]},"fork_LunarPhase":{"name":"Blushing Mirage","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK always active."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Cosmos DMG is element damage, not unconditional sheet stat."},{"placeholder":2,"stat":"DEF","percent":true,"mode":"toggle","default":false,"why":"DEF ignore is a conditional defensive modifier."},{"placeholder":3,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_jingmotingyuan":{"name":"Camellia Society","effects":[{"placeholder":0,"stat":"CRIT DMG","percent":true,"mode":"stacks","max_stacks":4,"default_stacks":0,"why":"Crit DMG stacks when HP is reduced without damage."},{"placeholder":1,"stat":null,"mode":"duration","why":"Stack duration in seconds, not a stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Self-HP cost, not a stat."},{"placeholder":3,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."},{"placeholder":4,"stat":null,"mode":"unmodellable","why":"Incantation DMG is named attack damage, not a sheet stat."},{"placeholder":5,"stat":null,"mode":"unmodellable","why":"Incantation DMG is named attack damage, not a sheet stat."}]},"fork_mamen":{"name":"Contemplative Cat","effects":[{"placeholder":0,"stat":null,"mode":"unmodellable","why":"Fons threshold only gates the effect; not a sheet stat."},{"placeholder":1,"stat":null,"mode":"stacks","max_stacks":10,"default_stacks":0,"why":"Cosmos DMG is element damage, stacked per Fons threshold."}]},"fork_rishi":{"name":"Day Off","effects":[{"placeholder":0,"stat":"Charge Efficiency","percent":true,"mode":"always","why":"Flat Charge Efficiency bonus while equipped."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Ultimate Energy restore amount is not a sheet stat."},{"placeholder":3,"stat":null,"mode":"stacks","max_stacks":5,"default_stacks":0,"why":"Count of restores, not a sheet stat."},{"placeholder":4,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_Arachne":{"name":"Eternal Waltz","effects":[{"placeholder":0,"stat":"HP","percent":true,"mode":"always","why":"Flat Max HP bonus while equipped."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Mental DMG is element/ability damage, not a sheet stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_BlastCandy":{"name":"Fluff of Fearlessness","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"ATK buff after Ultimate, conditional."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_KnightCandy":{"name":"Fluff of Ferocity","effects":[{"placeholder":0,"stat":"CRIT DMG","percent":true,"mode":"stacks","max_stacks":10,"default_stacks":0,"why":"Crit DMG stacks on crit hits."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_ThiefCandy":{"name":"Fluff of Finesse","effects":[{"placeholder":0,"stat":"Universal DMG%","percent":true,"mode":"stacks","max_stacks":3,"default_stacks":0,"why":"Damage bonus is universal and stacks on Critical Dodge."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_MotorCandy":{"name":"Fluff of Fleetness","effects":[{"placeholder":0,"stat":null,"mode":"duration","why":"1s tick interval, not a stat."},{"placeholder":1,"stat":"ATK","percent":true,"mode":"stacks","max_stacks":5,"default_stacks":0,"why":"ATK stacks while active up to 5."}]},"fork_BoxingCandy":{"name":"Fluff of Fortitude","effects":[{"placeholder":0,"stat":"Universal DMG%","percent":true,"mode":"toggle","default":false,"why":"DMG bonus is universal and conditionally higher below 50% HP."},{"placeholder":1,"stat":"Universal DMG%","percent":true,"mode":"toggle","default":false,"why":"Higher conditional tier of same DMG bonus."}]},"fork_mofeikesi":{"name":"Good Boy's Grand Adventure","effects":[{"placeholder":0,"stat":"Charge Efficiency","percent":true,"mode":"always","why":"Flat Charge Efficiency bonus while equipped."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":2,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Team ATK buff after Ultimate."},{"placeholder":3,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Extra team ATK bonus if Ultimate controls enemies."}]},"fork_PoliceRat":{"name":"Hethereau's Keeper","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK bonus while equipped."},{"placeholder":1,"stat":null,"mode":"unmodellable","why":"Boss damage is target-specific damage, not a sheet stat."},{"placeholder":2,"stat":null,"mode":"unmodellable","why":"Summon damage based on ATK is not a sheet stat."},{"placeholder":3,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_Time":{"name":"Marching Beyond Time","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK bonus while equipped."},{"placeholder":1,"stat":"Ultimate Crit DMG","percent":true,"mode":"stacks","max_stacks":3,"default_stacks":0,"why":"Ultimate Crit DMG consumes Wastetime stacks."},{"placeholder":2,"stat":null,"mode":"stacks","max_stacks":3,"default_stacks":0,"why":"Wastetime count is a trigger resource, not a sheet stat."},{"placeholder":3,"stat":"DEF","percent":true,"mode":"toggle","default":false,"why":"DEF ignore is conditional on consuming 3 stacks."},{"placeholder":4,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_wushoutieyu":{"name":"Raging Flames","effects":[{"placeholder":0,"stat":null,"mode":"toggle","default":false,"why":"Redirect Skill/Ultimate DMG is named ability damage, not a sheet stat."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":2,"stat":null,"mode":"stacks","max_stacks":2,"default_stacks":0,"why":"Stack count for named ability damage, not a sheet stat."},{"placeholder":3,"stat":null,"mode":"toggle","default":false,"why":"Lakshana DMG is element damage, not always-on sheet stat."}]},"fork_DemonBlade":{"name":"Ravenous Blade","effects":[{"placeholder":0,"stat":"CRIT Rate","percent":true,"mode":"always","why":"Flat Crit Rate while equipped."},{"placeholder":1,"stat":"CRIT DMG","percent":true,"mode":"stacks","max_stacks":7,"default_stacks":0,"why":"Crit DMG stacks when dealing Incantation DMG."},{"placeholder":2,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_TigerTally":{"name":"Ready-Ready","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK bonus while equipped."},{"placeholder":1,"stat":null,"mode":"unmodellable","why":"Basic Attack/Critical Riposte damage is named ability damage."},{"placeholder":2,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":3,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":4,"stat":null,"mode":"unmodellable","why":"Boss damage is target-specific damage, not a sheet stat."},{"placeholder":5,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_Butterfly":{"name":"Reality Refuge","effects":[{"placeholder":0,"stat":null,"mode":"toggle","default":false,"why":"Anima DMG is element damage, not a sheet stat."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Attachment DMG is named ability damage, not a sheet stat."},{"placeholder":2,"stat":null,"mode":"toggle","default":false,"why":"Higher conditional tier of same named ability damage."},{"placeholder":3,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_Whale":{"name":"Song of the Whale","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK bonus while equipped."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Damage to Broken enemies is conditional target damage."},{"placeholder":2,"stat":"HP","percent":true,"mode":"toggle","default":false,"why":"HP recovery on Broken enemy defeat."},{"placeholder":3,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_moon":{"name":"Stellar Veil","effects":[{"placeholder":0,"stat":null,"mode":"toggle","default":false,"why":"Psyche DMG is element damage, not a sheet stat."},{"placeholder":1,"stat":"CRIT DMG","percent":true,"mode":"stacks","max_stacks":10,"default_stacks":0,"why":"Crit DMG stacks on Psyche DMG hits."},{"placeholder":2,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_NestBird":{"name":"Tears Beneath the Mask","effects":[{"placeholder":0,"stat":null,"mode":"unmodellable","why":"Damage reduction on marked enemies is not a wearer sheet stat."}]},"fork_Rose":{"name":"The Last Rose","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK bonus while equipped."},{"placeholder":1,"stat":"CRIT DMG","percent":true,"mode":"stacks","max_stacks":10,"default_stacks":0,"why":"Crit DMG stacks from Chaos Thorn."},{"placeholder":2,"stat":null,"mode":"duration","why":"Stack duration in seconds, not a stat."},{"placeholder":3,"stat":null,"mode":"duration","why":"Duration of immediate stack grant, not a stat."}]},"fork_worldrain":{"name":"The Rain That Shook the World","effects":[{"placeholder":0,"stat":null,"mode":"toggle","default":false,"why":"Cosmos DMG is element damage, not a sheet stat."},{"placeholder":1,"stat":"Cycle Intensity","mode":"toggle","default":false,"why":"Flat Cycle Intensity bonus after Redirect Skill."},{"placeholder":2,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_Door":{"name":"The Wrong Gate","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK bonus while equipped."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Anima DMG is element damage, not a sheet stat."},{"placeholder":2,"stat":"Universal DMG%","percent":true,"mode":"toggle","default":false,"why":"All allies' DMG is a universal damage buff."},{"placeholder":3,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_GoldRecord":{"name":"Voice of the Voyager","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"always","why":"Flat ATK bonus while equipped."},{"placeholder":1,"stat":null,"mode":"unmodellable","why":"Support Skill Crit DMG is named ability damage."},{"placeholder":2,"stat":null,"mode":"stacks","max_stacks":3,"default_stacks":0,"why":"Ultimate Crit DMG stacks from Support Skill damage."},{"placeholder":3,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_GoldWool":{"name":"What's Desired","effects":[{"placeholder":0,"stat":null,"mode":"toggle","default":false,"why":"Lakshana DMG is element damage, not a sheet stat."},{"placeholder":1,"stat":"CRIT DMG","percent":true,"mode":"toggle","default":false,"why":"Conditional Crit DMG buff after Redirect Skill or Ultimate."},{"placeholder":2,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_Nakupeda":{"name":"Your Happiness is Priceless","effects":[{"placeholder":0,"stat":"HP","percent":true,"mode":"always","why":"Flat HP bonus while equipped."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Team healing/Shield/HP effects are not wearer sheet stats."},{"placeholder":2,"stat":null,"mode":"toggle","default":false,"why":"Shield amount is not a wearer sheet stat."},{"placeholder":3,"stat":null,"mode":"duration","why":"Shield duration in seconds, not a stat."},{"placeholder":4,"stat":null,"mode":"toggle","default":false,"why":"Team HP recovery is not a wearer sheet stat."},{"placeholder":5,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_BlackBook":{"name":"Youthful Fantasy","effects":[{"placeholder":0,"stat":"Break Intensity","mode":"always","why":"Flat Break Intensity bonus while equipped."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Chain count is a trigger resource, not a stat."},{"placeholder":3,"stat":null,"mode":"toggle","default":false,"why":"Chaos DMG is element damage, not a sheet stat."},{"placeholder":4,"stat":null,"mode":"unmodellable","why":"Break Damage scaling is not a wearer sheet stat."}]},"fork_koinobori":{"name":"A Time Will Come","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Conditional team ATK bonus when team comp requirement is met."},{"placeholder":1,"stat":"DEF","percent":true,"mode":"toggle","default":false,"why":"Conditional team DEF bonus when team comp requirement is met."},{"placeholder":2,"stat":"HP","percent":true,"mode":"toggle","default":false,"why":"Conditional team HP bonus when team comp requirement is met."}]},"fork_Castle":{"name":"Call of the Twisted City","effects":[{"placeholder":0,"stat":"Healing Bonus","percent":true,"mode":"toggle","default":false,"why":"Conditional Healing Bonus after Redirect Skill."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_PaperPlane":{"name":"Clear Skies","effects":[{"placeholder":0,"stat":null,"mode":"unmodellable","why":"Redirect Skill/Ultimate DMG is named ability damage, not a sheet stat."}]},"fork_bopu":{"name":"Cosmos Daze, Wild Reverie","effects":[{"placeholder":0,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":1,"stat":"Universal DMG%","percent":true,"mode":"toggle","default":false,"why":"Damage dealt bonus is universal and conditional after Support Skill."},{"placeholder":2,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_yaodao":{"name":"Drawn Blade","effects":[{"placeholder":0,"stat":null,"mode":"unmodellable","why":"Incantation DMG based on ATK is named ability damage."}]},"fork_spider":{"name":"Failing You, Heavy in My Heart","effects":[{"placeholder":0,"stat":null,"mode":"stacks","max_stacks":8,"default_stacks":0,"why":"Stack count for Spider Knowledge resource, not a sheet stat."},{"placeholder":1,"stat":"ATK","percent":true,"mode":"stacks","max_stacks":8,"default_stacks":0,"why":"Team ATK buff per stack consumed on Ultimate."},{"placeholder":2,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Conditional extra ATK when 8 stacks are consumed."}]},"fork_lingganzhongjiezhe":{"name":"Mind Royale","effects":[{"placeholder":0,"stat":null,"mode":"duration","why":"Ultimate Energy amount is not a sheet stat."},{"placeholder":1,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_oulaquantao":{"name":"Oraora!","effects":[{"placeholder":0,"stat":null,"mode":"duration","why":"Stack duration in seconds, not a stat."},{"placeholder":1,"stat":null,"mode":"stacks","max_stacks":10,"default_stacks":0,"why":"Basic Attack DMG is named ability damage, not a sheet stat."}]},"fork_jiaojuan":{"name":"Shiny Days","effects":[{"placeholder":0,"stat":"Break Intensity","mode":"always","why":"Flat Break Intensity bonus while equipped."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Damage against Broken units is target-specific damage, not a sheet stat."}]},"fork_snowman":{"name":"The Fools' Spring","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Conditional ATK buff while shielded."}]},"fork_wuhuakuang":{"name":"The Forgotten","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Conditional ATK buff above 50% HP."},{"placeholder":1,"stat":"DEF","percent":true,"mode":"toggle","default":false,"why":"Conditional DEF buff below 50% HP."}]},"fork_BitterCake":{"name":"The Good, The Bad, The Bitter","effects":[{"placeholder":0,"stat":"DEF","percent":true,"mode":"toggle","default":false,"why":"Conditional DEF buff when taking damage."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Cooldown in seconds, not a stat."}]},"fork_tuansanlang":{"name":"The Great Thief","effects":[{"placeholder":0,"stat":"Break Intensity","mode":"toggle","default":false,"why":"Conditional team Break Intensity buff for same Esper Type."}]},"fork_Crowbar":{"name":"Time Bandit","effects":[{"placeholder":0,"stat":"Break Intensity","mode":"toggle","default":false,"why":"Conditional Break Intensity buff after Redirect Skill."},{"placeholder":1,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]},"fork_yuren":{"name":"Umbrella","effects":[{"placeholder":0,"stat":"HP","percent":true,"mode":"always","why":"Flat HP bonus while equipped."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Shield strength is not a wearer sheet stat."}]},"fork_Kite":{"name":"Watch Your Heads!","effects":[{"placeholder":0,"stat":"ATK","percent":true,"mode":"toggle","default":false,"why":"Conditional ATK buff after Redirect Skill."},{"placeholder":1,"stat":null,"mode":"toggle","default":false,"why":"Lakshana DMG is element damage, not a sheet stat."},{"placeholder":2,"stat":null,"mode":"duration","why":"Duration in seconds, not a stat."}]}}} diff --git a/src/generated/icons.empty.json b/src/generated/icons.empty.json new file mode 100644 index 0000000..e4aacb4 --- /dev/null +++ b/src/generated/icons.empty.json @@ -0,0 +1,6 @@ +{ + "format": "nte-icons", + "format_version": 1, + "_note": "The single-file build's stand-in manifest. Empty on purpose: with no entries, Icon renders the fallback and the page never requests an image it does not carry.", + "files": {} +} diff --git a/src/generated/icons.json b/src/generated/icons.json new file mode 100644 index 0000000..86a5703 --- /dev/null +++ b/src/generated/icons.json @@ -0,0 +1,78 @@ +{ + "format": "nte-icons", + "format_version": 1, + "files": { + "esper:Sagiri": "player_003-ace97f94.webp", + "esper:Lacrimosa": "player_004-874ed495.webp", + "esper:Skia": "player_008-4976544f.webp", + "esper:Nanally": "player_010-924dc73d.webp", + "esper:Mint019": "player_019-a75c3fbd.webp", + "esper:Haniel": "player_020-3e088a55.webp", + "esper:Edgar": "player_021-6cfb115e.webp", + "esper:Cang": "player_028-79597e4e.webp", + "esper:Hathor": "player_012-36c8b09f.webp", + "esper:Adler": "player_015-ddebe8cc.webp", + "esper:Zankou": "player_canhong-8fd9dc5e.webp", + "esper:Fadia": "player_027-b3e5e8dc.webp", + "esper:Female046": "player_046-b5837c27.webp", + "esper:Female051": "player_009-b9f7ef78.webp", + "esper:Jin": "player_013-bf2054be.webp", + "esper:Daffodill": "player_005-712a486b.webp", + "esper:Kuhara": "player_104-e857d709.webp", + "esper:Mitsuki": "player_haiyue-28720124.webp", + "esper:Radio072": "player_lingke-a6dfa678.webp", + "esper:Chiichan073": "player_073-6a824f1f.webp", + "esper:Oneiroi": "player_yiluoyi-2eeff6ec.webp", + "esper:Chaos071": "player_kaesi1-043cca1a.webp", + "esper:Shinku": "player_zhenhong-1c5f3031.webp", + "arc:fork_yuren": "fork_yuren_256-727dde45.webp", + "arc:fork_bopu": "fork_bopu_256-e045cc0d.webp", + "arc:fork_mofeikesi": "fork_mofeikesi_256-db984ecf.webp", + "arc:fork_jiaojuan": "fork_jiaojuan_256-769fdf83.webp", + "arc:fork_wuhuakuang": "fork_wuhuakuang_256-ea10c6c4.webp", + "arc:fork_jingmotingyuan": "fork_jingmotingyuan_256-eccbc72b.webp", + "arc:fork_oulaquantao": "fork_oulaquantao_256-bcc71d33.webp", + "arc:fork_lingganzhongjiezhe": "fork_lingganzhongjiezhe_256-dd4950fd.webp", + "arc:fork_rishi": "fork_rishi_256-e4137b85.webp", + "arc:fork_dustbin": "fork_dustbin_256-6595915b.webp", + "arc:fork_nonos": "fork_nonos_256-4cb5e0fa.webp", + "arc:fork_vine": "fork_HugVine_256-aaa93ce6.webp", + "arc:fork_Prokaryon": "fork_yuanheti_256-087d4df9.webp", + "arc:fork_BitterCake": "fork_BitterCake_256-2498fb35.webp", + "arc:fork_appliance": "fork_fudianling_256-fe144d13.webp", + "arc:fork_TigerTally": "fork_TigerTally_256-47cfb268.webp", + "arc:fork_BitGame": "fork_BitGame_256-0cb5217a.webp", + "arc:fork_BlackBook": "fork_BlackBook_256-56849e90.webp", + "arc:fork_mamen": "fork_mamen_256-2d0a8b9a.webp", + "arc:fork_Nakupeda": "fork_Nakupeda_256-96338388.webp", + "arc:fork_wushoutieyu": "fork_wushoutieyu_256-d83ef63e.webp", + "arc:fork_Arachne": "fork_Arachne_256-159158f2.webp", + "arc:fork_PoliceRat": "fork_PoliceRat_256-d05f72e2.webp", + "arc:fork_tuansanlang": "fork_tuansanlang_256-937209b3.webp", + "arc:fork_Kite": "fork_Kite_256-a8b52a91.webp", + "arc:fork_PaperPlane": "fork_PaperPlane_256-2d4e5717.webp", + "arc:fork_spider": "fork_spider_256-656150ea.webp", + "arc:fork_yaodao": "fork_yaodao_256-e8f57727.webp", + "arc:fork_koinobori": "fork_koinobori_256-c8624200.webp", + "arc:fork_snowman": "fork_snowman_256-013ccbd0.webp", + "arc:fork_BoxingCandy": "fork_BoxingCandy_256-2d9a5897.webp", + "arc:fork_KnightCandy": "fork_KnightCandy_256-fea87c21.webp", + "arc:fork_ThiefCandy": "fork_ThiefCandy_256-9b9444e3.webp", + "arc:fork_MotorCandy": "fork_MotorCandy_256-fd81bc62.webp", + "arc:fork_BlastCandy": "fork_BlastCandy_256-4bd61b87.webp", + "arc:fork_Crowbar": "fork_Qiaoqiao_256-5fad717f.webp", + "arc:fork_Castle": "fork_Castle_256-3ce261aa.webp", + "arc:fork_Butterfly": "fork_Butterfly_256-1395ba48.webp", + "arc:fork_NestBird": "fork_NestBird_256-f6e28be2.webp", + "arc:fork_Whale": "fork_Whale_256-76862d07.webp", + "arc:fork_Time": "fork_Time_256-9cb02755.webp", + "arc:fork_Rose": "fork_Rose_256-d33fcc29.webp", + "arc:fork_worldrain": "fork_worldrain_256-cf0b4b4a.webp", + "arc:fork_moon": "fork_moon_256-19817a0c.webp", + "arc:fork_GoldWool": "fork_GoldWool_256-929d1333.webp", + "arc:fork_LunarPhase": "fork_LunarPhase_256-58ab7825.webp", + "arc:fork_Door": "fork_Door_256-7a125283.webp", + "arc:fork_DemonBlade": "fork_DemonBlade_256-89200ec7.webp", + "arc:fork_GoldRecord": "fork_GoldRecord_256-9e37a9a5.webp" + } +} diff --git a/src/generated/tilings.json b/src/generated/tilings.json new file mode 100644 index 0000000..c83dff0 --- /dev/null +++ b/src/generated/tilings.json @@ -0,0 +1 @@ +{"format":"nte-tilings","format_version":1,"gridSize":7,"cellCount":20,"shapes":["cell2_style1","cell2_style2","cell3_style1","cell3_style2","cell3_style3","cell3_style4","cell3_style5","cell3_style6","cell4_style1","cell4_style2","cell4_style5","cell4_style6"],"sets":["Crimson: Twin Butterflies","Devil's Blood: Curse","Diabolos","Fireflies and the Forest","Kingdom's Guard","Lost Radiance","Quiet Manor","Shadow Creed","Speedy Hedgehog","Street Boxer","Thea's Night Tavern","Tiny Big Adventure"],"boards":[{"cells":[8,9,11,12,15,16,17,18,19,22,23,24,25,26,30,31,32,37,38,39],"espers":["Sagiri","Haniel","Adler","Jin","Oneiroi"],"entries":[[0,"0a072010","00112211344433556776"],[0,"07102a10","00123311244455655677"],[0,"0a072111","00112211344433567567"],[0,"0a111712","00112311423564556777"],[0,"0a11b72","00112311423544554666"],[0,"310a722","01220133403344555666"],[0,"0a14722","00112311423344555666"],[0,"50a7122","00110223422334555666"],[0,"601a722","00112033423344555666"],[0,"0a13742","00112311423544355666"],[0,"31a7502","01220122304433455666"],[0,"0a57142","00112211324533455666"],[0,"07155a2","00123311234455455666"],[0,"50a6712","00110223322453445666"],[0,"11a72111","01220122344433567567"],[0,"11a7222","01220122344433555666"],[0,"33a1712","01220122301453445666"],[0,"31a7142","01220122304533455666"],[0,"31715a2","01230122304455455666"],[0,"11a7246","01220122344433566556"],[0,"511a257","00120331233444556566"],[0,"67115a2","00123011234455455666"],[0,"11a7257","01220122344433556566"],[1,"0050b310","00112233425644564577"],[1,"001531b0","00112334523645664677"],[1,"01315b10","00123441234562556577"],[1,"05193b0","00112341523455345366"],[1,"0a5b310","00112211324533453466"],[1,"513ab10","00120331233452445466"],[1,"05133b2","00112341523455345666"],[1,"0b35412","00123311234152445666"],[1,"0553b12","00112231425344534666"],[1,"0135b72","00123341234452455666"],[1,"0b35331","00123311234152465465"],[1,"0b35314","00123311234152465466"],[1,"3351b50","01220132401344554566"],[1,"6513b30","00112031425344534566"],[1,"0135b37","00123341234452465665"],[1,"345b014","01220112304433563566"],[1,"0551b34","00112231425344564566"],[1,"0516b34","00112331425344564566"],[1,"055b137","00112231423354365665"],[1,"315b760","01220132403344355665"],[1,"5737b10","00120311233452445466"],[1,"3153b12","01220132405344534666"],[1,"3151b42","01220132405344554666"],[1,"1153b62","01220132455344534666"],[1,"315b172","01220132403354355666"],[1,"3151b34","01220132405344564566"],[1,"315b137","01220132403354365665"],[1,"6511b34","00112031425344564566"],[1,"3157b14","01220132403344564566"],[1,"651b137","00112031423354365665"],[1,"315b771","01220132403344356556"],[2,"00001857","00112233455554667677"],[2,"00185071","00112333324455467667"],[2,"01110857","00123441235555667677"],[2,"0018857","00112333324444556566"],[2,"0a01857","00112211344443556566"],[2,"07158111","00123311234444567567"],[2,"0715822","00123311234444555666"],[2,"0132857","00123331244442556566"],[2,"0521857","00112221344443556566"],[2,"0612857","00112333124444556566"],[2,"5130857","00120331244442556566"],[2,"3160857","01220133204444556566"],[2,"0715846","00123311234444566556"],[2,"5501857","00110221344443556566"],[2,"0715857","00123311234444556566"],[2,"6610857","00112033124444556566"],[2,"11a1857","01220122344443556566"],[2,"1413857","01230112344443556566"],[2,"1173857","01230122344443556566"],[2,"1451857","01220112344443556566"],[2,"6711857","00123011234444556566"],[3,"004031b0","00112334522645664677"],[3,"01340b10","00123441233562556577"],[3,"09340b0","00123441233512551566"],[3,"14130b10","01230112344563556577"],[3,"14930b0","01230112344523552566"],[3,"345b002","01220112304433553666"],[3,"0b35430","00123311234152445665"],[3,"6b34300","00123011233142554664"],[3,"03340b7","00123441233512556566"],[3,"0055b34","00112233425344564566"],[3,"0b311114","00123411234152675677"],[3,"0b31914","00123411234152465466"],[3,"310ab14","01220133403344564566"],[3,"0b35412","00123311234152445666"],[3,"316b402","01220134203344355666"],[3,"31b3430","01230122304253445665"],[3,"0b35314","00123311234152465466"],[3,"33b1046","01230122301244566556"],[3,"14330b7","01230112344523556566"],[3,"345b014","01220112304433563566"],[3,"0551b34","00112231425344564566"],[3,"0516b34","00112331425344564566"],[3,"316b460","01220134203344355665"],[3,"6734b10","00123011233452445466"],[4,"00260730","00112223344563556776"],[4,"00131672","00112345523465366777"],[4,"0b30672","00123311244152455666"],[4,"01316172","00123441235462566777"],[4,"3901672","01220134401354155666"],[4,"310b672","01220134403354355666"],[4,"6734022","00123011233442555666"],[4,"3373602","01230122301443554666"],[4,"3360257","01220133201444556566"],[4,"0735246","00123311234442566556"],[4,"6734602","00123011233442554666"],[4,"5737602","00120311233442554666"],[4,"11131672","01230142355463566777"],[4,"11b3672","01230122344253455666"],[4,"6731222","00123011234442555666"],[4,"6331722","00123041234412555666"],[4,"3167422","01220134203344555666"],[4,"3173246","01230122304443566556"],[4,"6731246","00123011234442566556"],[4,"6734712","00123011233452445666"],[4,"5136672","00120331244352455666"],[4,"6731257","00123011234442556566"],[5,"00194600","00112345523445366377"],[5,"00109164","00112334526645764774"],[5,"00191614","00112345523465376377"],[5,"0934602","00123441233412551666"],[5,"0934650","00123441233412551566"],[5,"3904660","01220134401334155665"],[5,"06119411","00112345123455647647"],[5,"0619941","00112345123455346346"],[5,"0a19164","00112311423554365366"],[5,"0931642","00123441235412551666"],[5,"0931634","00123441235412561566"],[5,"0934614","00123441233412561566"],[5,"0659431","00112234125344536536"],[5,"3961460","01220134201344155665"],[5,"0619347","00112345123455346366"],[5,"0619554","00112344123455365366"],[6,"00190b10","00112344523655365377"],[6,"0b119011","00123411234155467467"],[6,"0a19b10","00112311423544354366"],[6,"3900b12","01220133401544154666"],[6,"14930b0","01230112344523552566"],[6,"05193b0","00112341523455345366"],[6,"39b1060","01230122301244155665"],[6,"0b31970","00123411234152455466"],[6,"00195b4","00112344523455365366"],[6,"005b917","00112234523345364664"],[6,"0b31931","00123411234152465465"],[6,"0b31914","00123411234152465466"],[6,"310b917","01220134503345364664"],[6,"05191b4","00112341523455365366"],[6,"601b917","00112034523345364664"],[7,"00810b10","00112222344563556577"],[7,"008b214","00112222344433563566"],[7,"008b612","00112222344533453666"],[8,"00046057","00112234455334667677"],[8,"00406517","00112334422554657677"],[8,"00114657","00112345523445667677"],[8,"005a746","00112233423344566556"],[8,"56040b7","00110223144533556566"],[8,"05111746","00112341523455677667"],[8,"0715846","00123311234444566556"],[8,"0a57641","00112211324433546556"],[8,"06154b7","00112334123544556566"],[8,"0527246","00112221344433566556"],[8,"0735246","00123311234442566556"],[8,"5507246","00110221344433566556"],[8,"5670246","00110233122444566556"],[8,"0334657","00123441233412556566"],[8,"3457046","01220112304433566556"],[8,"3457560","01220112304433455665"],[8,"6734650","00123011233442554566"],[8,"5737046","00120311233442566556"],[8,"0546746","00112331422344566556"],[8,"5567046","00110221344233566556"],[8,"0546757","00112331422344556566"],[8,"11541671","01220132455334567667"],[8,"5679411","00110234122344536536"],[8,"56a4117","00110223122433546566"],[8,"6517b14","00112031423344564566"],[8,"5671422","00110234122344555666"],[8,"1457246","01220112344433566556"],[8,"5717246","00120311233444566556"],[8,"3351746","01220132401344566556"],[8,"3457641","01220112304433546556"],[8,"3157746","01220132403344566556"],[8,"5574146","00110231422334566556"],[8,"5671446","00110234122344566556"],[8,"5675514","00110233122344564566"],[8,"5571746","00110231422344566556"],[8,"5664671","00110223144233456556"],[8,"6517746","00112031423344566556"],[8,"56a4b7","00110223122433445455"],[9,"000106a2","00112234455366566777"],[9,"001601a2","00112334425366566777"],[9,"011016a2","00123341255466566777"],[9,"0682a10","00112222133344544566"],[9,"0a0b612","00112211344533453666"],[9,"065a022","00112233123344555666"],[9,"50a0246","00110223322444566556"],[9,"0a07246","00112211344433566556"],[9,"06505a2","00112233124455455666"],[9,"06056a2","00112233144355455666"],[9,"011161a2","00123441235466566777"],[9,"316a022","01220133203344555666"],[9,"6a41022","00112011322443555666"],[9,"06125a2","00112333124455455666"],[9,"661a022","00112033123344555666"],[9,"601a722","00112033423344555666"],[9,"33a1602","01220122301443554666"],[9,"06135a2","00112344123455355666"],[9,"0a51246","00112211324443566556"],[9,"6a41602","00112011322443554666"],[9,"06551a2","00112233124355455666"],[9,"66105a2","00112033124455455666"],[9,"50a6712","00110223322453445666"],[10,"00523400","00112233324566455477"],[10,"00513142","00112234526345664777"],[10,"34005a2","01220113304455455666"],[10,"345b002","01220112304433553666"],[10,"01351412","00123341235462556777"],[10,"0935142","00123341235412551666"],[10,"0b35412","00123311234152445666"],[10,"3457022","01220112304433555666"],[10,"3433502","01230112304423455666"],[10,"5330246","00120331244412566556"],[10,"3464502","01220113204433455666"],[10,"3457502","01220112304433455666"],[10,"0735246","00123311234442566556"],[10,"14512311","01220112344453675675"],[10,"34115a2","01230112304455455666"],[10,"3151b42","01220132405344554666"],[10,"3451222","01220112304443555666"],[10,"3354122","01220132401334555666"],[10,"5137422","00120341233442555666"],[10,"1433257","01230112344423556566"],[10,"3451246","01220112304443566556"],[10,"3457142","01220112304533455666"],[10,"3165452","01220133204355445666"],[10,"3451257","01220112304443556566"],[11,"00180a10","00112333324455655677"],[11,"0a018111","00112211344443567567"],[11,"0a01822","00112211344443555666"],[11,"00185a2","00112333324455455666"],[11,"0682a10","00112222133344544566"],[11,"0a01846","00112211344443566556"],[11,"0a01857","00112211344443556566"]]},{"cells":[15,16,17,18,19,22,23,24,25,26,29,30,31,32,33,36,37,38,39,40],"espers":["Lacrimosa","Nanally","Edgar","Kuhara","Shinku"],"entries":[[0,"00710a02","00112344223556655777"],[0,"02100a71","00111233442556755667"],[0,"00112a71","00112344423556755667"],[0,"020a718","00111223345334456666"],[0,"00912a7","00112344423556255662"],[0,"0a71a02","00112311223445544666"],[0,"0ab1072","00112311223442566655"],[0,"121101a7","01112034425366756677"],[0,"0218a71","00111233332445644556"],[0,"21910a7","00012344123556255662"],[0,"121ab70","01112033423344566455"],[0,"02127a2","00111233342554455666"],[0,"02123a7","00111233342556455664"],[0,"022a147","00111222334533645566"],[0,"0215a72","00111233442344566655"],[0,"02621a7","00111223334255645566"],[0,"0a71272","00112311223444566655"],[0,"07331a2","00123411234552355666"],[0,"2a14370","00011231142335466554"],[0,"15a3270","01122012234445366553"],[0,"10a7362","01122032243355466654"],[0,"0a31772","00112311423544255666"],[0,"10a4742","01122032245334455666"],[0,"14205a7","01222011334455645566"],[0,"07614a2","00122311423554455666"],[0,"0a14772","00112311423344566655"],[0,"01557a2","00122331243554455666"],[0,"06125a7","00112333124455645566"],[0,"07517a2","00122311243554455666"],[0,"26601a7","00011223314255645566"],[0,"106a772","01122033423344566655"],[0,"112a718","01222013345334456666"],[0,"13221a7","01222013334155645566"],[0,"112a742","01222013345334455666"],[0,"11225a7","01222013334455645566"],[0,"127a612","01112033223344566645"],[0,"121a772","01112033423344566655"],[0,"2a31371","00011231142356425564"],[0,"112a347","01222013345336455664"],[0,"21135a7","00012344123455635566"],[0,"2a63171","00011221134256345563"],[0,"27131a7","00012341123455635566"],[0,"142a147","01222011334533645566"],[0,"2a51714","00011221132456344566"],[0,"2a61174","00011221134256345566"],[0,"15a7152","01122012234553345666"],[0,"61517a2","00122301243554455666"],[0,"12751a7","01112033224355645566"],[0,"27161a7","00012331124355645566"],[0,"129a78","01112033423344255552"],[0,"18aa72","01111022332233455544"],[0,"18b2a7","01111023332244524455"],[1,"00315b00","00112344523455266577"],[1,"0530b110","00112331425644256477"],[1,"0b513110","00122311243156477564"],[1,"0b51308","00122311243155466664"],[1,"509b130","00112034523345236652"],[1,"0ab3510","00112311223442534665"],[1,"1153b110","01223012435644356477"],[1,"18b5310","01111023342235426654"],[1,"1539b10","01123014235442354663"],[1,"315ba10","01223012330443544665"],[1,"52b1330","00111023452234526645"],[1,"05b3412","00112341223442536665"],[1,"515b302","00122031243355436664"],[1,"0b51362","00122311243155466654"],[1,"250b317","00011223145336453664"],[1,"05b3341","00112341223452634556"],[1,"535b310","00122031243315436654"],[1,"536b310","00122031423314536645"],[1,"05133b7","00112341523455634566"],[1,"5b01344","00122011345163455664"],[1,"15b3540","01123012234425346655"],[1,"563b140","00112034123345236655"],[1,"0b53174","00122311243156435566"],[1,"515b360","00122031243355436654"],[1,"553b170","00112031423354235566"],[1,"165b360","01122031243355436654"],[1,"315b670","01223012330443566455"],[1,"05b3177","00112341223452635566"],[1,"52b1132","00111023452234526665"],[1,"1533b12","01123014235442354666"],[1,"5311b62","00123041234415546665"],[1,"135b441","01223012334153644556"],[1,"55b3141","00112031224352643556"],[1,"5b63411","00122011324153644536"],[1,"1351b47","01223012435144655466"],[1,"155b317","01122013245336453664"],[1,"165b371","01122031243356435564"],[1,"135b177","01223012334153645566"],[2,"00180570","00112333324455677566"],[2,"00715018","00112344223455677776"],[2,"00115718","00112344523455677776"],[2,"0570188","00112331224555546666"],[2,"0091578","00112344523455266662"],[2,"00185a7","00112333324455645566"],[2,"00b5718","00112334223442566665"],[2,"05111718","00112341523455677776"],[2,"1807158","01111022345533456666"],[2,"0591178","00112341523455266662"],[2,"150a718","01122013345334456666"],[2,"105b178","01122034253345536666"],[2,"0227158","00111222345533456666"],[2,"0215738","00111233452344566665"],[2,"0281574","00111222234456345566"],[2,"0257518","00111223442334566665"],[2,"0265718","00111223345234456666"],[2,"0218757","00111233332455644566"],[2,"0353178","00122341253415536666"],[2,"0153478","00122341253445536666"],[2,"1573508","01123012234455346666"],[2,"0356718","00122331245314456666"],[2,"1873570","01111023442234566355"],[2,"4801574","01111002234456345566"],[2,"1850457","01111022334255644566"],[2,"0571468","00112341223445566665"],[2,"4057718","01122003245334456666"],[2,"1505758","01122013345534456666"],[2,"1056758","01122033245534456666"],[2,"1805577","01111022334453645566"],[2,"0615768","00112334123445566665"],[2,"5077168","00112034223345566665"],[2,"8710757","00001233112455644566"],[2,"1157188","01223012334555546666"],[2,"1275128","01112033224355546666"],[2,"1235718","01112033425344256666"],[2,"1157482","01223012334555544666"],[2,"1125758","01222013345534456666"],[2,"1157268","01223012334445566665"],[2,"1157872","01223012334444566655"],[2,"1335718","01233012345124456666"],[2,"1813547","01111023445234655366"],[2,"1135758","01233012345524456666"],[2,"3511768","01123014230445566665"],[2,"8135177","00001233412354625566"],[2,"4815147","01111002334523645566"],[2,"1855417","01111022334253644566"],[2,"1567418","01122013425334456666"],[2,"1551758","01122013245534456666"],[2,"1557718","01122013245334456666"],[2,"5617168","00112034123345566665"],[2,"5167718","00122031423344566665"],[2,"8751771","00001223112435644556"],[2,"157988","01123012234444355553"],[2,"1885a7","01111022223344534455"],[2,"18b578","01111023342234425555"],[3,"00340b00","00112344523355266577"],[3,"1403b000","01223011435544366477"],[3,"00b30141","00112344223562735667"],[3,"8340b00","00001233412244155466"],[3,"0a34b00","00112311423344255466"],[3,"0b131140","00123411234156377566"],[3,"340b018","01223011330443566665"],[3,"0b39140","00123411234152366553"],[3,"340ba10","01223011330443544665"],[3,"10b3b40","01123042234425346655"],[3,"2b30042","00012331124415266655"],[3,"40b3042","01123002234425366655"],[3,"2b30540","00012331124415246655"],[3,"340b072","01223011330443566655"],[3,"3403b70","01223011430544355466"],[3,"40b3540","01123002234425346655"],[3,"5035b40","00112033425344255466"],[3,"0536b40","00112331425344255466"],[3,"05b3470","00112341223442536655"],[3,"00b3647","00112344223542635566"],[3,"1013b48","01123045234455346666"],[3,"0ab3141","00112311223452634556"],[3,"2b33140","00012341123415236655"],[3,"2b30144","00012331124516245566"],[3,"05b3412","00112341223442536665"],[3,"2b36140","00012331124315246655"],[3,"10b3742","01123042234425366655"],[3,"05b3341","00112341223452634556"],[3,"0b13374","00123411234156345566"],[3,"40b3144","01123002234526345566"],[3,"5b01344","00122011345163455664"],[3,"340b741","01223011330453644556"],[3,"15b3540","01123012234425346655"],[3,"563b140","00112034123345236655"],[3,"0b53174","00122311243156435566"],[3,"60b3147","00112304223542635566"],[3,"1073b74","01123042234456345566"],[4,"00730062","00112344223556637776"],[4,"00736102","00112344223546635777"],[4,"00316172","00112344523645266777"],[4,"0703628","00122311443555436666"],[4,"0a73062","00112311223445536665"],[4,"32b0670","01112033220442566455"],[4,"01631712","00122341523455637776"],[4,"1870362","01111023342255466654"],[4,"2391670","00012344123541255662"],[4,"10a7362","01122032243355466654"],[4,"0b63712","00122311423144536665"],[4,"2632270","00011233312444526655"],[4,"2632407","00011233312455624466"],[4,"3560272","01122013320444566655"],[4,"6237062","00111203442335526665"],[4,"3276702","01112033220435544666"],[4,"3033672","01123044230542355666"],[4,"3346072","01233012230144566655"],[4,"2633057","00011234412355623566"],[4,"2730464","00012331124556244566"],[4,"0235674","00111233442356425566"],[4,"2634670","00011234412334526655"],[4,"2630747","00011233412544625566"],[4,"3565702","01122013320435544666"],[4,"3566072","01122013320443566655"],[4,"2635770","00011233412344526655"],[4,"3276760","01112033220435544665"],[4,"12136117","01112034425364753677"],[4,"3271168","01112034220345566665"],[4,"2193617","00012344123546235662"],[4,"2a63171","00011221134256345563"],[4,"2331672","00012344123541255666"],[4,"2312467","00012333124551644566"],[4,"2536712","00011233142534425666"],[4,"2633317","00011234512345623466"],[4,"2313647","00012344123541635566"],[4,"2536317","00011233142536425664"],[4,"2633617","00011234412354623566"],[4,"3316772","01233012430144566655"],[4,"2736414","00012331124356244566"],[4,"2561347","00011223145236455664"],[4,"2636147","00011233412534625566"],[4,"2736174","00012331124356245566"],[4,"5157362","00122031243355466654"],[4,"1657362","01122031243355466654"],[4,"2516377","00011233142536455664"],[4,"6613762","00112304123445536665"],[4,"2631677","00011234412354625566"],[4,"3276771","01112033220435644556"],[4,"623a78","00111203342334425555"],[5,"00906040","00112334425564277662"],[5,"00900146","00112334425677256672"],[5,"00906114","00112334425674256772"],[5,"0690408","00112334125544266662"],[5,"01190146","00123441235677356673"],[5,"0091468","00112345523445266662"],[5,"0199046","00123441235662355623"],[5,"0094262","00112344423355266652"],[5,"0092346","00112333425664255642"],[5,"4296040","01112003324453266552"],[5,"0690452","00112334125544256662"],[5,"0694062","00112344123355266652"],[5,"0692407","00112333124556244662"],[5,"0093364","00112345523465234662"],[5,"4639040","01123001234452366553"],[5,"0590346","00112331425664255642"],[5,"0693046","00112344123566235562"],[5,"3469070","01223011230445366553"],[5,"5094640","00112034425334255662"],[5,"0096644","00112334425364255662"],[5,"5695400","00112033124355244662"],[5,"0095674","00112334423564255662"],[5,"0694670","00112344123345266552"],[5,"0690747","00112334125446255662"],[5,"01196411","00123441235467355673"],[5,"0691148","00112345123455266662"],[5,"0199641","00123441235462355623"],[5,"2194062","00012344123355266652"],[5,"0693142","00112345123455236662"],[5,"1294640","01112034425334255662"],[5,"1469502","01223011234455346663"],[5,"0692146","00112333124566245562"],[5,"0719462","00123411234455366653"],[5,"3639140","01123041230452366553"],[5,"0139644","00123441235462355663"],[5,"0596341","00112331425364255642"],[5,"0693641","00112344123546235562"],[5,"0319647","00123441235416355663"],[5,"0596144","00112331425364255662"],[5,"1469407","01223011234556344663"],[5,"1469560","01223011234455346653"],[5,"0696147","00112334125346255662"],[5,"099964","00123441235412355123"],[6,"0090b110","00112334526445264772"],[6,"0b191110","00123411234156377563"],[6,"0b19108","00123411234155366663"],[6,"0b99110","00123411234152366523"],[6,"10b9b10","01123042234425346653"],[6,"129b002","01112034423355236662"],[6,"0b19302","00123411234155346663"],[6,"40b9012","01123002234425366653"],[6,"2b90510","00012331124415246652"],[6,"129b060","01112034423355236652"],[6,"1079b02","01123042234455346663"],[6,"0b39140","00123411234152366553"],[6,"509b130","00112034523345236652"],[6,"0b19360","00123411234155346653"],[6,"30b9170","01123042230425366553"],[6,"40b9510","01123002234425346653"],[6,"509b510","00112034423345236652"],[6,"15b9070","01123012234425366553"],[6,"0690b17","00112334125446254662"],[6,"10b9770","01123042234425366553"],[6,"1039b12","01123045234452346663"],[6,"1019b42","01123045234455346663"],[6,"129b510","01112034423345236652"],[6,"0b19162","00123411234155366653"],[6,"10b9712","01123042234425366653"],[6,"1539b10","01123014235442354663"],[6,"0b19371","00123411234156345563"],[6,"40b9141","01123002234526345563"],[6,"10b9147","01123042235426355663"],[6,"15b9510","01123012234425346653"],[6,"5119b60","00123041234455346653"],[6,"1619b60","01123041234455346653"],[6,"1079b71","01123042234456345563"],[7,"00b01018","00112334225542677776"],[7,"00b11118","00112345223452677776"],[7,"18b0108","01111023342255426666"],[7,"0b19108","00123411234155366663"],[7,"0ab1018","00112311223442566665"],[7,"10b1b08","01123042234425546666"],[7,"00b2218","00112333224442566665"],[7,"123b008","01112034423355236666"],[7,"48b0102","01111002334225542666"],[7,"05b0218","00112331224442566665"],[7,"106b028","01122034423355536666"],[7,"18b2070","01111023332244526655"],[7,"0b13308","00123411234155346666"],[7,"340b018","01223011330443566665"],[7,"0b51308","00122311243155466664"],[7,"18b0360","01111023342255426654"],[7,"0b01738","00122311453144566665"],[7,"8b40410","00001233112241566445"],[7,"40b1508","01123002234425546666"],[7,"00b4618","00112344223342566665"],[7,"18b4070","01111023442233526655"],[7,"05b5018","00112331223442566665"],[7,"106b508","01122034423345536666"],[7,"00b5718","00112334223442566665"],[7,"160b608","01122031443355436666"],[7,"870b160","00001223114335543665"],[7,"18b0770","01111023342254425566"],[7,"121b028","01112034423355536666"],[7,"0b11328","00123411234155546666"],[7,"140b218","01223011334443566665"],[7,"121b508","01112034423345536666"],[7,"12b6018","01112033224432566665"],[7,"1071b28","01123042234455546666"],[7,"1033b18","01123045234452346666"],[7,"1013b48","01123045234455346666"],[7,"18b5310","01111023342235426654"],[7,"1613b08","01123041234455346666"],[7,"18b0371","01111023342256425564"],[7,"05b1418","00112341223442566665"],[7,"106b148","01122034523345536666"],[7,"18b0174","01111023342256425566"],[7,"15b1508","01123012234425546666"],[7,"15b1068","01123012234425566665"],[7,"105b178","01122034253345536666"],[7,"0b61718","00122311423144566665"],[7,"8110b77","00001233412544655466"],[8,"04057600","00122331143554466577"],[8,"00150746","00112334423567755667"],[8,"00156741","00112334423564755667"],[8,"0095674","00112334423564255662"],[8,"04605a7","00122331124455645566"],[8,"05b0467","00112331224552644566"],[8,"01115746","00123441234567755667"],[8,"0571468","00112341223445566665"],[8,"0465a71","00122331123445644556"],[8,"0516b47","00112331425344655466"],[8,"0225467","00111222334553644566"],[8,"0235674","00111233442356425566"],[8,"4657402","01122001234553344666"],[8,"5205467","00111022334553644566"],[8,"2650746","00011223312456644556"],[8,"5467072","00122031123344566655"],[8,"0356347","00122331245316455664"],[8,"4653407","01122001234556344663"],[8,"5630574","00112033124456245566"],[8,"3560746","01122013320456644556"],[8,"6573407","00112301223455634466"],[8,"5075446","00112033224356644556"],[8,"0465746","00122331123456644556"],[8,"0465757","00122331123455644566"],[8,"4066577","01122003324453645566"],[8,"11461157","01233012234566745677"],[8,"1567418","01122013425334456666"],[8,"1469157","01223011234556345663"],[8,"11465a7","01233012234455645566"],[8,"115b467","01223012334553644566"],[8,"2561742","00011223145234455666"],[8,"2561347","00011223145236455664"],[8,"1275446","01112033224356644556"],[8,"4657152","01122001234553345666"],[8,"2656741","00011223312453644556"],[8,"2715746","00012331123456644556"],[8,"1346457","01233012234155644566"],[8,"4653157","01122001234556345663"],[8,"3566741","01122013320453644556"],[8,"3146757","01233012230455644566"],[8,"5464471","00122031124335644556"],[8,"4651574","01122001234456345566"],[8,"5615457","00112033124355644566"],[8,"1566467","01122013324553644566"],[8,"4661577","01122001324453645566"],[8,"5767147","00122011324533645566"],[8,"569748","00112034123344255552"],[8,"469957","01123001234452345523"],[8,"546ba7","00122031123344534455"],[8,"5b6b47","00122011324133544355"],[9,"02100a60","00111233442556655776"],[9,"0010a162","00112334425446657776"],[9,"0106a112","00122331445344657776"],[9,"0218a60","00111233332445544665"],[9,"2a03062","00011221134455366653"],[9,"260a402","00011223314335544666"],[9,"02265a0","00111222334455345566"],[9,"2a63400","00011221134255344663"],[9,"00356a2","00112334423554255666"],[9,"3062a60","01122033320445544665"],[9,"0a73062","00112311223445536665"],[9,"406a402","01122003324335544666"],[9,"0465a02","00122331123445544666"],[9,"260a460","00011223314335544665"],[9,"2a07460","00011221134553344566"],[9,"52065a0","00111022334455345566"],[9,"2650a60","00011223312445544665"],[9,"26005a7","00011223314455645566"],[9,"1011a612","01123044234455677756"],[9,"18a0612","01111022332244566645"],[9,"1019a62","01123044234455366653"],[9,"2a611a0","00011221134255345566"],[9,"160ba12","01122031443344536665"],[9,"2612a02","00011233312445544666"],[9,"2a63102","00011221134255346663"],[9,"26104a2","00011233412554455666"],[9,"02561a2","00111223342553455666"],[9,"260a162","00011223314335546665"],[9,"02621a7","00111223334255645566"],[9,"2a31360","00011231142355426654"],[9,"2a03146","00011221134566345563"],[9,"105a362","01122033243355466654"],[9,"2a63160","00011221134255346653"],[9,"10a7362","01122032243355466654"],[9,"2a01464","00011221134556344566"],[9,"01654a2","00122331423554455666"],[9,"406a162","01122003324335546665"],[9,"07614a2","00122311423554455666"],[9,"52561a0","00111022334255345566"],[9,"2656a10","00011223312443544665"],[9,"06125a7","00112333124455645566"],[9,"26601a7","00011223314255645566"],[9,"106a772","01122033423344566655"],[10,"00305042","00112334425546277766"],[10,"00130452","00112344523665536777"],[10,"00311542","00112345523456277766"],[10,"0405328","00122331143555466664"],[10,"0035a42","00112334423445266655"],[10,"2b30540","00012331124415246655"],[10,"01514312","00122341253446577765"],[10,"2130458","00012334125544256666"],[10,"0591432","00112341523445266652"],[10,"0a13452","00112311423554435666"],[10,"05b3412","00112341223442536665"],[10,"2523420","00011222134555344663"],[10,"4235042","01112003324435266655"],[10,"2504352","00011223145533456664"],[10,"2540362","00011233142255466654"],[10,"2523407","00011222134556344663"],[10,"2533430","00011234152344523665"],[10,"2530346","00011233142566425564"],[10,"3573042","01123012230445366655"],[10,"4054352","01122003245533456664"],[10,"2564340","00011223145233455664"],[10,"4230574","01112003324456245566"],[10,"4653502","01122001234455346663"],[10,"2554370","00011223142533455664"],[10,"4653062","01122001234455366653"],[10,"0235674","00111233442356425566"],[10,"2507347","00011223145336455664"],[10,"11253141","01222013345637456674"],[10,"2511438","00011234152344566665"],[10,"1295341","01112033425364255642"],[10,"31514a2","01223012430554455666"],[10,"2531432","00011234152344526665"],[10,"2523146","00011222134566345563"],[10,"1232574","01112033324456245566"],[10,"2533314","00011234152346523466"],[10,"5133442","00123041235442355666"],[10,"5253341","00111022345263455634"],[10,"2536341","00011233142536425564"],[10,"1323547","01222013445134655366"],[10,"4235144","01112003324536245566"],[10,"5251344","00111022345263455664"],[10,"2536144","00011233142536425566"],[10,"3425741","01222011330453644556"],[10,"1554352","01122013245533456664"],[10,"6513452","00112301423554435666"],[10,"2535174","00011233142356425566"],[10,"6154362","00122301243355466654"],[10,"2561347","00011223145236455664"],[10,"2735714","00012331123456244566"],[10,"835a42","00001223312334155544"],[11,"0010a108","00112334425446657777"],[11,"01011a18","00122341553455677776"],[11,"180a018","01111022334433566665"],[11,"0a91108","00112311423554266662"],[11,"100aa18","01122033443344566665"],[11,"0ab1018","00112311223442566665"],[11,"0218a02","00111233332445544666"],[11,"0240a18","00111233442244566665"],[11,"02815a0","00111222234455345566"],[11,"0218a60","00111233332445544665"],[11,"020a718","00111223345334456666"],[11,"0a33108","00112311423554236666"],[11,"0a13408","00112311423554436666"],[11,"105a308","01122033243355466664"],[11,"6013a08","00112304423445536666"],[11,"100a738","01122033453344566665"],[11,"40a1508","01122002234455346666"],[11,"18a0460","01111022332245566445"],[11,"0704a18","00122311443344566665"],[11,"0015a68","00112334423445566665"],[11,"00185a7","00112333324455645566"],[11,"0a71068","00112311223445566665"],[11,"2a01128","00011221134555346666"],[11,"2a11308","00011231142355466664"],[11,"142a018","01222011334433566665"],[11,"0215a18","00111233442344566665"],[11,"18a0612","01111022332244566645"],[11,"0218a71","00111233332445644556"],[11,"18a3310","01111022342253466534"],[11,"18a1340","01111022342253466554"],[11,"5a31108","00112011324553246666"],[11,"3101a68","01223014430445566665"],[11,"81310a7","00001234412355625566"],[11,"48a1140","01111002234225346655"],[11,"185a410","01111022334233544665"],[11,"18a6140","01111022332245366455"],[11,"0a14718","00112311423344566665"],[11,"15a1508","01122012234455346666"],[11,"156a108","01122013324335546666"],[11,"150a718","01122013345334456666"],[11,"6011a68","00112304423445566665"],[11,"106a718","01122033423344566665"],[11,"8710a71","00001233112445644556"]]},{"cells":[9,10,11,12,15,16,17,18,19,22,23,24,26,29,30,33,36,37,38,39],"espers":["Skia","Mint019","Cang","Zankou","Radio072","Chiichan073","Chaos071"],"entries":[[0,"2710a100","00012331124454456677"],[0,"210a1170","00012233143354656677"],[0,"290a170","00012233143314515566"],[0,"a7121110","00120011233345645677"],[0,"2710a18","00012331124454456666"],[0,"a792110","00120011233324524566"],[0,"123a370","01112033423342545566"],[0,"72a3170","01110022342234535566"],[0,"a712152","00120011233345545666"],[0,"a713512","00120011234453453666"],[1,"050b3100","00112231453345346677"],[1,"0b153110","00123311234156456477"],[1,"050b318","00112231453345346666"],[1,"0b95310","00123311234125425466"],[1,"a5b3100","00110021342234235566"],[1,"5b113110","00123011234156456477"],[1,"5b19310","00123011234153453466"],[1,"b203512","01110022304435435666"],[1,"b253310","01110022304235435466"],[1,"b253140","01110022304235435566"],[1,"05513b2","00112231425345545666"],[1,"05163b2","00112331425345545666"],[1,"b353310","01220012304135435466"],[1,"b353140","01220012304135435566"],[1,"551b340","00112031423345345566"],[1,"5113b18","00123041234453456666"],[1,"12153b2","01112033425345545666"],[1,"13513b2","01223012435145545666"],[1,"55113b2","00112031425345545666"],[1,"5193b8","00123041234423425555"],[1,"a5b318","00110021342234235555"],[2,"00570108","00112234423356657777"],[2,"00510718","00112234425365567777"],[2,"01157108","00123341234456657777"],[2,"8570108","00001123312245546666"],[2,"0195708","00123341234425526666"],[2,"b570108","01120012203345546666"],[2,"01151718","00123341235465567777"],[2,"8510718","00001123314254456666"],[2,"0195178","00123341235425526666"],[2,"0715a18","00123311234454456666"],[2,"0b15718","00123311234154456666"],[2,"2730518","00012331124452456666"],[2,"8570152","00001123312245545666"],[2,"2757108","00012231123345546666"],[2,"8315370","00001233412341545566"],[2,"4073518","01123002234453456666"],[2,"0551378","00112231425345546666"],[2,"0516378","00112331425345546666"],[2,"7574018","01120012234453356666"],[2,"0655718","00112233124354456666"],[2,"51111718","00123041235465567777"],[2,"5191178","00123041235425526666"],[2,"1571a18","01123012234454456666"],[2,"5b11718","00123011234154456666"],[2,"2721518","00012221134453456666"],[2,"1215378","01112033425345546666"],[2,"2155718","00012233124354456666"],[2,"2751718","00012231124354456666"],[2,"1351378","01223012435145546666"],[2,"1573518","01123012234453456666"],[2,"7461518","01220011234453456666"],[2,"5615718","00112033124354456666"],[2,"7571518","01120012234453456666"],[2,"5791a8","00123011234424425555"],[2,"5b9178","00123011234124425555"],[2,"b57a18","01120012203343345555"],[3,"b4030000","01220011304435536677"],[3,"b3001140","01220013304156456677"],[3,"b403008","01220011304435536666"],[3,"b403a00","01220011304434435566"],[3,"0b113140","00123411234156456677"],[3,"0b91340","00123411234125425566"],[3,"b203540","01110022304435435566"],[3,"b403540","01220011304435435566"],[3,"055b340","00112231423345345566"],[3,"b3111140","01230012304156456677"],[3,"b319140","01230012304135435566"],[3,"b253140","01110022304235435566"],[3,"b353140","01220012304135435566"],[3,"551b340","00112031423345345566"],[3,"b403a8","01220011304434435555"],[4,"06320170","00112333124452656677"],[4,"27361100","00012331124352456677"],[4,"27163110","00012331124356456477"],[4,"2796310","00012331124352452466"],[4,"7253640","01110022344235435566"],[4,"73116112","01230012344156456777"],[4,"2736118","00012331124352456666"],[4,"7319612","01230012344135435666"],[4,"761b312","01120031243354354666"],[4,"7253612","01110022344235435666"],[4,"7353612","01220012344135435666"],[4,"7463512","01220011234453453666"],[4,"769b32","01120031243324324555"],[5,"01946000","00123441233425526677"],[5,"01901640","00123341255426526677"],[5,"0b90640","00123311244125425566"],[5,"01916140","00123441235426526677"],[5,"0194608","00123441233425526666"],[5,"4699010","01123001234423523566"],[5,"4691a00","01123001234424425566"],[5,"2905640","00012233144315415566"],[5,"4693500","01123001234423425566"],[5,"4693070","01123001234423525566"],[5,"7095640","01120033244325425566"],[5,"7697400","01120031243324425566"],[5,"16911140","01123041235426526677"],[5,"0196148","00123341253425526666"],[5,"6199410","00123401234423523566"],[5,"a191640","00120031244325425566"],[5,"1691b40","01123041234425425566"],[5,"0194652","00123441233425525666"],[5,"6594310","00112301423342542566"],[5,"6193470","00123401234423525566"],[5,"4691540","01123001234425425566"],[5,"6195540","00123301234425425566"],[5,"7691640","01120031244325425566"],[5,"0b9648","00123311243124425555"],[5,"ab9640","00120011233124324455"],[5,"b69b40","01120031203324324455"],[6,"0190b100","00123341254425426677"],[6,"0b119110","00123411234156456477"],[6,"0190b18","00123341254425426666"],[6,"0b19910","00123411234153453466"],[6,"a19b100","00120031243324325566"],[6,"0190b32","00123341254425425666"],[6,"509b012","00112034423352352666"],[6,"0b90612","00123311244125425666"],[6,"0b91340","00123411234125425566"],[6,"0b95310","00123311234125425466"],[6,"0b96310","00123311243124524566"],[6,"0b93170","00123411234123525566"],[6,"0195b40","00123341234425425566"],[6,"5b91700","00123011234124425566"],[6,"0b96170","00123311243124525566"],[6,"129b012","01112034423352352666"],[6,"0b19312","00123411234153453666"],[6,"01951b2","00123341235425525666"],[6,"01916b2","00123441235425525666"],[6,"1079b12","01123042234453453666"],[6,"b319310","01230012304135435466"],[6,"b319140","01230012304135435566"],[6,"5b19310","00123011234153453466"],[6,"b691310","01120031204325425466"],[6,"5191b40","00123041234425425566"],[6,"1691b40","01123041234425425566"],[6,"b697110","01120031203324524566"],[7,"000b0118","00112234453365367777"],[7,"0110b118","00123341254465467777"],[7,"80b0118","00001123342254256666"],[7,"0190b18","00123341254425426666"],[7,"a0b0118","00110023342254256666"],[7,"b220108","01110022203345546666"],[7,"80b0312","00001123342254254666"],[7,"b270108","01110023302245546666"],[7,"050b318","00112231453345346666"],[7,"b300718","01220013304154456666"],[7,"85b0140","00001123312245245566"],[7,"b460108","01220011203345546666"],[7,"b570108","01120012203345546666"],[7,"b077108","01120032203345546666"],[7,"123b018","01112034423352356666"],[7,"8510b12","00001123314254454666"],[7,"8160b12","00001223314254454666"],[7,"270b118","00012231143354356666"],[7,"0b13318","00123411234153456666"],[7,"1073b18","01123042234453456666"],[7,"5b14108","00123011233145546666"],[7,"0b16418","00123311243154456666"],[7,"0b15718","00123311234154456666"],[7,"b617108","01120031203345546666"],[7,"707b118","01120032243354356666"],[8,"70156140","01120033244356456677"],[8,"7095640","01120033244325425566"],[8,"7253640","01110022344235435566"],[8,"6534370","00112301423342545566"],[8,"7461518","01220011234453456666"],[8,"2746152","00012331122345545666"],[8,"7463512","01220011234453453666"],[9,"a6021000","00110022133345546677"],[9,"0612a100","00112333124454456677"],[9,"a0106112","00110023344256456777"],[9,"a602108","00110022133345546666"],[9,"0612a18","00112333124454456666"],[9,"a602152","00110022133345545666"],[9,"a053612","00110022344235435666"],[9,"065a152","00112233123345545666"],[10,"05234000","00112221345534436677"],[10,"00123540","00112333425546546677"],[10,"12103540","01112033425546546677"],[10,"0523408","00112221345534436666"],[10,"b203540","01110022304435435566"],[10,"12153140","01112033425346546677"],[10,"1245308","01112033422345546666"],[10,"1409352","01223011435543543666"],[10,"0a14352","00112311423345545666"],[10,"b253140","01110022304235435566"],[10,"7403252","01220011344435535666"],[10,"7403352","01220011345534534666"],[10,"5045352","00112033422345545666"],[10,"0546352","00112331422345545666"],[10,"7253640","01110022344235435566"],[10,"13114152","01234012344156656777"],[10,"1319452","01234012344135535666"],[10,"1245352","01112033422345545666"],[10,"1354352","01223012433145545666"],[10,"5541352","00112031422345545666"],[10,"6514352","00112301423345545666"],[10,"7463512","01220011234453453666"],[11,"00100a18","00112334425565567777"],[11,"01110a18","00123441235565567777"],[11,"0018a18","00112333324454456666"],[11,"01910a8","00123441235525526666"],[11,"a0b0118","00110023342254256666"],[11,"a022108","00110022233345546666"],[11,"00123a8","00112333425545546666"],[11,"a024018","00110022234453356666"],[11,"0052a18","00112233324454456666"],[11,"a602108","00110022133345546666"],[11,"80a3310","00001122342234534566"],[11,"0a14308","00112311423345546666"],[11,"05103a8","00112331425545546666"],[11,"80a3170","00001122342234535566"],[11,"060a418","00112233143354456666"],[11,"a070418","00110023342254456666"],[11,"0650a18","00112233124454456666"],[11,"12103a8","01112033425545546666"],[11,"210a418","00012233143354456666"],[11,"2150a18","00012233124454456666"],[11,"0612a18","00112333124454456666"],[11,"2710a18","00012331124454456666"],[11,"14013a8","01223011435545546666"],[11,"85a3110","00001122312234534566"],[11,"4071a18","01123002234454456666"],[11,"5610a18","00112033124454456666"],[11,"0715a18","00123311234454456666"]]},{"cells":[8,9,10,11,15,16,17,18,22,23,25,26,30,31,32,33,37,38,39,40],"espers":["Hathor","Fadia","Female046","Female051","Daffodill","Mitsuki"],"entries":[[0,"001210a7","00112333245546676677"],[0,"1270a110","01110233224454465776"],[0,"07111a12","00123112345545567776"],[0,"12a1708","01110223223455446666"],[0,"2719a10","00012311234434453665"],[0,"32210a7","01110222034435565566"],[0,"1220a47","01110222334454465566"],[0,"12260a7","01110222334435565566"],[0,"3073a12","01120322034434456665"],[0,"32041a7","01110223043345565566"],[0,"103a752","01120332332455445666"],[0,"27136a0","00012311234435545566"],[0,"27130a7","00012311234435565566"],[0,"12a4407","01110223223345564466"],[0,"0a41752","00112113223455445666"],[0,"12046a7","01110223443345565566"],[0,"1270a47","01110233224454465566"],[0,"50a1752","00110223223455445666"],[0,"27516a0","00012211234435545566"],[0,"27510a7","00012211234435565566"],[0,"2713a12","00012311234434456665"],[0,"12a1752","01110223223455445666"],[0,"12a1357","01110223223455645664"],[0,"12a4157","01110223223345564566"],[0,"2711a47","00012311234454465566"],[0,"1576a12","01120122334434456665"],[1,"00503b10","00112233245645564577"],[1,"01153b10","00123312345645564577"],[1,"8503b10","00001122134534453466"],[1,"0b91350","00123112312455245664"],[1,"0b31752","00123112312455445666"],[1,"0b31357","00123112312455645664"],[2,"00800157","00112222334456675677"],[2,"00151708","00112334234566557777"],[2,"05111708","00112314234566557777"],[2,"1570088","01120122334455556666"],[2,"5790108","00120112332455246666"],[2,"50a1708","00110223223455446666"],[2,"01151718","00123312345645567777"],[2,"5117088","00120312334455556666"],[2,"5197108","00120312332455246666"],[2,"2751028","00012211234435556666"],[2,"2315708","00012331231455446666"],[2,"8124570","00001222134433456655"],[2,"1570628","01120122334455546666"],[2,"3351708","01220123013455446666"],[2,"0135478","00123312342544556666"],[2,"5573108","00110213223455346666"],[2,"3571608","01120122034435546666"],[2,"5137708","00120312332455446666"],[2,"8154407","00001223123345564466"],[2,"0551478","00112213243544556666"],[2,"6541708","00112013223455446666"],[2,"5571708","00110213223455446666"],[2,"1576608","01120122334435546666"],[2,"8561770","00001122132435445566"],[2,"5137128","00120312332455546666"],[2,"2754118","00012211234533456666"],[2,"5571128","00110213223455546666"],[2,"5117628","00120312334455546666"],[2,"2751718","00012211234534456666"],[2,"3151478","01220123043544556666"],[2,"8151357","00001223123455645664"],[2,"8116357","00001233123455645664"],[2,"3571718","01120122034534456666"],[2,"8154157","00001223123345564566"],[2,"6511478","00112013243544556666"],[2,"1576718","01120122334534456666"],[3,"0b311040","00123112312455647766"],[3,"0b111314","00123112314567456775"],[3,"0b91314","00123112312456245664"],[3,"0b31346","00123112312456645564"],[4,"00006732","00112233445645567776"],[4,"00236170","00112223443546356677"],[4,"00216371","00112223443546756675"],[4,"0086732","00112222334534456665"],[4,"0029637","00112223443546356635"],[4,"12016371","01110223443546756675"],[4,"2713608","00012311234435546666"],[4,"1209637","01110223443546356635"],[4,"27136a0","00012311234435545566"],[4,"4206732","01110022334534456665"],[4,"2753602","00012211234435543666"],[4,"0626732","00112221334534456665"],[4,"2326770","00012221331435445566"],[4,"3230674","01110233024425645566"],[4,"3306752","01220133013455445666"],[4,"0626337","00112221334536456645"],[4,"2706337","00012211334536456645"],[4,"2753046","00012211234435663556"],[4,"4076732","01120022334534456665"],[4,"2753650","00012211234435543566"],[4,"5606732","00110221334534456665"],[4,"11116732","01230123445645567776"],[4,"1637128","01120312332455546666"],[4,"3619712","01120312034534453666"],[4,"1226732","01110222334534456665"],[4,"1226337","01110222334536456645"],[4,"2326174","00012221331435645566"],[4,"3216752","01110233023455445666"],[4,"3236371","01110233023425645564"],[4,"3236174","01110233023425645566"],[4,"3216357","01110233023455645664"],[4,"2753614","00012211234435643566"],[4,"1276346","01110233223456645564"],[4,"2713674","00012311234435645566"],[4,"1276357","01110233223455645664"],[4,"886732","00001111223423345554"],[4,"829637","00001112332435245524"],[5,"00190046","00112344235536773667"],[5,"00190614","00112344235536753677"],[5,"00196114","00112344234536753677"],[5,"4690108","01120012332455246666"],[5,"3290046","01110233024425662556"],[5,"4690350","01120012332455245664"],[5,"3079046","01120322034435663556"],[5,"01119614","00123412345546754677"],[5,"6194108","00123012332455246666"],[5,"3290614","01110233024425642566"],[5,"4690152","01120012332455245666"],[5,"2719046","00012311234435663556"],[5,"4690314","01120012332456245664"],[5,"3954610","01220123013314456645"],[5,"3619046","01120312034435663556"],[5,"1409637","01220113443546356635"],[5,"0519446","00112314234435663556"],[5,"4696170","01120012332435245566"],[6,"00190b10","00112344235635563577"],[6,"01119b10","00123412345645564577"],[6,"0b91108","00123112312455246666"],[6,"0b91302","00123112312455246664"],[6,"0b91350","00123112312455245664"],[6,"3079b10","01120322034534453466"],[6,"0b91152","00123112312455245666"],[6,"2719b10","00012311234534453466"],[6,"0b91314","00123112312456245664"],[6,"3619b10","01120312034534453466"],[7,"0080b110","00112222334564456477"],[7,"0b111108","00123112314566457777"],[7,"0b11088","00123112314455556666"],[7,"0b91108","00123112312455246666"],[7,"8503b10","00001122134534453466"],[7,"0b31708","00123112312455446666"],[7,"0b31128","00123112312455546666"],[7,"842b110","00001222113453345366"],[7,"0b11628","00123112314455546666"],[8,"00564700","00112233243544556677"],[8,"00501674","00112233245546756677"],[8,"00561174","00112233243546756677"],[8,"0056478","00112233243544556666"],[8,"05046a7","00112213443345565566"],[8,"01151674","00123312345546756677"],[8,"6541708","00112013223455446666"],[8,"0615a47","00112331234454465566"],[8,"2754062","00012211234433556665"],[8,"2753046","00012211234435663556"],[8,"2754640","00012211234433546655"],[8,"5574062","00110213223344556665"],[8,"5026674","00110222334435645566"],[8,"4206577","01110022334435465566"],[8,"3463057","01220112034435563566"],[8,"3464570","01220112034433456655"],[8,"5076346","00110233223456645564"],[8,"6544407","00112013223345564466"],[8,"5574560","00110213223344554665"],[8,"5606674","00110221334435645566"],[8,"4076577","01120022334435465566"],[8,"11516174","01220123443546756677"],[8,"6511478","00112013243544556666"],[8,"11546a7","01220123443345565566"],[8,"2753614","00012211234435643566"],[8,"6541752","00112013223455445666"],[8,"2751674","00012211234435645566"],[8,"3463517","01220112034435463566"],[8,"5571346","00110213223456645564"],[8,"3461577","01220112034435465566"],[8,"5574146","00110213223345664556"],[8,"1466577","01220112334435465566"],[8,"856478","00001122132433445555"],[8,"56aa47","00110221223343354455"],[9,"00006a12","00112233445545567776"],[9,"001216a0","00112333245546656677"],[9,"01106a12","00123312445545567776"],[9,"0086a12","00112222334434456665"],[9,"32306a0","01110233024425545566"],[9,"0a44062","00112113223344556665"],[9,"50a4062","00110223223344556665"],[9,"42066a0","01110022334435545566"],[9,"00246a7","00112223443345565566"],[9,"56a0502","00110221223344554666"],[9,"50266a0","00110222334435545566"],[9,"50260a7","00110222334435565566"],[9,"06266a0","00112221334435545566"],[9,"06260a7","00112221334435565566"],[9,"27060a7","00012211334435565566"],[9,"101a628","01120332334455546666"],[9,"23261a0","00012221331435545566"],[9,"12a4062","01110223223344556665"],[9,"5026a12","00110222334434456665"],[9,"0626a12","00112221334434456665"],[9,"12260a7","01110222334435565566"],[9,"32361a0","01110233023425545566"],[9,"56a1302","00110221223455346664"],[9,"27136a0","00012311234435545566"],[9,"0a14462","00112113243344556665"],[9,"12a4560","01110223223344554665"],[9,"42661a0","01110022332435545566"],[9,"12046a7","01110223443345565566"],[9,"56a5012","00110221223344356665"],[9,"5606a12","00110221334434456665"],[9,"27516a0","00012211234435545566"],[10,"32540000","01110223023344556677"],[10,"00403152","00112334224566456777"],[10,"00123541","00112333245546574667"],[10,"3254008","01110223023344556666"],[10,"2940350","00012331221455145664"],[10,"01154132","00123312345644567776"],[10,"0513428","00112314234435556666"],[10,"0195432","00123312342544256665"],[10,"0a43152","00112113223455345666"],[10,"3254420","01110223023345554466"],[10,"0554322","00112213243345554666"],[10,"3254062","01110223023344556665"],[10,"2340752","00012331221455445666"],[10,"3354420","01220123013345554466"],[10,"0553432","00112213243544356665"],[10,"3354062","01220123013344556665"],[10,"2340357","00012331221455645664"],[10,"3254407","01110223023345564466"],[10,"3254560","01110223023344554665"],[10,"2753046","00012211234435663556"],[10,"0734752","00123112332455445666"],[10,"21151314","00012331234567456775"],[10,"3154128","01220123043345556666"],[10,"2915314","00012331231456145664"],[10,"3224512","01110222034433456665"],[10,"3154322","01220123043345554666"],[10,"6514322","00112013243345554666"],[10,"2754132","00012211234533456665"],[10,"3153432","01220123043544356665"],[10,"2315346","00012331231456645564"],[10,"2753134","00012211234536453665"],[10,"3154462","01220123043344556665"],[10,"6543152","00112013223455345666"],[10,"2753541","00012211234435463556"],[10,"2753614","00012211234435643566"],[10,"325488","01110223023344445555"],[10,"395428","01220123013314445555"],[11,"0080a110","00112222334454465776"],[11,"0a111108","00112113243546657777"],[11,"101a088","01120332334455556666"],[11,"109a108","01120332332455246666"],[11,"12a4008","01110223223344556666"],[11,"0086a12","00112222334434456665"],[11,"0a43108","00112113223455346666"],[11,"50a3108","00110223223455346666"],[11,"81306a0","00001233124425545566"],[11,"103a708","01120332332455446666"],[11,"0a14408","00112113243344556666"],[11,"0a41708","00112113223455446666"],[11,"85016a0","00001122134435545566"],[11,"50a1708","00110223223455446666"],[11,"80661a0","00001122332435545566"],[11,"103a128","01120332332455546666"],[11,"0a14128","00112113243345556666"],[11,"50a1128","00110223223455546666"],[11,"101a628","01120332334455546666"],[11,"12a1708","01110223223455446666"],[11,"0a13418","00112113243544356666"],[11,"81361a0","00001233123425545566"],[11,"0a11478","00112113243544556666"],[11,"56a1108","00110221223455346666"]]}]} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..8123d00 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,13 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; + +import { App } from "./ui/App.tsx"; +import "./ui/styles.css"; + +const root = document.getElementById("root"); +if (!root) throw new Error("no #root"); +createRoot(root).render( + + + , +); diff --git a/src/solver/bitset.ts b/src/solver/bitset.ts new file mode 100644 index 0000000..c2636a2 --- /dev/null +++ b/src/solver/bitset.ts @@ -0,0 +1,67 @@ +/** + * Fixed-width bitsets over the item pool. + * + * A build's item set is the thing the team phase intersects, over and over, so + * it is a `Uint32Array` of about 26 words at 817 items rather than a `Set`. + * Disjointness of two builds is then a handful of ANDs. + */ +export type Bitset = Uint32Array; + +export function bitsetFor(size: number): Bitset { + return new Uint32Array((size + 31) >>> 5); +} + +export function bitsetOf(size: number, members: Iterable): Bitset { + const set = bitsetFor(size); + for (const member of members) add(set, member); + return set; +} + +export function add(set: Bitset, member: number): void { + set[member >>> 5] = set[member >>> 5]! | (1 << (member & 31)); +} + +export function has(set: Bitset, member: number): boolean { + return (set[member >>> 5]! & (1 << (member & 31))) !== 0; +} + +/** True when the two share no member - the hot check in the team search. */ +export function disjoint(a: Bitset, b: Bitset): boolean { + for (let i = 0; i < a.length; i += 1) { + if ((a[i]! & b[i]!) !== 0) return false; + } + return true; +} + +export function overlapCount(a: Bitset, b: Bitset): number { + let count = 0; + for (let i = 0; i < a.length; i += 1) { + let word = a[i]! & b[i]!; + while (word !== 0) { + word &= word - 1; + count += 1; + } + } + return count; +} + +export function unionInto(into: Bitset, from: Bitset): void { + for (let i = 0; i < into.length; i += 1) into[i] = into[i]! | from[i]!; +} + +export function clone(set: Bitset): Bitset { + return new Uint32Array(set); +} + +export function members(set: Bitset): number[] { + const out: number[] = []; + for (let i = 0; i < set.length; i += 1) { + let word = set[i]!; + while (word !== 0) { + const bit = 31 - Math.clz32(word & -word); + out.push(i * 32 + bit); + word &= word - 1; + } + } + return out; +} diff --git a/src/solver/host.ts b/src/solver/host.ts new file mode 100644 index 0000000..7a67949 --- /dev/null +++ b/src/solver/host.ts @@ -0,0 +1,140 @@ +/** + * Where the search runs. + * + * `Worker` when the page has one, the same generator on the main thread when it + * does not - which is always the case in the single-file `file://` build, where + * Chrome hands the document an opaque origin and workers are simply + * unavailable. + * + * The fallback is nearly free precisely because the solver was written as a + * chunked generator from the start rather than retrofitted: the inline host + * pumps it in slices and returns to the event loop between them, so the UI keeps + * painting and Stop keeps working. + */ +import { runJob, type JobProgress, type JobResult, type SolveJob } from "./job.ts"; +import type { WorkerIn, WorkerOut } from "./worker.ts"; +import { makeWorker } from "./worker-host.ts"; + +export interface SolveHandle { + promise: Promise; + cancel: () => void; +} + +export interface SolverHost { + readonly kind: "worker" | "inline"; + solve: (job: SolveJob, onProgress?: (progress: JobProgress) => void) => SolveHandle; + dispose: () => void; +} + +/** Milliseconds of work between returns to the event loop. */ +export const SLICE_MS = 30; + +export class CancelledError extends Error { + constructor() { + super("solve cancelled"); + this.name = "CancelledError"; + } +} + +export function createInlineHost(): SolverHost { + return { + kind: "inline", + solve(job, onProgress) { + let cancelled = false; + const promise = new Promise((resolve, reject) => { + const run = runJob(job); + const pump = () => { + if (cancelled) { + reject(new CancelledError()); + return; + } + const deadline = Date.now() + SLICE_MS; + try { + for (;;) { + const step = run.next(); + if (step.done) { + resolve(step.value); + return; + } + onProgress?.(step.value); + if (Date.now() >= deadline) break; + } + } catch (error) { + reject(error); + return; + } + // Yield to the event loop so the page can paint and Stop can land. + setTimeout(pump, 0); + }; + setTimeout(pump, 0); + }); + return { + promise, + cancel: () => { + cancelled = true; + }, + }; + }, + dispose() {}, + }; +} + +export function createWorkerHost(worker: Worker): SolverHost { + let nextId = 1; + return { + kind: "worker", + solve(job, onProgress) { + const id = nextId; + nextId += 1; + let settled = false; + + const promise = new Promise((resolve, reject) => { + const onMessage = (event: MessageEvent) => { + const message = event.data; + if (message.id !== id) return; + if (message.type === "progress") { + onProgress?.(message.progress); + return; + } + settled = true; + worker.removeEventListener("message", onMessage); + if (message.type === "result") resolve(message.result); + else reject(new Error(message.message)); + }; + worker.addEventListener("message", onMessage); + const request: WorkerIn = { type: "solve", id, job }; + worker.postMessage(request); + }); + + return { + promise, + cancel: () => { + if (settled) return; + const request: WorkerIn = { type: "cancel" }; + worker.postMessage(request); + }, + }; + }, + dispose() { + worker.terminate(); + }, + }; +} + +/** + * A worker host when one can be constructed, an inline host otherwise. + * + * Construction is the test, not feature detection: `typeof Worker` is defined + * on a `file://` page even though building a module worker there throws. + */ +export function createSolverHost(): SolverHost { + if (typeof Worker !== "undefined") { + try { + return createWorkerHost(makeWorker()); + } catch { + // Fall through to inline. In the single-file build `makeWorker` is aliased + // to a stub that always throws, so this is the only path there. + } + } + return createInlineHost(); +} diff --git a/src/solver/job.ts b/src/solver/job.ts new file mode 100644 index 0000000..61aa526 --- /dev/null +++ b/src/solver/job.ts @@ -0,0 +1,203 @@ +/** + * A whole team solve as one serialisable value. + * + * The worker boundary only carries structured-cloneable data, so the job holds + * plain arrays and configuration - never a callback, a `Map`, or a prebuilt + * pool. Everything derived is rebuilt inside `runJob`, which means the inline + * host and the worker host run byte-identical code and cannot drift. + */ +import { boardFromSlots, boardKey } from "../domain/board.ts"; +import type { SetName } from "../domain/cartridges.ts"; +import { buildPool, type ExportedItem } from "../domain/items.ts"; +import { compile, type ScoringConfig } from "../domain/scoring.ts"; +import type { SetBonusTable } from "../domain/setbonus.ts"; +import type { ConsoleTrait } from "../domain/stats.ts"; +import { SLOT_COUNT } from "../domain/statvec.ts"; +import { loadTilings, type RawTilings, type Tiling } from "../domain/tilings.ts"; +import { diversify, type Portfolio } from "./portfolio.ts"; +import type { Build } from "./protocol.ts"; +import { solveSingle } from "./single.ts"; +import { solveTeam, type TeamAssignment } from "./team.ts"; + +export interface CharacterJob { + key: string; + /** The character's console grid, 7x7 with -1 blocked. */ + slots: number[][]; + trait: ConsoleTrait | null; + /** Contributions before gear, as a plain array of `SLOT_COUNT` numbers. */ + base: number[]; + scoring: ScoringConfig; + /** Restrict to these sets. Omit for every set the account owns. */ + sets?: SetName[]; + /** + * Instances this character may not use - R2's "use equipped items" toggle + * turned off, meaning items another character is wearing are off limits. + * + * Carried as instance ids rather than pool indices because the job crosses a + * worker boundary and the pool is rebuilt on the other side. + */ + excludedInstances?: string[]; +} + +export interface SolveJob { + items: ExportedItem[]; + characters: CharacterJob[]; + setBonuses: SetBonusTable; + tilings: RawTilings; + dragOrder?: string[]; + options?: { + beamWidth?: number; + candidateWidth?: number; + perTilingKeep?: number; + portfolioSize?: number; + rounds?: number; + }; +} + +export type JobProgress = + | { phase: "portfolio"; character: string; done: number; total: number } + | { phase: "team"; round: number; rounds: number; sorted: number[] }; + +export interface JobResult { + assignment: TeamAssignment[]; + sorted: number[]; + unbuildable: string[]; + infeasible: boolean; + rounds: number; + /** Item ids the export carried that this build has no shape for. */ + unknownShapes: string[]; +} + +/** + * Defaults measured on the real 817-item pool: beam 60 with 12 candidates finds + * the same best builds as beam 200 with 20 while running about seven times + * faster, and four characters then solve in a few seconds rather than half a + * minute. + */ +const DEFAULTS = { + beamWidth: 60, + candidateWidth: 12, + perTilingKeep: 6, + portfolioSize: 300, + rounds: 6, +}; + +export function* runJob(job: SolveJob): Generator { + const options = { ...DEFAULTS, ...job.options }; + const pool = buildPool(job.items); + const tables = loadTilings(job.tilings); + + const tilingsFor = (character: CharacterJob): Tiling[] => { + const key = boardKey(boardFromSlots(character.slots)); + const table = tables.find((entry) => entry.cells.join(",") === key); + if (!table) return []; + const wanted = character.sets; + const lists = wanted + ? wanted.map((set) => table.bySet.get(set) ?? []) + : [...table.bySet.values()]; + return lists.flat(); + }; + + const baseVector = (character: CharacterJob): Float32Array => { + const vector = new Float32Array(SLOT_COUNT); + vector.set(character.base.slice(0, SLOT_COUNT)); + return vector; + }; + + const indexOfInstance = new Map(pool.items.map((item, index) => [item.instance, index])); + const excludedFor = (character: CharacterJob): Set => { + const out = new Set(); + for (const instance of character.excludedInstances ?? []) { + const index = indexOfInstance.get(instance); + if (index !== undefined) out.add(index); + } + return out; + }; + + const solveOne = function* ( + character: CharacterJob, + extraExcluded: ReadonlySet, + ): Generator { + // The character's own restriction always applies; column generation adds + // whatever the rest of the team is currently holding on top of it. + const excluded = excludedFor(character); + for (const index of extraExcluded) excluded.add(index); + + const run = solveSingle({ + pool, + tilings: tilingsFor(character), + base: baseVector(character), + trait: character.trait, + setBonuses: job.setBonuses, + scoring: compile(character.scoring), + excluded, + beamWidth: options.beamWidth, + candidateWidth: options.candidateWidth, + perTilingKeep: options.perTilingKeep, + }); + let step = run.next(); + while (!step.done) { + yield { + phase: "portfolio", + character: character.key, + done: step.value.done, + total: step.value.total, + }; + step = run.next(); + } + return step.value.portfolio; + }; + + // --- phase 0 ---------------------------------------------------------- + const portfolios: Portfolio[] = []; + for (const character of job.characters) { + const builds = yield* solveOne(character, new Set()); + const entries = diversify(builds, pool.items.length, options.portfolioSize); + portfolios.push({ key: character.key, entries, unbuildable: entries.length === 0 }); + } + + // --- phases 1 and 2 --------------------------------------------------- + // + // Column generation re-solves synchronously: `solveTeam` takes a plain + // function, so the re-solve cannot yield progress of its own. That is a + // deliberate trade - the alternative is threading a generator through the + // leximin search for a step that already takes well under a second. + const byKey = new Map(job.characters.map((character) => [character.key, character])); + const resolve = (key: string, excluded: ReadonlySet): Build[] => { + const character = byKey.get(key); + if (!character) return []; + const run = solveOne(character, excluded); + let step = run.next(); + while (!step.done) step = run.next(); + return step.value.slice(0, 40); + }; + + const team = solveTeam({ + portfolios, + poolSize: pool.items.length, + dragOrder: job.dragOrder ?? job.characters.map((character) => character.key), + resolve, + rounds: options.rounds, + }); + + let step = team.next(); + while (!step.done) { + yield { + phase: "team", + round: step.value.round, + rounds: step.value.rounds, + sorted: step.value.sorted, + }; + step = team.next(); + } + + const result = step.value; + return { + assignment: result.assignment, + sorted: result.sorted, + unbuildable: result.unbuildable, + infeasible: result.infeasible, + rounds: result.rounds, + unknownShapes: pool.unknownShapes, + }; +} diff --git a/src/solver/portfolio.ts b/src/solver/portfolio.ts new file mode 100644 index 0000000..d39ba75 --- /dev/null +++ b/src/solver/portfolio.ts @@ -0,0 +1,88 @@ +/** + * Phase 0 of the team solve: a diverse portfolio per character. + * + * Every portfolio is generated against the **entire pool, conflicts ignored**. + * That is what makes the team phase anti-greedy structurally rather than + * heuristically: no character is solved after another has already taken items, + * so generation order confers no advantage at all. + * + * What is kept is not the best build repeated with cosmetic variation but a + * spread: builds that reuse items already covered are penalised, so the leximin + * phase has genuinely different options to trade between. + */ +import type { Build } from "./protocol.ts"; +import { bitsetOf, type Bitset } from "./bitset.ts"; + +export interface PortfolioEntry { + build: Build; + /** The build's items - cartridge and modules - as a bitset over the pool. */ + items: Bitset; +} + +export interface Portfolio { + /** Whatever identifies the character to the caller. */ + key: string; + entries: PortfolioEntry[]; + /** True when the character has no valid full-set build at all. */ + unbuildable: boolean; +} + +export const DEFAULT_DIVERSITY = 0.15; + +export function itemsOf(build: Build, poolSize: number): Bitset { + return bitsetOf(poolSize, [build.cartridge, ...build.modules]); +} + +/** + * Trim a solve's builds to a spread of `size`. + * + * Greedy by `score - diversity * (mean usage of this build's items so far)`. + * + * The penalty counts **how many times** each item has already been kept, not + * merely whether it has been. An earlier version measured overlap against the + * union of everything kept, and that saturates: once the union is large every + * remaining build overlaps it completely, the penalty stops discriminating, and + * the portfolio collapses onto a few dozen items. Four characters then have no + * conflict-free selection between them at all - the team phase returns nothing. + */ +export function diversify( + builds: readonly Build[], + poolSize: number, + size: number, + diversity = DEFAULT_DIVERSITY, +): PortfolioEntry[] { + const remaining = builds + .map((build) => ({ + entry: { build, items: itemsOf(build, poolSize) } as PortfolioEntry, + pieces: [build.cartridge, ...build.modules], + })) + .sort((a, b) => b.entry.build.score - a.entry.build.score); + + const usage = new Uint16Array(poolSize); + const kept: PortfolioEntry[] = []; + const taken = new Uint8Array(remaining.length); + + while (kept.length < size) { + let bestIndex = -1; + let bestValue = -Infinity; + for (let i = 0; i < remaining.length; i += 1) { + if (taken[i]) continue; + const candidate = remaining[i]!; + let used = 0; + for (const item of candidate.pieces) used += usage[item]!; + const value = + candidate.entry.build.score - (diversity * used) / candidate.pieces.length; + if (value > bestValue) { + bestValue = value; + bestIndex = i; + } + } + if (bestIndex < 0) break; + const chosen = remaining[bestIndex]!; + taken[bestIndex] = 1; + kept.push(chosen.entry); + for (const item of chosen.pieces) usage[item] = usage[item]! + 1; + } + + return kept; +} diff --git a/src/solver/protocol.ts b/src/solver/protocol.ts new file mode 100644 index 0000000..9fa0455 --- /dev/null +++ b/src/solver/protocol.ts @@ -0,0 +1,48 @@ +/** + * The wire between the app and whatever is running the search. + * + * The same types serve the Worker host and the inline host, so nothing above + * the solver knows which one it got. + */ +import type { Tier } from "../domain/cartridges.ts"; +import type { Tiling } from "../domain/tilings.ts"; + +export interface SolveProgress { + /** Combinations finished. Every phase has a real denominator. */ + done: number; + total: number; + /** The best complete build so far. Stop always yields something usable. */ + best: Build | null; +} + +export interface Build { + /** Pool index of the cartridge. */ + cartridge: number; + /** Pool indices of the modules, aligned with `tiling.pieces`. */ + modules: number[]; + tiling: Tiling; + score: number; + vector: Float32Array; + /** + * True when branch and bound closed, so **this packing with this cartridge** + * has no better module assignment. It is deliberately not a claim of global + * optimality: packings and cartridges are enumerated exhaustively, but the + * module beam inside each one is not proved except for the winner. False + * means even that narrower claim did not close within budget. + * + * The UI must render the distinction rather than implying certainty. + */ + proven: boolean; + /** Active set tiers whose values nobody has measured yet. */ + unknownTiers: Tier[]; +} + +export interface SolveResult { + best: Build | null; + /** Every build considered good enough to keep, best first. */ + portfolio: Build[]; + /** Combinations examined. */ + examined: number; + /** True when no cartridge and tiling combination existed at all. */ + unbuildable: boolean; +} diff --git a/src/solver/single.ts b/src/solver/single.ts new file mode 100644 index 0000000..52c5199 --- /dev/null +++ b/src/solver/single.ts @@ -0,0 +1,398 @@ +/** + * One character, one pool. + * + * Shape and structure of the search: + * + * - **Tiling is a table lookup, never a search.** Positions do not affect score, + * so `tools/precompute-tilings.ts` already solved the packing offline and each + * entry is a distinct shape multiset. + * - **Subsets are unordered.** Modules of the same shape are interchangeable, so + * choosing 2 of 20 is 190 options and not 380; a beam that permutes identical + * assignments spends its whole width on duplicates. + * - **Modules are solved per packing, not per (packing, cartridge) pair.** The + * first version beamed inside that product and needed hundreds of millions of + * vector operations for one character. A cartridge shifts one main stat and + * four substats, so the beam runs once per packing against the character's + * fixed contribution, keeps its best `carry` module sets, and the cartridges + * are then scored against those. That turns a product into a sum. + * - **Beam first, then prove it - once.** Branch and bound runs on the single + * winning (packing, cartridge) pair, seeded with the beam's answer. Packings + * and cartridge buckets are both enumerated exhaustively, so the only + * approximation left anywhere is the module beam inside a packing - and for + * the winner even that is closed. `proven` therefore means "no better module + * assignment exists for this packing and cartridge", which is a narrower claim + * than global optimality and is worded that way on purpose. + * + * The whole thing is a generator that yields every few thousand nodes. That is + * not a nicety: it is the only cancellation mechanism that also works in the + * `file://` build, where there are no workers at all, and it gives real progress + * for free. + */ +import type { ConsoleTrait } from "../domain/stats.ts"; +import type { ItemPool } from "../domain/items.ts"; +import type { SetBonusTable } from "../domain/setbonus.ts"; +import type { Tiling } from "../domain/tilings.ts"; +import { setBonus } from "../domain/setbonus.ts"; +import { traitContribution } from "../domain/stats.ts"; +import { score, upperBound, type CompiledScoring } from "../domain/scoring.ts"; +import { SLOT_COUNT, addPoolInto, emptyVector, slotOf, vectorFrom } from "../domain/statvec.ts"; +import type { Build, SolveProgress, SolveResult } from "./protocol.ts"; + +export interface SingleRequest { + pool: ItemPool; + /** Packings available to this character, already filtered to its board. */ + tilings: readonly Tiling[]; + /** Everything the character brings before gear: base stats, Arc, and so on. */ + base: Float32Array; + trait: ConsoleTrait | null; + setBonuses: SetBonusTable; + scoring: CompiledScoring; + /** Pool indices held by other characters and therefore off limits. */ + excluded?: ReadonlySet; + beamWidth?: number; + /** Candidates kept per shape before subsets are formed. */ + candidateWidth?: number; + /** Module sets carried out of each packing's beam into the cartridge pass. */ + carry?: number; + /** Builds kept for the team phase's portfolio. */ + portfolioSize?: number; + /** + * Builds kept **per packing**. + * + * A global top-N cut is useless to the team phase: the top 300 builds of one + * character are 300 minor variations on the same modules, so no disjoint team + * selection exists at all. Keeping a few per packing spans the search instead. + */ + perTilingKeep?: number; + /** Nodes before branch and bound gives up and the beam answer stands. */ + nodeBudget?: number; + /** Nodes between yields. */ + chunkNodes?: number; +} + +export const DEFAULT_BEAM_WIDTH = 200; +export const DEFAULT_CANDIDATE_WIDTH = 20; +export const DEFAULT_CARRY = 12; +export const DEFAULT_PORTFOLIO_SIZE = 3000; +export const DEFAULT_PER_TILING_KEEP = 6; +export const DEFAULT_NODE_BUDGET = 300_000; +export const DEFAULT_CHUNK_NODES = 20_000; + +interface BeamState { + vector: Float32Array; + modules: number[]; + value: number; +} + +/** Rank a module by how much of the targets it covers, ignoring saturation. */ +function density(pool: ItemPool, index: number, scoring: CompiledScoring): number { + const base = index * SLOT_COUNT; + let total = 0; + for (let i = 0; i < SLOT_COUNT; i += 1) { + const weight = scoring.weights[i]!; + if (weight === 0) continue; + total += (weight * pool.vectors[base + i]!) / scoring.targets[i]!; + } + return total; +} + +/** + * Every unordered k-subset of `items`. + * + * The same array is reused between yields; callers must copy what they keep. + */ +function* subsets(items: readonly number[], k: number): Generator { + const chosen: number[] = []; + const walk = function* (start: number): Generator { + if (chosen.length === k) { + yield chosen; + return; + } + // Stop once too few candidates remain to finish the subset. + for (let i = start; i <= items.length - (k - chosen.length); i += 1) { + chosen.push(items[i]!); + yield* walk(i + 1); + chosen.pop(); + } + }; + yield* walk(0); +} + +/** Distinct shapes in a packing, with how many copies each needs. */ +function shapeGroups(tiling: Tiling): Array<{ shape: string; count: number }> { + const counts = new Map(); + for (const shape of tiling.pieces) counts.set(shape, (counts.get(shape) ?? 0) + 1); + return [...counts].map(([shape, count]) => ({ shape, count })); +} + +/** + * Cartridges whose contribution is identical are interchangeable, so only one of + * each needs solving. With 55 owned cartridges of a set this removes most of the + * work before any search starts. + */ +function bucketCartridges(pool: ItemPool, indices: readonly number[]): number[] { + const seen = new Map(); + for (const index of indices) { + const base = index * SLOT_COUNT; + const key = `${pool.items[index]!.mainStat}|${Array.from( + pool.vectors.subarray(base, base + SLOT_COUNT), + ).join(",")}`; + if (!seen.has(key)) seen.set(key, index); + } + return [...seen.values()]; +} + +export function* solveSingle( + request: SingleRequest, +): Generator { + const { + pool, + tilings, + base, + trait, + setBonuses, + scoring, + excluded = new Set(), + beamWidth = DEFAULT_BEAM_WIDTH, + candidateWidth = DEFAULT_CANDIDATE_WIDTH, + carry = DEFAULT_CARRY, + portfolioSize = DEFAULT_PORTFOLIO_SIZE, + perTilingKeep = DEFAULT_PER_TILING_KEEP, + nodeBudget = DEFAULT_NODE_BUDGET, + chunkNodes = DEFAULT_CHUNK_NODES, + } = request; + + // Candidates per shape, best first, truncated once. + const candidates = new Map(); + for (const [shape, indices] of pool.modulesByShape) { + const usable = indices.filter((index) => !excluded.has(index)); + usable.sort((a, b) => density(pool, b, scoring) - density(pool, a, scoring)); + candidates.set(shape, usable.slice(0, candidateWidth)); + } + + const cartridgesFor = new Map(); + for (const tiling of tilings) { + if (cartridgesFor.has(tiling.set)) continue; + const owned = (pool.cartridgesBySet.get(tiling.set) ?? []).filter( + (index) => !excluded.has(index), + ); + cartridgesFor.set(tiling.set, bucketCartridges(pool, owned)); + } + + const usable = tilings.filter((tiling) => (cartridgesFor.get(tiling.set) ?? []).length > 0); + const portfolio: Build[] = []; + let best: Build | null = null; + let examined = 0; + let nodes = 0; + + for (const tiling of usable) { + const groups = shapeGroups(tiling); + const cartridges = cartridgesFor.get(tiling.set)!; + + // Enough of every shape must exist, or this packing is simply unavailable. + if (groups.some((group) => (candidates.get(group.shape) ?? []).length < group.count)) { + examined += 1; + continue; + } + + // Fixed part: character base, console trait, set bonus. Not the cartridge - + // that is folded in afterwards, which is what keeps this a sum. + const fixed = emptyVector(); + fixed.set(base); + const traitStat = traitContribution(trait, tiling.pieces); + if (traitStat) vectorFrom([traitStat], fixed); + const bonus = setBonus(setBonuses, tiling.set, tiling.pieces); + for (let i = 0; i < SLOT_COUNT; i += 1) fixed[i] = fixed[i]! + bonus.vector[i]!; + + // Hardest groups first: fewer choices near the root prunes the most. + const ordered = [...groups].sort( + (a, b) => + candidates.get(a.shape)!.length - a.count - (candidates.get(b.shape)!.length - b.count), + ); + + // --- beam over modules, cartridge-free ------------------------------- + let beam: BeamState[] = [{ vector: fixed, modules: [], value: 0 }]; + for (const group of ordered) { + const available = candidates.get(group.shape)!; + const next: BeamState[] = []; + for (const state of beam) { + // An item belongs to exactly one shape, so groups are disjoint and no + // overlap check is needed here. + for (const pick of subsets(available, group.count)) { + const vector = new Float32Array(state.vector); + for (const index of pick) addPoolInto(vector, pool.vectors, index); + next.push({ + vector, + modules: [...state.modules, ...pick], + value: score(vector, scoring), + }); + nodes += 1; + } + } + if (next.length === 0) { + beam = []; + break; + } + next.sort((a, b) => b.value - a.value); + next.length = Math.min(next.length, beamWidth); + beam = next; + if (nodes >= chunkNodes) { + nodes = 0; + yield { done: examined, total: usable.length, best }; + } + } + + examined += 1; + if (beam.length === 0) continue; + const kept = beam.slice(0, carry); + + // --- fold in each cartridge ------------------------------------------ + // One build per *distinct module set*, keeping that set's best cartridge. + // + // Taking the top-N builds instead would return N copies of the same modules + // with different cartridges, which is no use to the team phase: it needs + // builds that differ in the items they occupy, not in their trim. + const forThisTiling: Build[] = []; + for (const state of kept) { + let bestForState: Build | null = null; + for (const cartridge of cartridges) { + const mainStat = pool.items[cartridge]!.mainStat; + const mainSlot = mainStat === null ? -1 : slotOf(mainStat); + const vector = new Float32Array(state.vector); + addPoolInto(vector, pool.vectors, cartridge); + const value = score(vector, scoring, mainSlot); + if (bestForState !== null && value <= bestForState.score) continue; + bestForState = { + cartridge, + modules: state.modules, + tiling, + score: value, + vector, + proven: false, + unknownTiers: bonus.unknownTiers, + }; + } + if (bestForState === null) continue; + if (best === null || bestForState.score > best.score) best = bestForState; + forThisTiling.push(bestForState); + } + forThisTiling.sort((a, b) => b.score - a.score); + portfolio.push(...forThisTiling.slice(0, perTilingKeep)); + + yield { done: examined, total: usable.length, best }; + } + + // --- prove the winner, once ------------------------------------------- + if (best !== null) { + const winner = best; + const groups = shapeGroups(winner.tiling); + const fixed = new Float32Array(winner.vector); + for (const index of winner.modules) { + const from = index * SLOT_COUNT; + for (let i = 0; i < SLOT_COUNT; i += 1) fixed[i] = fixed[i]! - pool.vectors[from + i]!; + } + const mainStat = pool.items[winner.cartridge]!.mainStat; + winner.proven = yield* prove( + pool, + groups, + candidates, + fixed, + scoring, + mainStat === null ? -1 : slotOf(mainStat), + winner, + nodeBudget, + chunkNodes, + () => ({ done: examined, total: usable.length, best }), + ); + } + + portfolio.sort((a, b) => b.score - a.score); + portfolio.length = Math.min(portfolio.length, portfolioSize); + return { best, portfolio, examined, unbuildable: usable.length === 0 }; +} + +/** + * Branch and bound over one packing's groups, improving `incumbent` in place. + * + * Returns true only if the whole tree was closed within budget - that is the + * difference between "this is the best build" and "this is the best we found". + */ +function* prove( + pool: ItemPool, + groups: ReadonlyArray<{ shape: string; count: number }>, + candidates: ReadonlyMap, + fixed: Float32Array, + scoring: CompiledScoring, + mainSlot: number, + incumbent: Build, + nodeBudget: number, + chunkNodes: number, + progress: () => SolveProgress, +): Generator { + const lists = groups.map((group) => ({ + ...group, + available: candidates.get(group.shape) ?? [], + })); + if (lists.some((group) => group.available.length < group.count)) return false; + + // Per-stat best still reachable from group `i` onward, for the bound. + const suffixBest: Float32Array[] = new Array(lists.length + 1); + suffixBest[lists.length] = new Float32Array(SLOT_COUNT); + for (let g = lists.length - 1; g >= 0; g -= 1) { + const vector = new Float32Array(suffixBest[g + 1]!); + const group = lists[g]!; + for (let slot = 0; slot < SLOT_COUNT; slot += 1) { + if (scoring.weights[slot] === 0) continue; + const values = group.available + .map((index) => pool.vectors[index * SLOT_COUNT + slot]!) + .sort((a, b) => b - a) + .slice(0, group.count); + let sum = 0; + for (const value of values) sum += value; + vector[slot] = vector[slot]! + sum; + } + suffixBest[g] = vector; + } + + let nodes = 0; + let exhausted = false; + + const walk = function* ( + depth: number, + vector: Float32Array, + used: number[], + ): Generator { + if (exhausted) return; + if (depth === lists.length) { + const value = score(vector, scoring, mainSlot); + if (value > incumbent.score) { + incumbent.score = value; + incumbent.modules = [...used]; + incumbent.vector = new Float32Array(vector); + } + return; + } + if (upperBound(vector, suffixBest[depth]!, scoring) <= incumbent.score) return; + + const group = lists[depth]!; + for (const pick of subsets(group.available, group.count)) { + if (exhausted) return; + nodes += 1; + if (nodes >= nodeBudget) { + exhausted = true; + return; + } + if (nodes % chunkNodes === 0) yield progress(); + + const child = new Float32Array(vector); + for (const index of pick) addPoolInto(child, pool.vectors, index); + const depthUsed = pick.length; + used.push(...pick); + yield* walk(depth + 1, child, used); + used.length -= depthUsed; + } + }; + + yield* walk(0, fixed, []); + return !exhausted; +} diff --git a/src/solver/team.ts b/src/solver/team.ts new file mode 100644 index 0000000..8c7dcf0 --- /dev/null +++ b/src/solver/team.ts @@ -0,0 +1,374 @@ +/** + * Phases 1 and 2 of the team solve: leximin over portfolios, then column + * generation. + * + * **Leximin, not sum.** Maximising the total lets one character eat the pool and + * leaves another with scraps. Leximin maximises the worst score, then the second + * worst, and so on, so improving a strong character can never come at the cost + * of a weak one. + * + * **Drag order is a tie-break and nothing more.** It is applied only once the + * sorted score vector is already fixed, so the list has real meaning to the + * player without ever driving the allocation. + * + * **The result is anytime.** After each round the current selection is a valid, + * complete, conflict-free assignment, so stopping early always yields something + * usable. + */ +import type { Build } from "./protocol.ts"; +import { clone, disjoint, unionInto, type Bitset } from "./bitset.ts"; +import { itemsOf, type Portfolio, type PortfolioEntry } from "./portfolio.ts"; + +export interface TeamRequest { + portfolios: Portfolio[]; + poolSize: number; + /** + * Character keys in the order the player dragged them. Earlier wins ties. + * Characters missing from the list sort last, in portfolio order. + */ + dragOrder?: readonly string[]; + /** + * Re-solve one character against a restricted pool, for column generation. + * Omit and phase 2 is skipped, which is a supported, cheaper mode. + */ + resolve?: (key: string, excluded: ReadonlySet) => Build[]; + /** Column-generation rounds. */ + rounds?: number; + /** Feasibility nodes before a threshold test gives up and reports infeasible. */ + nodeBudget?: number; +} + +export interface TeamAssignment { + key: string; + build: Build; +} + +export interface TeamProgress { + round: number; + rounds: number; + /** Scores ascending - the vector the player watches climb. */ + sorted: number[]; + assignment: TeamAssignment[]; +} + +export interface TeamResult { + assignment: TeamAssignment[]; + sorted: number[]; + /** Characters with no valid build, so no assignment could include them. */ + unbuildable: string[]; + rounds: number; + /** + * True when every character had builds but no conflict-free selection existed. + * Distinct from an empty team, and usually means the portfolios are variations + * on the same items rather than a genuine spread. + */ + infeasible: boolean; +} + +export const DEFAULT_ROUNDS = 20; +export const DEFAULT_NODE_BUDGET = 200_000; + +/** Lexicographic comparison of ascending-sorted score vectors. Positive: a wins. */ +export function compareLeximin(a: readonly number[], b: readonly number[]): number { + const left = [...a].sort((x, y) => x - y); + const right = [...b].sort((x, y) => x - y); + for (let i = 0; i < Math.min(left.length, right.length); i += 1) { + if (left[i]! !== right[i]!) return left[i]! - right[i]!; + } + return left.length - right.length; +} + +interface Candidate { + entry: PortfolioEntry; + score: number; +} + +/** + * One build per character, all item-disjoint, every score at or above its + * threshold. Null when no such selection exists. + * + * With four characters and bitset intersection this is microseconds, which is + * what makes the binary search over thresholds affordable. + */ +function selectDisjoint( + portfolios: readonly Portfolio[], + thresholds: readonly number[], + nodeBudget: number, +): PortfolioEntry[] | null { + const options: PortfolioEntry[][] = portfolios.map((portfolio, index) => + portfolio.entries.filter((entry) => entry.build.score >= thresholds[index]!), + ); + if (options.some((list) => list.length === 0)) return null; + + const words = portfolios[0]!.entries[0]!.items.length; + const chosen = new Array(portfolios.length).fill(null); + let nodes = 0; + + /** + * Forward checking with dynamic MRV. + * + * A static character order with no propagation thrashes: it commits to the + * highest-scoring build for the first character, then grinds through hundreds + * of options for each of the rest before backtracking. Filtering each + * character's surviving options at every step, failing the moment any of them + * empties, and always branching on the most constrained character turns a + * search that exhausted five million nodes into one that finishes immediately. + */ + const walk = (remaining: number[], live: PortfolioEntry[][], used: Bitset): boolean => { + if (remaining.length === 0) return true; + + let pick = 0; + for (let i = 1; i < remaining.length; i += 1) { + if (live[remaining[i]!]!.length < live[remaining[pick]!]!.length) pick = i; + } + const index = remaining[pick]!; + const rest = remaining.filter((_, i) => i !== pick); + + for (const candidate of live[index]!) { + nodes += 1; + if (nodes > nodeBudget) return false; + + const next = clone(used); + unionInto(next, candidate.items); + + const filtered = live.slice(); + let dead = false; + for (const other of rest) { + const survivors = live[other]!.filter((entry) => disjoint(entry.items, next)); + if (survivors.length === 0) { + dead = true; + break; + } + filtered[other] = survivors; + } + if (dead) continue; + + chosen[index] = candidate; + if (walk(rest, filtered, next)) return true; + chosen[index] = null; + } + return false; + }; + + const all = options.map((_, index) => index); + return walk(all, options, new Uint32Array(words)) ? (chosen as PortfolioEntry[]) : null; +} + +/** Distinct scores available to a character, descending. */ +function scoreLevels(portfolio: Portfolio): number[] { + return [...new Set(portfolio.entries.map((entry) => entry.build.score))].sort( + (a, b) => b - a, + ); +} + +export function* solveTeam( + request: TeamRequest, +): Generator { + const { + portfolios, + poolSize, + dragOrder = [], + resolve, + rounds = DEFAULT_ROUNDS, + nodeBudget = DEFAULT_NODE_BUDGET, + } = request; + + const unbuildable = portfolios + .filter((portfolio) => portfolio.unbuildable || portfolio.entries.length === 0) + .map((portfolio) => portfolio.key); + const active = portfolios.filter( + (portfolio) => !portfolio.unbuildable && portfolio.entries.length > 0, + ); + + if (active.length === 0) { + return { assignment: [], sorted: [], unbuildable, rounds: 0, infeasible: false }; + } + + const dragRank = (key: string): number => { + const index = dragOrder.indexOf(key); + return index < 0 ? dragOrder.length : index; + }; + + /** + * Raise the floor for everyone still unfixed as high as it will go, fix the + * characters that cannot clear it, and repeat. Four cheap binary searches. + */ + const leximin = (): PortfolioEntry[] | null => { + const fixed = new Array(active.length).fill(null); + let selection: PortfolioEntry[] | null = null; + + for (let pass = 0; pass < active.length; pass += 1) { + const unfixed = fixed + .map((value, index) => (value === null ? index : -1)) + .filter((index) => index >= 0); + if (unfixed.length === 0) break; + + // Candidate floors: every score any unfixed character can actually hit. + const levels = [ + ...new Set(unfixed.flatMap((index) => scoreLevels(active[index]!))), + ].sort((a, b) => a - b); + + const thresholdsFor = (floor: number): number[] => + fixed.map((value) => (value === null ? floor : value)); + + let low = 0; + let high = levels.length - 1; + let bestFloor: number | null = null; + let bestSelection: PortfolioEntry[] | null = null; + while (low <= high) { + const mid = (low + high) >>> 1; + const found = selectDisjoint(active, thresholdsFor(levels[mid]!), nodeBudget); + if (found) { + bestFloor = levels[mid]!; + bestSelection = found; + low = mid + 1; + } else { + high = mid - 1; + } + } + if (bestFloor === null || bestSelection === null) return selection; + selection = bestSelection; + + // Anyone who cannot be pushed above the floor is bottlenecked here. + const above = levels.filter((level) => level > bestFloor!); + const nextLevel = above.length > 0 ? above[0]! : null; + let fixedAny = false; + for (const index of unfixed) { + if (nextLevel === null) { + fixed[index] = bestFloor; + fixedAny = true; + continue; + } + const probe = thresholdsFor(bestFloor); + probe[index] = nextLevel; + if (!selectDisjoint(active, probe, nodeBudget)) { + fixed[index] = bestFloor; + fixedAny = true; + } + } + // No character is the bottleneck on its own: settle everyone here rather + // than looping without progress. + if (!fixedAny) { + for (const index of unfixed) fixed[index] = bestFloor; + } + } + + return selection; + }; + + let first = leximin(); + + /** + * Seed a feasible team when the portfolios alone cannot produce one. + * + * Portfolios are generated against the full pool with conflicts ignored, so + * every character's builds concentrate on the same strongest items. With four + * characters that regularly leaves **no** conflict-free selection at all, and + * phase 1 has nothing to start from. + * + * Solving in drag order with the running selection excluded always yields a + * valid team, because the pool is far larger than four builds. That seed is + * order-dependent and therefore greedy - which is exactly what phase 2 exists + * to undo, since it only ever accepts a lexicographic improvement to the whole + * sorted vector. The anti-greedy guarantee survives; it just moves from + * phase 1 to phase 2 in this case. + */ + if (!first && resolve) { + const used = new Set(); + let seeded = true; + for (const portfolio of active) { + const builds = resolve(portfolio.key, used); + const seed = builds[0]; + if (!seed) { + seeded = false; + break; + } + portfolio.entries.push({ build: seed, items: itemsOf(seed, poolSize) }); + for (const item of [seed.cartridge, ...seed.modules]) used.add(item); + } + if (seeded) first = leximin(); + } + + if (!first) { + return { assignment: [], sorted: [], unbuildable, rounds: 0, infeasible: true }; + } + let selection: PortfolioEntry[] = first; + + const assignmentOf = (entries: PortfolioEntry[]): TeamAssignment[] => + entries + .map((entry, index) => ({ key: active[index]!.key, build: entry.build })) + .sort((a, b) => dragRank(a.key) - dragRank(b.key)); + + const sortedOf = (entries: PortfolioEntry[]): number[] => + entries.map((entry) => entry.build.score).sort((a, b) => a - b); + + let sorted = sortedOf(selection); + yield { round: 0, rounds, sorted, assignment: assignmentOf(selection) }; + + // --- phase 2: column generation --------------------------------------- + let round = 0; + if (resolve) { + for (round = 1; round <= rounds; round += 1) { + // The worst-off character, with drag order breaking a tie. + let worst = 0; + for (let i = 1; i < selection.length; i += 1) { + const better = selection[i]!.build.score < selection[worst]!.build.score; + const tie = + selection[i]!.build.score === selection[worst]!.build.score && + dragRank(active[i]!.key) < dragRank(active[worst]!.key); + if (better || tie) worst = i; + } + + const held = new Set(); + selection.forEach((entry, index) => { + if (index === worst) return; + for (const item of [entry.build.cartridge, ...entry.build.modules]) held.add(item); + }); + + // Move one: what the worst-off can do without touching anyone's items. + const fresh = resolve(active[worst]!.key, held); + + // Move two, the donor move: also offer it whatever strictly better-off + // characters are holding. Accepted only if the whole vector improves. + const betterOff = new Set(); + selection.forEach((entry, index) => { + if (index === worst) return; + if (entry.build.score <= selection[worst]!.build.score) { + for (const item of [entry.build.cartridge, ...entry.build.modules]) { + betterOff.add(item); + } + } + }); + const donated = resolve(active[worst]!.key, betterOff); + + const added = [...fresh, ...donated]; + if (added.length === 0) break; + + const before = active[worst]!.entries.length; + for (const build of added) { + active[worst]!.entries.push({ build, items: itemsOf(build, poolSize) }); + } + if (active[worst]!.entries.length === before) break; + + const candidate = leximin(); + if (!candidate) break; + const candidateSorted = sortedOf(candidate); + if (compareLeximin(candidateSorted, sorted) <= 0) { + // No lexicographic improvement: keep what we had and stop paying for + // rounds that cannot help. + break; + } + selection = candidate; + sorted = candidateSorted; + yield { round, rounds, sorted, assignment: assignmentOf(selection) }; + } + } + + return { + assignment: assignmentOf(selection), + sorted, + unbuildable, + rounds: round, + infeasible: false, + }; +} diff --git a/src/solver/worker-host.single.ts b/src/solver/worker-host.single.ts new file mode 100644 index 0000000..f8cfafa --- /dev/null +++ b/src/solver/worker-host.single.ts @@ -0,0 +1,10 @@ +/** + * The single-file build's stand-in for `worker-host.ts`. + * + * A `file://` document has an opaque origin and cannot start a worker at all, so + * this throws and `createSolverHost` falls through to the inline host - the same + * path it takes in Node. + */ +export function makeWorker(): Worker { + throw new Error("workers are unavailable in the single-file build"); +} diff --git a/src/solver/worker-host.ts b/src/solver/worker-host.ts new file mode 100644 index 0000000..d71d063 --- /dev/null +++ b/src/solver/worker-host.ts @@ -0,0 +1,12 @@ +/** + * Constructing the worker, isolated in its own module. + * + * `new Worker(new URL(...))` is rewritten by Vite at transform time whether or + * not the surrounding branch can ever run, so guarding it with a flag would + * still emit a worker chunk and still need `import.meta.url` - which a classic + * script does not have. Keeping it here lets the single-file build alias this + * module to a stub, so the worker never enters that bundle at all. + */ +export function makeWorker(): Worker { + return new Worker(new URL("./worker.ts", import.meta.url), { type: "module" }); +} diff --git a/src/solver/worker.ts b/src/solver/worker.ts new file mode 100644 index 0000000..69e87f7 --- /dev/null +++ b/src/solver/worker.ts @@ -0,0 +1,47 @@ +/** + * The worker entry point. + * + * It does nothing but pump `runJob` and post what comes out, so the only + * difference between running here and running inline is which thread blocks. + */ +import { runJob, type JobProgress, type JobResult, type SolveJob } from "./job.ts"; + +export type WorkerIn = { type: "solve"; id: number; job: SolveJob } | { type: "cancel" }; + +export type WorkerOut = + | { type: "progress"; id: number; progress: JobProgress } + | { type: "result"; id: number; result: JobResult } + | { type: "error"; id: number; message: string }; + +let cancelled = false; + +self.onmessage = (event: MessageEvent) => { + const message = event.data; + if (message.type === "cancel") { + cancelled = true; + return; + } + + cancelled = false; + const { id, job } = message; + try { + const run = runJob(job); + let step = run.next(); + while (!step.done) { + if (cancelled) return; + const out: WorkerOut = { type: "progress", id, progress: step.value }; + self.postMessage(out); + step = run.next(); + } + if (cancelled) return; + const out: WorkerOut = { type: "result", id, result: step.value }; + self.postMessage(out); + } catch (error) { + const out: WorkerOut = { + type: "error", + id, + message: error instanceof Error ? error.message : String(error), + }; + self.postMessage(out); + } +}; diff --git a/src/state/gamedata.ts b/src/state/gamedata.ts new file mode 100644 index 0000000..42a7f5f --- /dev/null +++ b/src/state/gamedata.ts @@ -0,0 +1,87 @@ +/** + * The generated game data. + * + * Loaded through a dynamic import so Vite emits it as a content-hashed chunk - + * immutable-cacheable, and off the first-paint path. It stays a plain module + * rather than a `fetch` precisely so the single-file build can inline it; + * `fetch` could not be. + */ +import type { RawTilings } from "../domain/tilings.ts"; +import type { SetBonusTable } from "../domain/setbonus.ts"; +import type { GuideTable } from "../domain/guides.ts"; + +export interface Esper { + id: number; + abilityKey: string; + name: string; + element: string | null; + rarity: number; + icon: string; + stats: Array<{ id_stats: string; name: string; bShowPercent: boolean; values: number[] }>; + slots: number[][]; + ownerGridCount: number; + trait: Array<{ id_stats: string; name: string; bShowPercent: boolean; value: number }>; + breakthroughLevels: number[]; +} + +export interface Arc { + id: string; + name: string; + icon: string; + quality: number; + desc: string; + stats: unknown; + values: unknown; +} + +export type ArcEffectMode = "always" | "stacks" | "toggle" | "duration" | "unmodellable"; + +export interface ArcEffect { + placeholder: number; + stat: string | null; + percent?: boolean; + mode: ArcEffectMode; + default?: boolean; + why: string; +} + +export interface GameData { + format: string; + format_version: number; + generated: string; + espers: Esper[]; + arcs: Arc[]; + arcEffects: Record; +} + +export interface LoadedData { + gamedata: GameData; + tilings: RawTilings; + setBonuses: SetBonusTable; + guides: GuideTable; +} + +let cached: Promise | null = null; + +export function loadGameData(): Promise { + cached ??= (async () => { + const [gamedata, tilings, setBonuses, guides] = await Promise.all([ + import("../generated/gamedata.json"), + import("../generated/tilings.json"), + import("../../data-src/set-bonuses.json"), + import("../../data-src/guides.json"), + ]); + return { + gamedata: (gamedata.default ?? gamedata) as unknown as GameData, + tilings: (tilings.default ?? tilings) as unknown as RawTilings, + setBonuses: (setBonuses.default ?? setBonuses) as unknown as SetBonusTable, + guides: (guides.default ?? guides) as unknown as GuideTable, + }; + })(); + return cached; +} + +/** The esper whose ability key a capture used, or null for a codename with no record. */ +export function esperFor(data: GameData, characterId: string): Esper | null { + return data.espers.find((esper) => esper.abilityKey === characterId) ?? null; +} diff --git a/src/state/store.ts b/src/state/store.ts new file mode 100644 index 0000000..29ae1bb --- /dev/null +++ b/src/state/store.ts @@ -0,0 +1,163 @@ +/** + * The app store. + * + * Deliberately not a library: an observable holding one immutable `StoredState`, + * plus the adapter it persists through. React subscribes via + * `useSyncExternalStore`, so nothing here imports React and the whole thing is + * testable in Node. + */ +import { createBestAdapter } from "../db/adapters/idb.ts"; +import { emptyState, type PersistenceAdapter, type StoredState } from "../db/adapters/types.ts"; +import { parseGearExport, type ImportResult } from "../db/import.ts"; +import { + applyImport, + editItem, + equip, + nameOwnerGroup, + persist, + undoLast, + type EquipOptions, + type EquipOutcome, +} from "../db/store.ts"; +import { importDatabase, exportDatabase, type DbFile } from "../db/dbfile.ts"; + +export interface AppState { + ready: boolean; + /** False in the degraded persistence tiers, which the UI must announce. */ + durable: boolean; + adapterKind: PersistenceAdapter["kind"]; + data: StoredState; + /** The last import that was offered and refused, so the report can be shown. */ + lastImportReport: ImportResult | null; +} + +type Listener = () => void; + +export class Store { + private state: AppState; + private listeners = new Set(); + + constructor(private adapter: PersistenceAdapter) { + this.state = { + ready: false, + durable: adapter.durable, + adapterKind: adapter.kind, + data: emptyState(), + lastImportReport: null, + }; + } + + static async open(adapter?: PersistenceAdapter): Promise { + const store = new Store(adapter ?? (await createBestAdapter())); + await store.load(); + return store; + } + + getState = (): AppState => this.state; + + subscribe = (listener: Listener): (() => void) => { + this.listeners.add(listener); + return () => this.listeners.delete(listener); + }; + + private set(next: Partial): void { + this.state = { ...this.state, ...next }; + for (const listener of this.listeners) listener(); + } + + async load(): Promise { + this.set({ data: await this.adapter.read(), ready: true }); + } + + /** + * Validate an export without applying it. + * + * Import is deliberate and irreversible by design, so the confirmation dialog + * gets the counts first and the player gets to refuse. + */ + reviewImport(raw: unknown): ImportResult { + const result = parseGearExport(raw); + this.set({ lastImportReport: result }); + return result; + } + + async applyReviewedImport(result: ImportResult): Promise { + const next = applyImport(this.state.data, result); + await persist(this.adapter, next, "all"); + this.set({ data: next, lastImportReport: null }); + } + + /** The escape hatch: not undo, but one click back from a wrong file. */ + async restorePreImport(): Promise { + const snapshot = this.state.data.snapshot; + if (!snapshot) return false; + const next: StoredState = { db: snapshot, undo: [], snapshot: null }; + await persist(this.adapter, next, "all"); + this.set({ data: next }); + return true; + } + + async equip( + characterId: string, + instances: readonly string[], + options?: EquipOptions, + ): Promise { + const outcome = equip(this.state.data, characterId, instances, options); + await persist(this.adapter, outcome.state, "equipment"); + this.set({ data: outcome.state }); + return outcome.displaced; + } + + /** Record what the game's sheet actually reads for a character. */ + async setMeasuredSheet( + characterId: string, + measured: Record | null, + ): Promise { + const characters = this.state.data.db.characters.map((row) => + row.characterId === characterId ? { ...row, measuredSheet: measured } : row, + ); + const next = { ...this.state.data, db: { ...this.state.data.db, characters } }; + await persist(this.adapter, next, "all"); + this.set({ data: next }); + } + + /** Correct a decoded value by hand. Overwritten by the next capture import. */ + async editItem( + instance: string, + patch: Parameters[2], + ): Promise { + const next = editItem(this.state.data, instance, patch); + await persist(this.adapter, next, "all"); + this.set({ data: next }); + } + + async undo(): Promise { + const next = undoLast(this.state.data); + await persist(this.adapter, next, "equipment"); + this.set({ data: next }); + } + + async nameGroup(ownerGroup: string, characterId: string): Promise { + const next = nameOwnerGroup(this.state.data, ownerGroup, characterId); + await persist(this.adapter, next, "all"); + this.set({ data: next }); + } + + exportFile(gamedataVersion: string | null): DbFile { + return exportDatabase(this.state.data, gamedataVersion); + } + + async importFile(raw: unknown): Promise { + const result = importDatabase(raw); + if (!result.ok || !result.state) return result.problems; + // Same protection as a capture import: keep a way back. + const next: StoredState = { ...result.state, snapshot: this.state.data.db }; + await persist(this.adapter, next, "all"); + this.set({ data: next }); + return []; + } + + close(): void { + this.adapter.close(); + } +} diff --git a/src/ui/App.tsx b/src/ui/App.tsx new file mode 100644 index 0000000..0153735 --- /dev/null +++ b/src/ui/App.tsx @@ -0,0 +1,114 @@ +import { useEffect, useState } from "react"; + +import { Store } from "../state/store.ts"; +import { loadGameData, type LoadedData } from "../state/gamedata.ts"; +import { resolveCharacter, todoInGame, unnamedGroups } from "../db/store.ts"; +import { DataPanel } from "./DataPanel.tsx"; +import { ItemTable } from "./ItemTable.tsx"; +import { CharactersTab } from "./CharactersTab.tsx"; +import { TeamTab } from "./TeamTab.tsx"; +import { StoreContext, useAppState } from "./useStore.ts"; +import { hashFor, useRoute, TABS } from "./router.ts"; + +export function App() { + const [store, setStore] = useState(null); + const [data, setData] = useState(null); + const [error, setError] = useState(null); + + useEffect(() => { + let cancelled = false; + void (async () => { + try { + const [opened, loaded] = await Promise.all([Store.open(), loadGameData()]); + if (cancelled) return; + setStore(opened); + setData(loaded); + } catch (caught) { + if (!cancelled) setError(caught instanceof Error ? caught.message : String(caught)); + } + })(); + return () => { + cancelled = true; + }; + }, []); + + if (error) return

Could not start: {error}

; + if (!store || !data) return

Loading…

; + + return ( + + + + ); +} + +function Shell({ data }: { data: LoadedData }) { + const state = useAppState(); + const route = useRoute(); + const db = state.data.db; + + const ownerOf = (instance: string): string | null => { + const row = db.equipment.find((entry) => entry.instance === instance); + if (!row) return null; + return resolveCharacter(row, db.ownerNames) ?? `group ${row.ownerGroup?.slice(0, 8)}`; + }; + + const todo = todoInGame(db); + const unnamed = unnamedGroups(db); + + return ( +
+
+

NTE gear optimizer

+ +
+ + {/* The degraded persistence tiers have to say so, permanently. */} + {!state.durable && ( +

+ Storage is not durable here ({state.adapterKind}). Use Export database + {" "}to keep your work. +

+ )} + + {db.items.length === 0 && ( +

+ No gear imported yet. Run the exporter, then import the{" "} + *_Gear_*.json file it writes. +

+ )} + + + + {todo.size > 0 && ( +
+ To do in game ({[...todo.values()].flat().length} pieces) + {[...todo].map(([character, rows]) => ( +

+ {character || "unassigned"}: {rows.length} pieces +

+ ))} +
+ )} + +
+ {route.tab === "cartridges" && ( + + )} + {route.tab === "modules" && ( + + )} + {route.tab === "characters" && ( + + )} + {route.tab === "team" && } +
+
+ ); +} diff --git a/src/ui/Board.tsx b/src/ui/Board.tsx new file mode 100644 index 0000000..7385b83 --- /dev/null +++ b/src/ui/Board.tsx @@ -0,0 +1,60 @@ +/** + * A character's console grid. + * + * Blocked cells are drawn as holes, free cells as the piece covering them, and + * borders only where a piece meets something else - so a build reads as six to + * eight objects rather than twenty squares. + */ +import { pieceColour, renderBoard } from "../domain/render.ts"; + +export interface BoardProps { + cells: readonly number[]; + placement: readonly number[]; + pieces: number; + /** Called with the piece index under the pointer, or null. */ + onHover?: (piece: number | null) => void; + labelFor?: (piece: number) => string; + size?: number; +} + +export function Board({ + cells, + placement, + pieces, + onHover, + labelFor, + size = 34, +}: BoardProps) { + const render = renderBoard(cells, placement); + const free = new Set(cells); + + return ( +
onHover?.(null)} + > + {Array.from({ length: render.rows * render.cols }, (_, index) => { + if (!free.has(index)) { + return
; + } + const cell = render.cells.find((entry) => entry.cell === index)!; + return ( +
onHover?.(cell.piece)} + style={{ + background: pieceColour(cell.piece, pieces), + borderTopWidth: cell.top ? 2 : 0, + borderRightWidth: cell.right ? 2 : 0, + borderBottomWidth: cell.bottom ? 2 : 0, + borderLeftWidth: cell.left ? 2 : 0, + }} + /> + ); + })} +
+ ); +} diff --git a/src/ui/CharacterView.tsx b/src/ui/CharacterView.tsx new file mode 100644 index 0000000..12c4089 --- /dev/null +++ b/src/ui/CharacterView.tsx @@ -0,0 +1,701 @@ +/** + * One character's optimizer view. + * + * Holds the Arc selector, the console grid the result is drawn into, the + * targets the solve runs against, and Equip. + * + * Two things this view has to be honest about rather than paper over: + * + * - A set bonus whose value nobody has measured contributes **nothing**, and the + * panel says so. Scoring it as zero silently would look like a real number. + * - `proven` means "no better module assignment for this packing and cartridge", + * not global optimality, and the label says exactly that. + */ +import { useMemo, useRef, useState } from "react"; + +import { arcContribution, arcControls, MAX_ARC_LEVEL, MAX_REFINEMENT } from "../domain/arcs.ts"; +import { boardFromSlots } from "../domain/board.ts"; +import { compile, explain, type StatTarget } from "../domain/scoring.ts"; +import { guideFor, targetsFromGuide, variantFor } from "../domain/guides.ts"; +import { compareSheet, predictSheet } from "../domain/sheet.ts"; +import { consoleTrait } from "../domain/stats.ts"; +import { + emptyVector, + isKnownStat, + slotOf, + SLOT_COUNT, + STAT_SLOTS, + type StatId, +} from "../domain/statvec.ts"; +import { equipmentOf, heldByOthers, resolveCharacter } from "../db/store.ts"; +import { createSolverHost, CancelledError, type SolveHandle } from "../solver/host.ts"; +import type { JobProgress, JobResult, SolveJob } from "../solver/job.ts"; +import { esperFor, type LoadedData } from "../state/gamedata.ts"; +import { Board } from "./Board.tsx"; +import { ItemCard } from "./ItemCard.tsx"; +import { Icon } from "./Icon.tsx"; +import { useAppState, useStore } from "./useStore.ts"; + +const DEFAULT_TARGETS: StatTarget[] = [ + { stat: "CritBase", target: 0.7, weight: 3 }, + { stat: "CritDamageBase", target: 2.0, weight: 3 }, + { stat: "AtkUp", target: 0.5, weight: 2 }, + { stat: "UnbalIntensityBase", target: 280, weight: 1 }, +]; + +export function CharacterView({ + data, + characterId, +}: { + data: LoadedData; + characterId: string; +}) { + const store = useStore(); + const state = useAppState(); + const db = state.data.db; + + const character = db.characters.find((row) => row.characterId === characterId); + const esper = esperFor(data.gamedata, characterId); + + const guide = guideFor(data.guides, characterId); + // Defaults to Prydwen on every page load, as specified - but a character with + // no published guide has nothing to default to, so it starts on Custom. + const [useCustom, setUseCustom] = useState(() => guide === null); + const [variantName, setVariantName] = useState( + guide?.variants[0]?.name ?? null, + ); + + const [customTargets, setTargets] = useState(() => { + const stored = character?.customTargets; + if (!stored?.length) return DEFAULT_TARGETS; + return stored + .filter((entry) => isKnownStat(entry.stat)) + .map((entry) => ({ stat: entry.stat as StatId, target: entry.target, weight: entry.weight })); + }); + const variant = variantFor(guide, variantName); + // Switching back to Prydwen does not discard what was customised. + const targets = useCustom || !variant ? customTargets : targetsFromGuide(variant); + + const [arcId, setArcId] = useState(character?.arcId ?? null); + const [arcLevel, setArcLevel] = useState(MAX_ARC_LEVEL); + const [refinement, setRefinement] = useState(Math.max(character?.arcRefinement ?? 1, 1)); + const [arcToggles, setArcToggles] = useState>( + () => (character?.effectToggles as Record) ?? {}, + ); + const [result, setResult] = useState(null); + const [progress, setProgress] = useState(null); + const [running, setRunning] = useState(false); + const [problem, setProblem] = useState(null); + const [hovered, setHovered] = useState(null); + // R2. Off by default: taking gear off another character is a real cost, so it + // is opted into rather than assumed. + const [useEquipped, setUseEquipped] = useState(false); + const handle = useRef(null); + + const worn = equipmentOf(db, characterId); + + const arc = arcId ? data.gamedata.arcs.find((entry) => entry.id === arcId) : undefined; + // The Arc is part of the character's base, not part of the gear pool: it + // contributes flat ATK and one stat line before any module is placed. + const arcResult = useMemo( + () => + arc + ? arcContribution(arc, data.gamedata.arcEffects[arc.id], { + arcId: arc.id, + level: arcLevel, + refinement, + toggles: arcToggles, + }) + : null, + [arc, data.gamedata.arcEffects, arcLevel, refinement, arcToggles], + ); + const build = result?.assignment[0]?.build ?? null; + + const board = useMemo(() => (esper ? boardFromSlots(esper.slots) : null), [esper]); + + if (!esper || !board) { + return ( +
+

{characterId}

+ {/* Seven codenames have no everness counterpart at all. */} +

+ No game data for this codename, so there is no console grid, stat curve or artwork for + it. Its gear still appears in the item tabs. +

+
+ ); + } + + const trait = consoleTrait(esper); + + const solve = async () => { + setProblem(null); + setResult(null); + setRunning(true); + const job: SolveJob = { + items: db.items.map((item) => ({ + instance: item.instance, + kind: item.kind, + item_id: item.itemId, + shape: item.shape ?? undefined, + set: item.set ?? undefined, + level: item.level, + rarity: item.rarity, + main_stats: item.mainStats, + substats: item.substats, + owner_group: null, + })), + setBonuses: data.setBonuses, + tilings: data.tilings, + characters: [ + { + key: characterId, + slots: esper.slots, + trait, + base: arcResult ? Array.from(arcResult.vector) : new Array(SLOT_COUNT).fill(0), + scoring: { targets }, + excludedInstances: useEquipped ? [] : heldByOthers(db, [characterId]), + }, + ], + options: { rounds: 0 }, + }; + const host = createSolverHost(); + const started = host.solve(job, setProgress); + handle.current = started; + try { + setResult(await started.promise); + } catch (error) { + if (!(error instanceof CancelledError)) { + setProblem(error instanceof Error ? error.message : String(error)); + } + } finally { + setRunning(false); + host.dispose(); + } + }; + + // The solve's own packing decides the cells; a captured loadout carries them + // only when the capture did. + const placement = build + ? build.tiling.placement + : board.cells.map((cell) => worn.findIndex((row) => row.cells?.includes(cell))); + const cells = build ? build.tiling.cells : board.cells; + const pieces = build ? build.tiling.pieces.length : Math.max(worn.length, 1); + + const itemFor = (piece: number) => { + if (!build) { + const row = worn[piece]; + return row ? db.items.find((item) => item.instance === row.instance) : undefined; + } + const index = build.modules[piece]; + return index === undefined ? undefined : db.items[index]; + }; + + const report = build ? explain(build.vector, compile({ targets })) : null; + + // The sheet reflects what the character would actually have: the solved build + // when there is one, otherwise the Arc alone plus what they are wearing. + const sheetTotal = useMemo(() => { + if (build) return build.vector; + const total = arcResult ? new Float32Array(arcResult.vector) : emptyVector(); + for (const row of worn) { + const item = db.items.find((entry) => entry.instance === row.instance); + if (!item) continue; + for (const stat of [...item.mainStats, ...item.substats]) { + if (stat.value === null) continue; + const slot = slotOf(stat.stat); + if (slot >= 0) total[slot] = total[slot]! + stat.value; + } + } + return total; + }, [build, arcResult, worn, db.items]); + + const sheet = compareSheet( + predictSheet(esper, character?.level ?? null, sheetTotal), + character?.measuredSheet, + ); + + return ( +
+

+ + {esper.name}{" "} + + level {character?.level ?? "?"} · {character?.breakthroughs ?? "?"} breakthroughs + +

+

+ {esper.element} · console trait{" "} + {trait + ? `${trait.name} +${trait.per} per Type ${trait.moduleCells === 2 ? "II" : "III"}` + : "none"} +

+ +
+ + {arc && ( + <> + + + + )} +
+ + {arc && ( + + )} + +
+ + + {guide && !useCustom && guide.variants.length > 1 && ( + + )} + {guide === null && ( + + No published guide for this character — see RESUME.md on why guide data is not + scraped. + + )} +
+ + {useCustom || !variant ? ( + + ) : ( + + )} + + + +
+ + + {build && ( + + )} +
+ + {running && progress && ( +

+ {progress.phase === "portfolio" + ? `${progress.done} / ${progress.total} packings` + : `round ${progress.round}`} +

+ )} + {problem &&

{problem}

} + {result?.unbuildable.includes(characterId) && ( +

No valid full-set build exists for this character and pool.

+ )} + + { + const item = itemFor(piece); + return item ? `${item.shape ?? item.set} +${item.level}` : ""; + }} + /> + + {hovered !== null && hovered >= 0 && ( + + )} + + void store.setMeasuredSheet(characterId, next)} + /> + + {build && ( +
+

+ score {build.score.toFixed(4)} ·{" "} + {build.proven + ? "optimal for this packing and cartridge" + : "best found, not proved optimal"} +

+ {build.unknownTiers.length > 0 && ( +

+ Set bonus tier {build.unknownTiers.join(" and ")} is active but its values have + never been measured, so it contributes nothing to this score. +

+ )} + {report && ( + + + {report.stats.map((stat) => ( + + + + + + + + ))} + +
{stat.stat}{stat.value.toFixed(3)}/ {stat.target} +
+
+
+
{(stat.attainment * 100).toFixed(0)}%
+ )} +
+ )} +
+ ); +} + +function TargetEditor({ + targets, + onChange, +}: { + targets: StatTarget[]; + onChange: (next: StatTarget[]) => void; +}) { + return ( +
+ Targets and weights +

+ Targets are a floor to reach, not a ceiling: each stat stops earning once it is met, so + the shortfall falls on the lowest-weighted stats. +

+ {targets.map((entry, index) => ( +
+ + { + const next = [...targets]; + next[index] = { ...entry, target: Number(event.target.value) }; + onChange(next); + }} + /> + { + const next = [...targets]; + next[index] = { ...entry, weight: Number(event.target.value) }; + onChange(next); + }} + /> + +
+ ))} + +
+ ); +} + + +/** + * Controls for an Arc's conditional effects. + * + * The control follows the classification, never the effect text: `toggle` is a + * checkbox, `stacks` is a count. Anything classified `duration` or + * `unmodellable` gets no control and is listed as left out, because a build that + * silently assumed a conditional buff was active would read as a better build + * than it is. + */ +function ArcEffects({ + controls, + toggles, + onChange, + omitted, +}: { + controls: ReturnType; + toggles: Record; + onChange: (next: Record) => void; + omitted: Array<{ placeholder: number; mode: string; why: string }>; +}) { + const skipped = omitted.filter( + (entry) => entry.mode === "duration" || entry.mode === "unmodellable", + ); + return ( +
+ Arc effects + {controls.length === 0 &&

Nothing on this Arc is conditional.

} + {controls.map((control) => + control.mode === "toggle" ? ( + + ) : ( + + ), + )} + {skipped.length > 0 && ( +

+ Not modelled: {skipped.map((entry) => entry.why).join("; ")} +

+ )} +
+ ); +} + +/** + * Predicted against what the game actually shows. + * + * Permanent rather than a debug view. The stat model was solved against one + * character's sheet and has measured gaps, so the only honest way to ship it is + * to keep the comparison in front of the player: drift then gets noticed by + * whoever can see the real number, instead of quietly skewing every build. + */ +function SheetPanel({ + sheet, + measured, + onSave, +}: { + sheet: ReturnType; + measured: Record | null; + onSave: (next: Record | null) => void; +}) { + const [draft, setDraft] = useState>(() => + Object.fromEntries(Object.entries(measured ?? {}).map(([key, value]) => [key, String(value)])), + ); + const drifted = sheet.filter((line) => line.drifted); + + return ( +
0}> + + Predicted vs actual sheet + {drifted.length > 0 && ( + — {drifted.length} disagree + )} + +

+ Read these with the character off the active team. On field an Arc's + conditional effects are folded into the numbers and cannot be separated from gear. +

+ + + + + + + + + + + {sheet.map((line) => ( + + + + + + + ))} + +
StatPredictedIn gameDifference
{line.label} + {line.predicted === null ? ( + + unavailable + + ) : line.percent ? ( + `${(line.predicted * 100).toFixed(2)}%` + ) : ( + line.predicted.toFixed(0) + )} + + setDraft({ ...draft, [line.key]: event.target.value })} + /> + + {line.delta === null + ? "—" + : line.percent + ? `${(line.delta * 100).toFixed(2)}%` + : line.delta.toFixed(1)} +
+
+ + +
+ {drifted.length > 0 && ( +

+ The model disagrees with the game on {drifted.map((line) => line.label).join(", ")}. + That is a bug in the stat model, not in your gear — worth recording before trusting a + build. +

+ )} +
+ ); +} + +/** Published targets, rendered read-only: they are a citation, not a setting. */ +function ReadOnlyTargets({ + targets, + source, + updated, +}: { + targets: StatTarget[]; + source: string; + updated: string; +}) { + return ( +
+ + Targets and weights from {source}, {updated} + +

+ Weights come from the published substat ranking, so a shortfall lands on the + lowest-ranked stats. Switch to Custom to change any of it. +

+ + + {targets.map((entry) => ( + + + + + + ))} + +
{entry.stat}{entry.target}weight {entry.weight.toFixed(2)}
+
+ ); +} diff --git a/src/ui/CharactersTab.tsx b/src/ui/CharactersTab.tsx new file mode 100644 index 0000000..ae3982c --- /dev/null +++ b/src/ui/CharactersTab.tsx @@ -0,0 +1,111 @@ +/** + * Characters, and one character's optimizer view. + * + * The list is every character the capture saw. Seven codenames have no everness + * record at all (`Chiichan073`, `Female051`, `Jin`, `Kuhara`, `Mint019`, + * `Mitsuki`, `Oneiroi`), so the card has to work without artwork, a grid or stat + * curves rather than assuming they exist. + */ +import { esperFor, type LoadedData } from "../state/gamedata.ts"; +import { CharacterView } from "./CharacterView.tsx"; +import { Icon } from "./Icon.tsx"; +import { equipmentOf } from "../db/store.ts"; +import { hashFor, type Route } from "./router.ts"; +import { useAppState, useStore } from "./useStore.ts"; + +export function CharactersTab({ + data, + route, + unnamedGroups, +}: { + data: LoadedData; + route: Route; + unnamedGroups: string[]; +}) { + const state = useAppState(); + const db = state.data.db; + + if (route.id) return ; + + return ( +
+ {unnamedGroups.length > 0 && ( + + )} + +
+ ); +} + +/** + * The owner groups nobody has named. + * + * Seven of thirteen cannot be matched from the capture at all - three sets of + * characters share both their module shapes and their cartridge set - so the + * player names them once, keyed on values that are stable across exports. + */ +function UnidentifiedGroups({ groups, data }: { groups: string[]; data: LoadedData }) { + const store = useStore(); + const state = useAppState(); + const db = state.data.db; + + return ( +
+

Unidentified groups

+

+ The capture says these items are worn together, but not by whom. Name each group once + and it sticks. +

+ {groups.map((group) => { + const worn = db.equipment.filter((row) => row.ownerGroup === group); + const items = worn + .map((row) => db.items.find((item) => item.instance === row.instance)) + .filter((item) => item !== undefined); + return ( +
+ {group.slice(0, 12)} + + {items.map((item) => item.shape ?? item.set).join(", ")} + + +
+ ); + })} +
+ ); +} diff --git a/src/ui/DataPanel.tsx b/src/ui/DataPanel.tsx new file mode 100644 index 0000000..48dd2c8 --- /dev/null +++ b/src/ui/DataPanel.tsx @@ -0,0 +1,196 @@ +/** + * Import and export. + * + * Two separate things, labelled separately because they are not the same and + * confusing them loses work: + * + * - **Import gear capture** replaces what you own, from the game. + * - **Import database** replaces your whole workspace, from a file this app + * wrote - including everything you configured by hand. + * + * A capture import is validated first and shown as a diff before it is applied, + * because it is deliberate and irreversible. `Restore pre-import state` is the + * way back, and is deliberately not called undo: it is one snapshot, not a + * history. + */ +import { useRef, useState } from "react"; + +import { fileName } from "../db/dbfile.ts"; +import type { ImportResult } from "../db/import.ts"; +import { useAppState, useStore } from "./useStore.ts"; + +async function readJson(file: File): Promise { + return JSON.parse(await file.text()); +} + +/** + * Hand the browser a file. + * + * A blob URL and a click, revoked afterwards - the same call works in the + * hosted build and is the only save path the `file://` build has at all, since + * it cannot reach IndexedDB. + */ +function download(name: string, contents: string): void { + const url = URL.createObjectURL(new Blob([contents], { type: "application/json" })); + const anchor = document.createElement("a"); + anchor.href = url; + anchor.download = name; + anchor.click(); + URL.revokeObjectURL(url); +} + +export function DataPanel({ gamedataVersion }: { gamedataVersion: string | null }) { + const store = useStore(); + const state = useAppState(); + const [pending, setPending] = useState(null); + const [problems, setProblems] = useState([]); + const [note, setNote] = useState(null); + const gearInput = useRef(null); + const dbInput = useRef(null); + + const reviewGear = async (file: File) => { + setProblems([]); + setNote(null); + try { + setPending(store.reviewImport(await readJson(file))); + } catch (error) { + setProblems([error instanceof Error ? error.message : String(error)]); + } + }; + + const apply = async () => { + if (!pending?.ok) return; + await store.applyReviewedImport(pending); + setPending(null); + setNote("Gear imported."); + }; + + return ( +
+

Data

+ +
+ + { + const file = event.target.files?.[0]; + if (file) void reviewGear(file); + event.target.value = ""; + }} + /> + + + + { + const file = event.target.files?.[0]; + if (file) { + void (async () => { + setNote(null); + try { + const found = await store.importFile(await readJson(file)); + setProblems(found); + if (found.length === 0) setNote("Database restored."); + } catch (error) { + setProblems([error instanceof Error ? error.message : String(error)]); + } + })(); + } + event.target.value = ""; + }} + /> + + {state.data.snapshot && ( + + )} +
+ + {note &&

{note}

} + {problems.length > 0 && ( +
    + {problems.map((problem) => ( +
  • {problem}
  • + ))} +
+ )} + + {pending && setPending(null)} />} +
+ ); +} + +function ImportReview({ + result, + onApply, + onCancel, +}: { + result: ImportResult; + onApply: () => Promise; + onCancel: () => void; +}) { + const { report } = result; + return ( +
+

+ + {report.expected ?? "?"} expected, {report.parsed} parsed, {report.rejected} rejected + +

+ + {result.ok ? ( + <> +

+ Importing replaces every item and every equipped loadout. Anything you equipped in + the app but have not applied in game will be lost. Your Arcs, targets, priorities and + group names are kept. +

+
+ + +
+ + ) : ( + <> + {/* Fail closed: nothing at all is written when anything is wrong. */} +

Nothing was imported.

+
    + {report.problems.slice(0, 20).map((problem, index) => ( +
  • + {problem.code}: {problem.detail} + {problem.subject ? ` (${problem.subject})` : ""} +
  • + ))} +
+ {report.problems.length > 20 && ( +

…and {report.problems.length - 20} more.

+ )} +
+ +
+ + )} +
+ ); +} diff --git a/src/ui/Icon.tsx b/src/ui/Icon.tsx new file mode 100644 index 0000000..5ceae54 --- /dev/null +++ b/src/ui/Icon.tsx @@ -0,0 +1,51 @@ +/** + * Character and Arc artwork. + * + * Files are fetched at build time into `public/img/` and referenced by their + * hashed name - everness is never contacted at runtime. + * + * The single-file `file://` build carries no images, and seven character + * codenames have no everness record and so no icon at all. Both cases end up + * here, and both fall back to the name rather than a broken-image box: the name + * is the information that actually identifies the character. + */ +import { useState } from "react"; + +import icons from "../generated/icons.json"; + +const FILES = (icons as { files: Record }).files; + +export function iconFile(key: string): string | null { + return FILES[key] ?? null; +} + +export function Icon({ + entry, + alt, + size = 44, +}: { + entry: string; + alt: string; + size?: number; +}) { + const [broken, setBroken] = useState(false); + const file = iconFile(entry); + if (!file || broken) { + return ( + + {alt.slice(0, 2)} + + ); + } + return ( + {alt} setBroken(true)} + /> + ); +} diff --git a/src/ui/ItemCard.tsx b/src/ui/ItemCard.tsx new file mode 100644 index 0000000..843072f --- /dev/null +++ b/src/ui/ItemCard.tsx @@ -0,0 +1,44 @@ +/** + * Everything needed to find one module in the game's own inventory. + * + * Instance ids mean nothing to a person, so identification is by the properties + * visible on the item in game: shape, type, level, rarity, main stat and all + * four substats. That is the whole point of the visual result - read the block, + * find the matching module in your list, drop it in the cell shown. + */ +import type { ItemRow } from "../db/schema.ts"; +import type { Database } from "../db/schema.ts"; +import { resolveCharacter } from "../db/store.ts"; + +export function typeName(cells: number | null): string | null { + if (cells === 2) return "II"; + if (cells === 3) return "III"; + if (cells === 4) return "IV"; + return null; +} + +export function ItemCard({ item, db }: { item: ItemRow | undefined; db: Database }) { + if (!item) return null; + const row = db.equipment.find((entry) => entry.instance === item.instance); + const owner = row ? resolveCharacter(row, db.ownerNames) : null; + const type = typeName(item.cells); + return ( +
+ + {item.shape ?? item.set} + {type ? ` · Type ${type}` : ""} · +{item.level} · {item.rarity} + +
{item.mainStats.map((stat) => stat.stat).join(", ") || "—"}
+
    + {item.substats.map((stat) => ( +
  • + {stat.stat} {stat.value} +
  • + ))} +
+ {/* R2's toggle makes this the difference between "free" and "you would be + taking it off someone". */} + {owner &&
Equipped by: {owner}
} +
+ ); +} diff --git a/src/ui/ItemTable.tsx b/src/ui/ItemTable.tsx new file mode 100644 index 0000000..382b760 --- /dev/null +++ b/src/ui/ItemTable.tsx @@ -0,0 +1,231 @@ +/** + * The Cartridges and Modules tabs. + * + * One component, because the two differ only in which columns distinguish an + * item. 817 rows is `.filter().sort()` on an array - a table library would earn + * nothing here and would be one more thing to still work in three years. + * + * Filters combine on purpose: "Crimson with a CRIT DMG main and a Cycle sub" is + * the question a player actually asks. + */ +import { useMemo, useState } from "react"; + +import { useStore } from "./useStore.ts"; + +import { STAT_SLOTS } from "../domain/statvec.ts"; +import type { ItemRow } from "../db/schema.ts"; + +export interface ItemTableProps { + kind: "cartridge" | "module"; + items: readonly ItemRow[]; + /** Owner group per instance, when the item is worn. */ + ownerOf: (instance: string) => string | null; +} + +type SortKey = "itemId" | "level" | "set" | "shape"; + +export function ItemTable({ kind, items, ownerOf }: ItemTableProps) { + const [group, setGroup] = useState(""); + const [main, setMain] = useState(""); + const [sub, setSub] = useState(""); + const [minLevel, setMinLevel] = useState(0); + const [sort, setSort] = useState(kind === "cartridge" ? "set" : "shape"); + const [editing, setEditing] = useState(null); + + const rows = useMemo(() => { + const filtered = items.filter((item) => { + if (item.kind !== kind) return false; + if (group && (kind === "cartridge" ? item.set : item.shape) !== group) return false; + if (main && !item.mainStats.some((stat) => stat.stat === main)) return false; + if (sub && !item.substats.some((stat) => stat.stat === sub)) return false; + if (item.level < minLevel) return false; + return true; + }); + return [...filtered].sort((a, b) => { + if (sort === "level") return b.level - a.level; + const left = String(a[sort] ?? ""); + const right = String(b[sort] ?? ""); + return left.localeCompare(right) || a.itemId.localeCompare(b.itemId); + }); + }, [items, kind, group, main, sub, minLevel, sort]); + + const groups = useMemo(() => { + const seen = new Set(); + for (const item of items) { + if (item.kind !== kind) continue; + const value = kind === "cartridge" ? item.set : item.shape; + if (value) seen.add(value); + } + return [...seen].sort(); + }, [items, kind]); + + return ( +
+
+ + + + + + + {rows.length} of {items.filter((item) => item.kind === kind).length} + +
+ + + + + + {kind === "module" && } + + + + + + + + {rows.map((item) => ( + setEditing(editing === item.instance ? null : item.instance)} + > + + {kind === "module" && } + {/* Level is not a filter on purpose: substats are identical at +0 + and +20, so an unlevelled item is a valid recommendation. */} + + + + + + ))} + {editing && rows.some((item) => item.instance === editing) && ( + + + + )} + +
{kind === "cartridge" ? "Set" : "Shape"}TypeLevelMainSubstatsWorn by
{kind === "cartridge" ? item.set : item.shape}{item.cells === 2 ? "II" : item.cells === 3 ? "III" : "IV"}+{item.level} + {item.mainStats.map((stat) => stat.stat).join(", ") || —} + + {item.substats.map((stat) => `${stat.stat} ${stat.value}`).join(" · ")} + {ownerOf(item.instance) ?? —}
+ item.instance === editing)!} + onDone={() => setEditing(null)} + /> +
+
+ ); +} + +/** + * Correcting a decoded item by hand. + * + * Only the values a decode can plausibly get wrong are editable - level and the + * substat numbers. Shape, kind and instance are structural: if those are wrong + * the record was misparsed entirely and editing it would paper over a bug worth + * reporting instead. + */ +function ItemEditor({ + item, + onDone, +}: { + item: ItemRow; + onDone: () => void; +}) { + const store = useStore(); + const [level, setLevel] = useState(item.level); + const [substats, setSubstats] = useState(item.substats); + + return ( +
event.stopPropagation()}> +

+ Corrections are overwritten by the next gear import — the import is the game speaking. +

+ + {substats.map((stat, index) => ( + + ))} +
+ + +
+
+ ); +} diff --git a/src/ui/TeamTab.tsx b/src/ui/TeamTab.tsx new file mode 100644 index 0000000..1dbf8b0 --- /dev/null +++ b/src/ui/TeamTab.tsx @@ -0,0 +1,328 @@ +/** + * The team tab. + * + * Four characters, dragged into a priority order, solved together against the + * shared pool by one button. The drag order is the **tie-break** the solver + * applies once the sorted score vector is already fixed - it is not a sequential + * pass, and the whole point of the team solve is that the first character does + * not simply take everything. + * + * Drag and drop is four native HTML5 events; a drag library would be a fifth + * dependency for that. + */ +import { useRef, useState } from "react"; + +import { isKnownStat, SLOT_COUNT, type StatId } from "../domain/statvec.ts"; +import type { StatTarget } from "../domain/scoring.ts"; +import { consoleTrait } from "../domain/stats.ts"; +import { createSolverHost, CancelledError, type SolveHandle } from "../solver/host.ts"; +import type { JobProgress, JobResult, SolveJob } from "../solver/job.ts"; +import type { TeamAssignment } from "../solver/team.ts"; +import { heldByOthers } from "../db/store.ts"; +import { esperFor, type LoadedData } from "../state/gamedata.ts"; +import { Board } from "./Board.tsx"; +import { Icon } from "./Icon.tsx"; +import { ItemCard } from "./ItemCard.tsx"; +import { useAppState, useStore } from "./useStore.ts"; + +const TEAM_SIZE = 4; + +/** + * Custom targets are stored with a plain string stat, because the store must + * survive a slot being added later. Anything the model has no slot for is + * dropped here rather than being allowed to reach the solver. + */ +function targetsFor( + custom: Array<{ stat: string; target: number; weight: number }> | null | undefined, +): StatTarget[] { + if (custom && custom.length > 0) { + return custom + .filter((entry) => isKnownStat(entry.stat)) + .map((entry) => ({ + stat: entry.stat as StatId, + target: entry.target, + weight: entry.weight, + })); + } + return [ + { stat: "CritBase", target: 0.7, weight: 3 }, + { stat: "CritDamageBase", target: 2.0, weight: 3 }, + ]; +} + +export function TeamTab({ data }: { data: LoadedData }) { + const state = useAppState(); + const store = useStore(); + const db = state.data.db; + + const [team, setTeam] = useState([]); + const [progress, setProgress] = useState(null); + const [result, setResult] = useState(null); + const [problem, setProblem] = useState(null); + const handle = useRef(null); + const [running, setRunning] = useState(false); + const dragged = useRef(null); + // R2, for the team: items worn by anyone outside the team. + const [useEquipped, setUseEquipped] = useState(false); + + const solve = async () => { + setProblem(null); + setResult(null); + setRunning(true); + + const job: SolveJob = { + items: db.items.map((item) => ({ + instance: item.instance, + kind: item.kind, + item_id: item.itemId, + shape: item.shape ?? undefined, + set: item.set ?? undefined, + level: item.level, + rarity: item.rarity, + main_stats: item.mainStats, + substats: item.substats, + owner_group: null, + })), + setBonuses: data.setBonuses, + tilings: data.tilings, + dragOrder: team, + characters: team.flatMap((characterId) => { + const esper = esperFor(data.gamedata, characterId); + if (!esper) return []; + const stored = db.characters.find((row) => row.characterId === characterId); + return [ + { + key: characterId, + slots: esper.slots, + trait: consoleTrait(esper), + base: new Array(SLOT_COUNT).fill(0), + scoring: { targets: targetsFor(stored?.customTargets) }, + excludedInstances: useEquipped ? [] : heldByOthers(db, team), + }, + ]; + }), + }; + + const host = createSolverHost(); + const started = host.solve(job, setProgress); + handle.current = started; + try { + setResult(await started.promise); + } catch (error) { + if (!(error instanceof CancelledError)) { + setProblem(error instanceof Error ? error.message : String(error)); + } + } finally { + setRunning(false); + host.dispose(); + } + }; + + const reorder = (from: number, to: number) => { + setTeam((current) => { + const next = [...current]; + const [moved] = next.splice(from, 1); + if (moved) next.splice(to, 0, moved); + return next; + }); + }; + + return ( +
+

Team

+

+ Drag to set priority. Order breaks ties only — it never decides who gets an item. +

+ +
    + {team.map((characterId, index) => ( +
  1. (dragged.current = index)} + onDragOver={(event) => event.preventDefault()} + onDrop={() => { + if (dragged.current !== null) reorder(dragged.current, index); + dragged.current = null; + }} + > + {esperFor(data.gamedata, characterId)?.name ?? characterId} + +
  2. + ))} +
+ + {team.length < TEAM_SIZE && ( + + )} + + + +
+ + {/* Stop always yields something usable: the solve is anytime. */} + +
+ + {running && progress && } + {problem &&

{problem}

} + {result && } +
+ ); +} + +function Progress({ progress }: { progress: JobProgress }) { + if (progress.phase === "portfolio") { + return ( +

+ {progress.character}: {progress.done} / {progress.total} packings +

+ ); + } + return ( +

+ round {progress.round} / {progress.rounds} — [ + {progress.sorted.map((value) => value.toFixed(3)).join(", ")}] +

+ ); +} + +function Result({ + result, + data, + store, +}: { + result: JobResult; + data: LoadedData; + store: ReturnType; +}) { + if (result.infeasible) { + return

No conflict-free team could be built from this pool.

; + } + return ( +
+

+ Scores, worst first: [{result.sorted.map((value) => value.toFixed(4)).join(", ")}] +

+ {result.unbuildable.length > 0 && ( +

+ No valid full-set build for: {result.unbuildable.join(", ")} +

+ )} +
+ {result.assignment.map((entry) => ( + + ))} +
+

+ Equipping writes an “app” row you still have to apply in game.{" "} + +

+
+ ); +} + +/** + * One character's share of a team solve, drawn. + * + * The board is the deliverable, not the score: the player reads a block, finds + * that module in their inventory by its stats, and puts it in the cell shown. + */ +function AssignedBuild({ + entry, + data, +}: { + entry: TeamAssignment; + data: LoadedData; +}) { + const state = useAppState(); + const db = state.data.db; + const [hovered, setHovered] = useState(null); + const store = useStore(); + const build = entry.build; + + const itemFor = (piece: number) => { + const index = build.modules[piece]; + return index === undefined ? undefined : db.items[index]; + }; + + const equip = () => { + const instances = [build.cartridge, ...build.modules] + .map((index) => db.items[index]?.instance) + .filter((instance) => instance !== undefined); + const cells: Record = {}; + build.modules.forEach((index, piece) => { + const instance = db.items[index]?.instance; + if (!instance) return; + cells[instance] = build.tiling.cells.filter( + (_cell, position) => build.tiling.placement[position] === piece, + ); + }); + void store.equip(entry.key, instances, { cells }); + }; + + return ( +
+
+ + {esperFor(data.gamedata, entry.key)?.name ?? entry.key} + + {build.score.toFixed(4)} · {build.modules.length} modules ·{" "} + {build.proven ? "optimal for this packing and cartridge" : "best found"} + +
+ + {build.unknownTiers.length > 0 && ( +

+ Set bonus tier {build.unknownTiers.join(" and ")} is active but unmeasured, so it + contributes nothing to this score. +

+ )} + + { + const item = itemFor(piece); + return item ? `${item.shape ?? item.set} +${item.level}` : ""; + }} + /> + + {hovered !== null && hovered >= 0 && } + +
+ +
+
+ ); +} diff --git a/src/ui/router.ts b/src/ui/router.ts new file mode 100644 index 0000000..7ba149f --- /dev/null +++ b/src/ui/router.ts @@ -0,0 +1,43 @@ +/** + * Hash routing. + * + * About forty lines instead of a router dependency, and it is what makes the + * single-file `file://` build work without a second code path - a history + * router would need a server rewrite that a local file has no way to provide. + */ +import { useEffect, useState } from "react"; + +export const TABS = ["cartridges", "modules", "characters", "team"] as const; +export type Tab = (typeof TABS)[number]; + +export interface Route { + tab: Tab; + /** The character a detail view is open on, if any. */ + id: string | null; +} + +export function parseHash(hash: string): Route { + const parts = hash.replace(/^#\/?/, "").split("/").filter(Boolean); + const tab = (TABS as readonly string[]).includes(parts[0] ?? "") + ? (parts[0] as Tab) + : "characters"; + return { tab, id: parts[1] ? decodeURIComponent(parts[1]) : null }; +} + +export function hashFor(tab: Tab, id?: string | null): string { + return id ? `#/${tab}/${encodeURIComponent(id)}` : `#/${tab}`; +} + +export function navigate(tab: Tab, id?: string | null): void { + window.location.hash = hashFor(tab, id); +} + +export function useRoute(): Route { + const [route, setRoute] = useState(() => parseHash(window.location.hash)); + useEffect(() => { + const onChange = () => setRoute(parseHash(window.location.hash)); + window.addEventListener("hashchange", onChange); + return () => window.removeEventListener("hashchange", onChange); + }, []); + return route; +} diff --git a/src/ui/styles.css b/src/ui/styles.css new file mode 100644 index 0000000..d208095 --- /dev/null +++ b/src/ui/styles.css @@ -0,0 +1,166 @@ +:root { + color-scheme: dark; + --bg: #14161a; + --panel: #1c1f26; + --line: #2c313b; + --text: #e6e8ec; + --dim: #9aa2b1; + --accent: #7aa2f7; + --warn: #e0af68; + --bad: #f7768e; + font-family: system-ui, -apple-system, "Segoe UI", sans-serif; +} + +* { box-sizing: border-box; } + +body { + margin: 0; + background: var(--bg); + color: var(--text); +} + +.app { max-width: 1100px; margin: 0 auto; padding: 1.5rem 1rem 4rem; } + +header { display: flex; align-items: baseline; gap: 1.5rem; flex-wrap: wrap; } +h1 { font-size: 1.1rem; margin: 0 0 1rem; letter-spacing: 0.02em; } +nav { display: flex; gap: 0.25rem; } +nav a { + color: var(--dim); + text-decoration: none; + padding: 0.35rem 0.7rem; + border-radius: 6px; + text-transform: capitalize; +} +nav a:hover { background: var(--panel); color: var(--text); } +nav a.active { background: var(--panel); color: var(--accent); } + +.dim { color: var(--dim); } +.warning { color: var(--warn); } +.problem { color: var(--bad); } +.empty { color: var(--dim); padding: 2rem 0; } + +.filters { + display: flex; + gap: 1rem; + flex-wrap: wrap; + align-items: flex-end; + padding: 0.75rem 0 1rem; +} +.filters label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.8rem; color: var(--dim); } +.filters .count { margin-left: auto; font-size: 0.8rem; color: var(--dim); } + +select, input, button { + background: var(--panel); + color: var(--text); + border: 1px solid var(--line); + border-radius: 6px; + padding: 0.35rem 0.5rem; + font: inherit; + font-size: 0.85rem; +} +button { cursor: pointer; } +button:disabled { opacity: 0.45; cursor: default; } + +table.items { width: 100%; border-collapse: collapse; font-size: 0.85rem; } +table.items th { + text-align: left; + color: var(--dim); + font-weight: 500; + border-bottom: 1px solid var(--line); + padding: 0.4rem 0.5rem; +} +table.items td { padding: 0.35rem 0.5rem; border-bottom: 1px solid #23262e; } +table.items .subs { color: var(--dim); font-size: 0.78rem; } + +.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 0.6rem; } +.card { + display: flex; + flex-direction: column; + gap: 0.2rem; + padding: 0.7rem 0.8rem; + background: var(--panel); + border: 1px solid var(--line); + border-radius: 8px; + text-decoration: none; + color: inherit; + font-size: 0.85rem; +} +.card:hover { border-color: var(--accent); } + +.board { display: grid; gap: 0; margin: 1rem 0; width: max-content; } +.board-cell { + width: 100%; + aspect-ratio: 1; + border-style: solid; + border-color: #0d0f13; + border-width: 0; +} +.board-cell--blocked { background: #0f1115; border: 1px solid #191c22; } + +.tooltip { + background: var(--panel); + border: 1px solid var(--line); + border-radius: 8px; + padding: 0.6rem 0.8rem; + font-size: 0.82rem; + width: max-content; +} +.tooltip ul { margin: 0.3rem 0 0; padding-left: 1.1rem; color: var(--dim); } + +.team { list-style: decimal; padding-left: 1.4rem; } +.team li { padding: 0.3rem 0; display: flex; gap: 0.6rem; align-items: center; cursor: grab; } +.actions { display: flex; gap: 0.5rem; margin: 1rem 0; } + +.assignment { padding: 0.35rem 0; border-bottom: 1px solid #23262e; font-size: 0.9rem; } +.unidentified { margin-bottom: 1.5rem; } +.group { display: flex; gap: 0.8rem; align-items: center; padding: 0.3rem 0; font-size: 0.85rem; } +.todo { margin: 0.5rem 0 1rem; color: var(--dim); font-size: 0.85rem; } + +.data { margin: 1rem 0 2rem; padding: 0.9rem 1rem; background: var(--panel); border: 1px solid var(--line); border-radius: 8px; } +.data h2 { font-size: 0.9rem; margin: 0 0 0.6rem; color: var(--dim); font-weight: 500; } +.review { margin-top: 0.8rem; padding: 0.8rem; border: 1px solid var(--line); border-radius: 6px; font-size: 0.85rem; } +.review ul { margin: 0.4rem 0; padding-left: 1.1rem; font-size: 0.8rem; } + +.targets { margin: 0.8rem 0; font-size: 0.85rem; } +.targets summary { cursor: pointer; color: var(--dim); } +.target-row { display: flex; gap: 0.4rem; align-items: center; padding: 0.2rem 0; } +.target-row input { width: 6rem; } +.arc { display: inline-flex; flex-direction: column; gap: 0.25rem; font-size: 0.8rem; color: var(--dim); margin-top: 0.6rem; } + +.bar { width: 140px; height: 8px; background: #23262e; border-radius: 4px; overflow: hidden; } +.bar div { height: 100%; background: var(--accent); } +.result { margin-top: 1rem; } + +.icon { border-radius: 6px; object-fit: cover; background: #0f1115; flex: none; } +.icon--fallback { + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 0.8rem; + color: var(--dim); + border: 1px solid var(--line); +} +.card-head { display: flex; align-items: center; gap: 0.6rem; } + +.arc-row { display: flex; gap: 1rem; align-items: flex-end; margin-top: 0.6rem; } +.arc-row input { width: 5rem; } + +.toggle { display: flex; gap: 0.5rem; align-items: center; font-size: 0.85rem; margin: 0.8rem 0 0; } + +.row--clickable { cursor: pointer; } +.row--clickable:hover td { background: #1a1d24; } +.row--editing td { background: #1a1d24; } +.editor { display: flex; flex-wrap: wrap; gap: 0.8rem; align-items: flex-end; padding: 0.6rem 0; } +.editor label { display: flex; flex-direction: column; gap: 0.2rem; font-size: 0.75rem; color: var(--dim); } +.editor input { width: 6rem; } +.editor p { flex-basis: 100%; margin: 0 0 0.2rem; font-size: 0.78rem; } + +.sheet table { max-width: 560px; } +.sheet input { width: 7rem; } +.row--drifted td { background: #2a2318; } + +.source-toggle { display: flex; gap: 0.4rem; align-items: center; margin-top: 0.8rem; } +.source-toggle button.active { border-color: var(--accent); color: var(--accent); } + +.boards { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1rem; margin-top: 1rem; } +.boards .assignment { border: 1px solid var(--line); border-radius: 8px; padding: 0.7rem 0.8rem; background: var(--panel); } diff --git a/src/ui/useStore.ts b/src/ui/useStore.ts new file mode 100644 index 0000000..9b29645 --- /dev/null +++ b/src/ui/useStore.ts @@ -0,0 +1,22 @@ +/** + * React's view of the store. + * + * `useSyncExternalStore` rather than context plus state, so the store stays a + * plain object that Node tests can drive without a renderer. + */ +import { createContext, useContext, useSyncExternalStore } from "react"; + +import type { AppState, Store } from "../state/store.ts"; + +export const StoreContext = createContext(null); + +export function useStore(): Store { + const store = useContext(StoreContext); + if (!store) throw new Error("no store in context"); + return store; +} + +export function useAppState(): AppState { + const store = useStore(); + return useSyncExternalStore(store.subscribe, store.getState, store.getState); +} diff --git a/tests/arcs.test.ts b/tests/arcs.test.ts new file mode 100644 index 0000000..4f507c1 --- /dev/null +++ b/tests/arcs.test.ts @@ -0,0 +1,128 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { arcContribution, arcControls, parseArcValue } from "../src/domain/arcs.ts"; +import { describe as describeVector, slotOf } from "../src/domain/statvec.ts"; +import type { GameData } from "../src/state/gamedata.ts"; + +const gamedata = JSON.parse(readFileSync("src/generated/gamedata.json", "utf8")) as GameData; +const arcById = (id: string) => gamedata.arcs.find((arc) => arc.id === id)!; +const effectsFor = (id: string) => gamedata.arcEffects[id]; + +describe("arc values", () => { + it("reads a percent string as a fraction", () => { + expect(parseArcValue("12%", true)).toBeCloseTo(0.12, 10); + expect(parseArcValue("12%", false)).toBeCloseTo(0.12, 10); + expect(parseArcValue(20, false)).toBe(20); + expect(parseArcValue(20, true)).toBeCloseTo(0.2, 10); + expect(parseArcValue(" ", false)).toBe(0); + }); +}); + +describe("arc contribution", () => { + it("carries the arc's own stat line at the given level", () => { + const arc = arcById("fork_vine"); + const low = arcContribution(arc, effectsFor("fork_vine"), { + arcId: arc.id, + level: 1, + refinement: 1, + }); + const high = arcContribution(arc, effectsFor("fork_vine"), { + arcId: arc.id, + level: 80, + refinement: 1, + }); + const atk = slotOf("AtkBase"); + expect(low.vector[atk]).toBe(21); + expect(high.vector[atk]!).toBeGreaterThan(low.vector[atk]!); + }); + + it("keeps the arc's flat ATK out of gear's flat ATK slot", () => { + // They share a unit but not a formula: the Arc's ATK scales with ATK%. + const arc = arcById("fork_vine"); + const result = arcContribution(arc, effectsFor("fork_vine"), { + arcId: arc.id, + level: 80, + refinement: 1, + }); + expect(result.vector[slotOf("AtkAdd")]).toBe(0); + expect(result.vector[slotOf("AtkBase")]).toBeGreaterThan(0); + }); + + it("leaves a toggle off by default and reports it as omitted", () => { + // fork_vine's own stat line is already HPMaxUp, so the toggle stacks onto + // the same slot: the assertion has to be on the delta, not the total. + const arc = arcById("fork_vine"); + const slot = slotOf("HPMaxUp"); + const off = arcContribution(arc, effectsFor("fork_vine"), { + arcId: arc.id, + level: 80, + refinement: 5, + }); + expect(off.omitted.some((entry) => entry.why === "toggled off")).toBe(true); + + const on = arcContribution(arc, effectsFor("fork_vine"), { + arcId: arc.id, + level: 80, + refinement: 5, + toggles: { 0: true }, + }); + // Refinement 5 of "12%..20%" is 20%. + expect(on.vector[slot]! - off.vector[slot]!).toBeCloseTo(0.2, 6); + }); + + it("scales a refinement with the chosen level of it", () => { + const arc = arcById("fork_vine"); + const slot = slotOf("HPMaxUp"); + const base = arcContribution(arc, effectsFor("fork_vine"), { + arcId: arc.id, + level: 80, + refinement: 1, + }); + const first = arcContribution(arc, effectsFor("fork_vine"), { + arcId: arc.id, + level: 80, + refinement: 1, + toggles: { 0: true }, + }); + expect(first.vector[slot]! - base.vector[slot]!).toBeCloseTo(0.12, 6); + }); + + it("never scores a duration or an unmodellable effect", () => { + // fork_appliance's only effect is named ability damage, not a sheet stat. + const arc = arcById("fork_appliance"); + const result = arcContribution(arc, effectsFor("fork_appliance"), { + arcId: arc.id, + level: 80, + refinement: 5, + toggles: { 0: true }, + }); + expect(result.omitted.length).toBeGreaterThan(0); + // Only the arc's own stat line contributed. + const nonZero = Object.keys(describeVector(result.vector)); + expect(nonZero.every((stat) => stat === "AtkBase" || stat === "AtkUp")).toBe(true); + }); + + it("has a slot for every stat any arc can contribute", () => { + const unknown = new Set(); + for (const arc of gamedata.arcs) { + const result = arcContribution(arc, effectsFor(arc.id), { + arcId: arc.id, + level: 80, + refinement: 5, + toggles: Object.fromEntries( + Array.from({ length: 8 }, (_, index) => [index, true] as const), + ), + }); + for (const stat of result.unknownStats) unknown.add(stat); + } + expect([...unknown]).toEqual([]); + }); + + it("offers a control only for effects that need one", () => { + const controls = arcControls(arcById("fork_vine"), effectsFor("fork_vine")); + expect(controls.map((control) => control.mode)).toEqual(["toggle"]); + // The cooldown placeholder is not a control. + expect(controls).toHaveLength(1); + }); +}); diff --git a/tests/db.test.ts b/tests/db.test.ts new file mode 100644 index 0000000..2f2fb49 --- /dev/null +++ b/tests/db.test.ts @@ -0,0 +1,298 @@ +import { describe, expect, it } from "vitest"; + +import { createLocalStorageAdapter, STATE_KEY, type StorageLike } from "../src/db/adapters/local-storage.ts"; +import { createMemoryAdapter } from "../src/db/adapters/memory.ts"; +import { emptyState, type StoredState } from "../src/db/adapters/types.ts"; +import { exportDatabase, importDatabase } from "../src/db/dbfile.ts"; +import { parseGearExport } from "../src/db/import.ts"; +import { emptyCharacter, type EquipmentRow } from "../src/db/schema.ts"; +import { + applyImport, + coveredCells, + editItem, + equip, + equipmentOf, + heldByOthers, + isComplete, + nameOwnerGroup, + resolveCharacter, + todoInGame, + undoLast, + unnamedGroups, +} from "../src/db/store.ts"; + +const row = (over: Partial = {}): EquipmentRow => ({ + instance: "a1", + ownerGroup: null, + characterId: "Zankou", + cells: [1, 2, 3], + origin: "imported", + batchId: "b1", + at: 0, + ...over, +}); + +function stateWith(equipment: EquipmentRow[], over: Partial = {}): StoredState { + const state = emptyState(); + state.db.equipment = equipment; + return { ...state, ...over }; +} + +class FakeStorage implements StorageLike { + data = new Map(); + quota = Infinity; + getItem(key: string) { + return this.data.get(key) ?? null; + } + setItem(key: string, value: string) { + if (value.length > this.quota) throw new Error("QuotaExceededError"); + this.data.set(key, value); + } + removeItem(key: string) { + this.data.delete(key); + } +} + +describe("adapters", () => { + it("memory round-trips and does not alias the caller's state", async () => { + const adapter = createMemoryAdapter(); + const state = stateWith([row()]); + await adapter.replaceAll(state); + state.db.equipment[0]!.instance = "mutated"; + const read = await adapter.read(); + expect(read.db.equipment[0]!.instance).toBe("a1"); + expect(adapter.durable).toBe(false); + }); + + it("localStorage round-trips and survives a corrupt value", async () => { + const storage = new FakeStorage(); + const adapter = createLocalStorageAdapter(storage); + await adapter.replaceAll(stateWith([row()])); + expect((await adapter.read()).db.equipment).toHaveLength(1); + + storage.data.set(STATE_KEY, "{ not json"); + expect((await adapter.read()).db.equipment).toEqual([]); + }); + + it("drops the snapshot before the database when the quota is hit", async () => { + const storage = new FakeStorage(); + const adapter = createLocalStorageAdapter(storage); + const state = stateWith([row()]); + state.snapshot = { items: [], equipment: [], characters: [], ownerNames: [], meta: [] }; + await adapter.replaceAll(state); + expect(storage.data.size).toBe(2); + + storage.quota = 200; + await expect(adapter.replaceAll(state)).rejects.toThrow(); + // The database write is what matters; the snapshot is the first thing cut. + expect(storage.getItem("nte-optimizer:snapshot")).toBeNull(); + }); + + it("writes only equipment on the frequent path", async () => { + const adapter = createMemoryAdapter(); + const state = stateWith([row()]); + state.db.items = [ + { instance: "a1", kind: "module", itemId: "x", shape: null, cells: null, set: null, level: 0, rarity: "orange", mainStats: [], substats: [] }, + ]; + await adapter.replaceAll(state); + await adapter.writeEquipment([row({ instance: "a2" })], []); + const read = await adapter.read(); + expect(read.db.equipment.map((r) => r.instance)).toEqual(["a2"]); + expect(read.db.items).toHaveLength(1); + }); +}); + +describe("store", () => { + it("resolves a character through the owner group, never off the row", () => { + const state = nameOwnerGroup(stateWith([row({ characterId: null, ownerGroup: "g1" })]), "g1", "Sagiri"); + const [equipped] = state.db.equipment; + expect(equipped!.characterId).toBeNull(); + expect(resolveCharacter(equipped!, state.db.ownerNames)).toBe("Sagiri"); + expect(equipmentOf(state.db, "Sagiri")).toHaveLength(1); + }); + + it("lists groups nobody has named", () => { + const state = stateWith([ + row({ characterId: null, ownerGroup: "g1" }), + row({ instance: "a2", characterId: null, ownerGroup: "g2" }), + ]); + expect(unnamedGroups(state.db)).toEqual(["g1", "g2"]); + expect(unnamedGroups(nameOwnerGroup(state, "g1", "Zankou").db)).toEqual(["g2"]); + }); + + it("calls a build incomplete when it no longer covers twenty cells", () => { + const full = [row({ cells: new Array(20).fill(0) })]; + expect(coveredCells(full)).toBe(20); + expect(isComplete(full)).toBe(true); + expect(isComplete([row({ cells: [1, 2] })])).toBe(false); + }); + + it("replaces a character's whole loadout in one action", () => { + const state = stateWith([row({ instance: "old1" }), row({ instance: "old2" })]); + const { state: next } = equip(state, "Zankou", ["new1", "new2"]); + expect(equipmentOf(next.db, "Zankou").map((r) => r.instance).sort()).toEqual(["new1", "new2"]); + expect(next.undo).toHaveLength(1); + expect(next.undo[0]!.before.map((r) => r.instance).sort()).toEqual(["old1", "old2"]); + }); + + it("names who was left with a hole when it takes their item", () => { + const state = stateWith([ + row({ instance: "shared", characterId: "Haniel" }), + row({ instance: "other", characterId: "Haniel" }), + ]); + const { state: next, displaced } = equip(state, "Zankou", ["shared"]); + expect(displaced).toEqual([{ characterId: "Haniel", instances: ["shared"] }]); + // Haniel keeps everything else, and is now incomplete rather than wiped. + expect(equipmentOf(next.db, "Haniel").map((r) => r.instance)).toEqual(["other"]); + }); + + it("restores both sides of a steal with one undo", () => { + const state = stateWith([ + row({ instance: "shared", characterId: "Haniel" }), + row({ instance: "mine", characterId: "Zankou" }), + ]); + const { state: next } = equip(state, "Zankou", ["shared"]); + const back = undoLast(next); + expect(equipmentOf(back.db, "Haniel").map((r) => r.instance)).toEqual(["shared"]); + expect(equipmentOf(back.db, "Zankou").map((r) => r.instance)).toEqual(["mine"]); + expect(back.undo).toHaveLength(0); + }); + + it("marks app-assigned rows as things still to do in game", () => { + const state = stateWith([row({ instance: "worn" })]); + const { state: next } = equip(state, "Zankou", ["planned"]); + const todo = todoInGame(next.db); + expect(todo.get("Zankou")!.map((r) => r.instance)).toEqual(["planned"]); + expect(todoInGame(state.db).size).toBe(0); + }); +}); + +describe("import application", () => { + const gearExport = { + format: "nte-gear-export", + format_version: 1, + scan: { cartridges: 0, modules: 1 }, + exporter: { version: "0.4.0" }, + characters: [{ key: "Zankou", level: 70, breakthroughs: 5 }], + items: [ + { + instance: "a1", + kind: "module", + item_id: "cell3_style6_1_Orange", + shape: "cell3_style6", + level: 20, + rarity: "orange", + main_stats: [], + substats: [{ stat: "CritBase", value: 0.06 }], + owner_group: "g1", + }, + ], + }; + + it("snapshots, replaces gear, and leaves owner names alone", () => { + let state = stateWith([row({ instance: "stale" })]); + state = nameOwnerGroup(state, "g1", "Zankou"); + state.db.characters = [{ ...emptyCharacter("Zankou"), arcId: "fork_vine", level: 60 }]; + state.undo = [{ batchId: "b", before: [], after: [], at: 0 }]; + + const next = applyImport(state, parseGearExport(gearExport)); + expect(next.db.items).toHaveLength(1); + expect(next.db.equipment.map((r) => r.instance)).toEqual(["a1"]); + expect(next.db.ownerNames).toHaveLength(1); + expect(next.db.characters[0]!.arcId).toBe("fork_vine"); + expect(next.db.characters[0]!.level).toBe(70); + // Undo refers to items that may no longer exist. + expect(next.undo).toEqual([]); + expect(next.snapshot!.equipment.map((r) => r.instance)).toEqual(["stale"]); + }); + + it("refuses to apply a failed import", () => { + const bad = parseGearExport({ format: "nope" }); + expect(() => applyImport(emptyState(), bad)).toThrow(); + }); +}); + +describe("database file", () => { + it("round-trips the whole workspace", () => { + const state = nameOwnerGroup(stateWith([row()]), "g1", "Zankou"); + const file = exportDatabase(state, "2026-08-21"); + const back = importDatabase(JSON.parse(JSON.stringify(file))); + expect(back.ok).toBe(true); + expect(back.migrated).toBe(false); + expect(back.state!.db.ownerNames).toHaveLength(1); + expect(back.state!.db.equipment).toHaveLength(1); + }); + + it("refuses a file from a newer build rather than dropping fields", () => { + const file = exportDatabase(emptyState(), null); + const newer = { ...file, schema_version: 99 }; + const result = importDatabase(newer); + expect(result.ok).toBe(false); + expect(result.problems[0]).toContain("newer build"); + }); + + it("refuses anything that is not a database file", () => { + expect(importDatabase({ format: "nte-gear-export" }).ok).toBe(false); + expect(importDatabase(null).ok).toBe(false); + }); +}); + +describe("use equipped items", () => { + it("locks away only what a resolvable other character is wearing", () => { + let state = stateWith([ + row({ instance: "mine", characterId: "Zankou" }), + row({ instance: "theirs", characterId: "Haniel" }), + row({ instance: "unnamed", characterId: null, ownerGroup: "g9" }), + ]); + // Zankou keeps their own; Haniel's is off limits. + expect(heldByOthers(state.db, ["Zankou"])).toEqual(["theirs"]); + // Both team members' items are available to the team. + expect(heldByOthers(state.db, ["Zankou", "Haniel"])).toEqual([]); + + // An unresolved group belongs to nobody the app can reason about, so it + // stays available rather than hiding most of the pool. + state = nameOwnerGroup(state, "g9", "Adler"); + expect(heldByOthers(state.db, ["Zankou"]).sort()).toEqual(["theirs", "unnamed"]); + }); +}); + +describe("editing an item by hand", () => { + it("corrects a value and leaves the rest alone", () => { + const state = emptyState(); + state.db.items = [ + { + instance: "a1", + kind: "module", + itemId: "cell3_style6_1_Orange", + shape: "cell3_style6", + cells: 3, + set: null, + level: 0, + rarity: "orange", + mainStats: [], + substats: [{ stat: "CritBase", value: 0.03 }], + }, + ]; + const next = editItem(state, "a1", { + level: 20, + substats: [{ stat: "CritBase", value: 0.06 }], + }); + expect(next.db.items[0]!.level).toBe(20); + expect(next.db.items[0]!.substats[0]!.value).toBe(0.06); + expect(next.db.items[0]!.shape).toBe("cell3_style6"); + // The original is untouched: state is replaced, never mutated. + expect(state.db.items[0]!.level).toBe(0); + }); + + it("cannot be used to change an item's identity", () => { + const state = emptyState(); + state.db.items = [ + { + instance: "a1", kind: "module", itemId: "x", shape: null, cells: null, + set: null, level: 0, rarity: "orange", mainStats: [], substats: [], + }, + ]; + const next = editItem(state, "a1", { level: 5 } as never); + expect(next.db.items[0]!.instance).toBe("a1"); + }); +}); diff --git a/tests/domain.test.ts b/tests/domain.test.ts new file mode 100644 index 0000000..6aad9f6 --- /dev/null +++ b/tests/domain.test.ts @@ -0,0 +1,252 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { boardFromSlots, fillers, placements, tile } from "../src/domain/board.ts"; +import { REQUIRED_PIECES, SET_IDS, SET_NAMES, activeTiers } from "../src/domain/cartridges.ts"; +import { incompleteSets, setBonus, type SetBonusTable } from "../src/domain/setbonus.ts"; +import { ICON_ORDER, SHAPES, renderShape, sizeOf } from "../src/domain/shapes.ts"; +import { pieceColour, renderBoard } from "../src/domain/render.ts"; +import { cellsOfPiece, loadTilings, multisetOf, type RawTilings } from "../src/domain/tilings.ts"; + +const gamedata = JSON.parse(readFileSync("src/generated/gamedata.json", "utf8")); +const tilings = loadTilings( + JSON.parse(readFileSync("src/generated/tilings.json", "utf8")) as RawTilings, +); + +describe("shapes", () => { + it("has exactly the twelve obtainable shapes", () => { + expect(Object.keys(SHAPES).sort()).toEqual([...ICON_ORDER].sort()); + expect(ICON_ORDER).toHaveLength(12); + }); + + it("names each shape after its own cell count", () => { + for (const shape of ICON_ORDER) { + expect(sizeOf(shape)).toBe(Number(shape.slice(4, 5))); + } + }); + + it("keeps the S and Z tetrominoes distinct", () => { + // Rotating style5 gives 10/11/01, which is not style6: these are mirror + // images, not one piece in two orientations. + expect(renderShape("cell4_style5")).toEqual(["011", "110"]); + expect(renderShape("cell4_style6")).toEqual(["01", "11", "10"]); + }); + + it("anchors every shape at the top-left corner", () => { + for (const shape of ICON_ORDER) { + const cells = SHAPES[shape]; + expect(Math.min(...cells.map(([r]) => r))).toBe(0); + expect(Math.min(...cells.map(([, c]) => c))).toBe(0); + } + }); +}); + +describe("cartridge sets", () => { + it("requires four distinct shapes totalling twelve cells", () => { + for (const set of SET_NAMES) { + const required = REQUIRED_PIECES[set]; + expect(new Set(required).size).toBe(4); + expect(required.reduce((sum, shape) => sum + sizeOf(shape), 0)).toBe(12); + } + }); + + it("counts distinct shapes, not copies, toward a tier", () => { + const [first, second] = REQUIRED_PIECES["Shadow Creed"]; + expect(activeTiers("Shadow Creed", [first!, first!, first!])).toEqual([]); + expect(activeTiers("Shadow Creed", [first!, second!])).toEqual([2]); + expect(activeTiers("Shadow Creed", REQUIRED_PIECES["Shadow Creed"])).toEqual([2, 4]); + }); +}); + +describe("boards", () => { + const boards = gamedata.espers.map((esper: { slots: number[][] }) => + boardFromSlots(esper.slots), + ); + + it("gives every character twenty free cells", () => { + for (const board of boards) expect(board.cells).toHaveLength(20); + }); + + it("collapses the roster onto four distinct grids", () => { + expect(new Set(boards.map((b: { cells: number[] }) => b.cells.join(","))).size).toBe(4); + }); + + it("never places a shape off the right-hand edge", () => { + // A naive translation wraps a wide piece onto the next row; every cell of + // every placement must stay in its own row. + for (const shape of ICON_ORDER) { + for (const spot of placements(shape, boards[0]!)) { + const cols = spot.map((cell) => cell % 7); + expect(Math.max(...cols) - Math.min(...cols)).toBeLessThan(4); + } + } + }); + + it("finds sixty-nine filler multisets for the eight spare cells", () => { + const found = fillers(8); + expect(found).toHaveLength(69); + for (const combo of found) { + expect(combo.reduce((sum, shape) => sum + sizeOf(shape), 0)).toBe(8); + } + }); + + it("refuses a multiset that cannot cover the board", () => { + expect(tile(boards[0]!, ["cell2_style1", "cell2_style1"])).toBeNull(); + }); +}); + +describe("precomputed tilings", () => { + it("reproduces the Python search exactly", () => { + const total = tilings.reduce( + (sum, board) => sum + [...board.bySet.values()].reduce((n, list) => n + list.length, 0), + 0, + ); + expect(tilings).toHaveLength(4); + expect(total).toBe(1297); + }); + + it("builds are six, seven or eight pieces - never always seven", () => { + const counts = new Map(); + for (const board of tilings) { + for (const list of board.bySet.values()) { + for (const tiling of list) { + counts.set(tiling.pieces.length, (counts.get(tiling.pieces.length) ?? 0) + 1); + } + } + } + expect([...counts.entries()].sort((a, b) => a[0] - b[0])).toEqual([ + [6, 30], + [7, 1102], + [8, 165], + ]); + }); + + it("decodes back into a genuine exact cover", () => { + for (const board of tilings) { + for (const list of board.bySet.values()) { + for (const tiling of list) { + const covered = new Set(); + tiling.pieces.forEach((shape, index) => { + const cells = cellsOfPiece(tiling, index); + expect(cells).toHaveLength(sizeOf(shape)); + for (const cell of cells) { + expect(covered.has(cell)).toBe(false); + covered.add(cell); + } + }); + expect([...covered].sort((a, b) => a - b)).toEqual(board.cells); + } + } + } + }); + + it("every packing carries all four of its set's required shapes", () => { + for (const board of tilings) { + for (const [set, list] of board.bySet) { + for (const tiling of list) { + const present = multisetOf(tiling); + for (const shape of REQUIRED_PIECES[set]) { + expect(present.get(shape) ?? 0).toBeGreaterThan(0); + } + expect(activeTiers(set, tiling.pieces)).toEqual([2, 4]); + } + } + } + }); + + it("leaves some (board, set) pairs unbuildable", () => { + // Shadow Creed on one board admits only three fillers; the UI needs a + // defined "no valid full-set build" state because of exactly this. + const smallest = Math.min( + ...tilings.flatMap((board) => [...board.bySet.values()].map((list) => list.length)), + ); + expect(smallest).toBeLessThan(10); + }); +}); + +describe("set bonuses", () => { + const table = JSON.parse( + readFileSync("data-src/set-bonuses.json", "utf8"), + ) as SetBonusTable; + + it("covers all twelve sets", () => { + expect(Object.keys(table.sets).sort()).toEqual([...SET_NAMES].sort()); + }); + + it("names the three unowned sets by their real ids", () => { + // Confirmed from everness's cartridge boxes. Blood/Night/Kingdom was a + // guess and was wrong on all three. + expect(SET_IDS["Psyche_orange"]).toBe("Devil's Blood: Curse"); + expect(SET_IDS["Shield_orange"]).toBe("Kingdom's Guard"); + expect(SET_IDS["Heal_orange"]).toBe("Thea's Night Tavern"); + expect(Object.keys(SET_IDS)).toHaveLength(12); + }); + + it("contributes nothing rather than a guess while values are unmeasured", () => { + const required = REQUIRED_PIECES["Shadow Creed"]; + const result = setBonus(table, "Shadow Creed", required); + expect(result.tiers).toEqual([2, 4]); + expect(result.unknownTiers).toEqual([2, 4]); + expect([...result.vector].every((value) => value === 0)).toBe(true); + }); + + it("reports no active tier when the board misses the shapes", () => { + const result = setBonus(table, "Shadow Creed", ["cell3_style1"]); + expect(result.tiers).toEqual([]); + expect(result.unknownTiers).toEqual([]); + }); + + it("flags every set as incomplete until the values are filled in", () => { + expect(incompleteSets(table)).toHaveLength(12); + }); +}); + +describe("board rendering", () => { + it("borders only the sides facing a different piece", () => { + // A horizontal domino: the join between the two cells carries no border. + const render = renderBoard([0, 1], [0, 0]); + const [left, right] = render.cells; + expect(left!.right).toBe(false); + expect(right!.left).toBe(false); + expect(left!.left).toBe(true); + expect(left!.top).toBe(true); + expect(right!.right).toBe(true); + }); + + it("borders the join between two different pieces", () => { + const render = renderBoard([0, 1], [0, 1]); + expect(render.cells[0]!.right).toBe(true); + expect(render.cells[1]!.left).toBe(true); + }); + + it("treats a blocked neighbour as an edge", () => { + // Cell 2 is not on the board, so cell 1's right side is an outer edge. + const render = renderBoard([0, 1], [0, 0]); + expect(render.cells[1]!.right).toBe(true); + }); + + it("does not wrap a border round the end of a row", () => { + // Cells 6 and 7 are adjacent in index but sit in different rows. + const render = renderBoard([6, 7], [0, 0]); + expect(render.cells[0]!.right).toBe(true); + expect(render.cells[1]!.left).toBe(true); + }); + + it("renders a real packing as one block per piece", () => { + const board = tilings[0]!; + const [tiling] = [...board.bySet.values()][0]!; + const render = renderBoard(tiling!.cells, tiling!.placement); + expect(render.cells).toHaveLength(20); + // Every cell belongs to a piece, and every piece is contiguous enough that + // its internal joins are unbordered. + const internal = render.cells.filter((c) => !c.top || !c.right || !c.bottom || !c.left); + expect(internal.length).toBe(20); + expect(new Set(render.cells.map((c) => c.piece)).size).toBe(tiling!.pieces.length); + }); + + it("gives every piece of a build a distinct colour", () => { + const colours = new Set([0, 1, 2, 3, 4, 5, 6, 7].map((i) => pieceColour(i, 8))); + expect(colours.size).toBe(8); + expect(pieceColour(-1, 8)).toBe("transparent"); + }); +}); diff --git a/tests/guides.test.ts b/tests/guides.test.ts new file mode 100644 index 0000000..d5e6511 --- /dev/null +++ b/tests/guides.test.ts @@ -0,0 +1,100 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { + TOP_WEIGHT, + guideFor, + targetsFromGuide, + variantFor, + weightForRank, + type GuideTable, +} from "../src/domain/guides.ts"; + +const table = JSON.parse(readFileSync("data-src/guides.json", "utf8")) as GuideTable; + +const variant = { + name: "Main DPS", + targets: [ + { stat: "CritBase", target: 0.7 }, + { stat: "CritDamageBase", target: 2.0 }, + { stat: "AtkUp", target: 0.5 }, + { stat: "HPMaxUp", target: 0.3 }, + ], + priority: ["CritDamageBase", "CritBase", "AtkUp"], +}; + +describe("rank to weight", () => { + it("puts the top rank highest and keeps the last one meaningful", () => { + expect(weightForRank(0, 3)).toBe(TOP_WEIGHT); + expect(weightForRank(2, 3)).toBe(1); + // The bottom of the ranking is where a shortfall should land, not a stat to + // ignore entirely. + expect(weightForRank(2, 3)).toBeGreaterThan(0); + }); + + it("descends monotonically", () => { + const weights = [0, 1, 2, 3, 4].map((rank) => weightForRank(rank, 5)); + for (let i = 1; i < weights.length; i += 1) { + expect(weights[i]!).toBeLessThan(weights[i - 1]!); + } + }); + + it("handles a single ranked stat", () => { + expect(weightForRank(0, 1)).toBe(TOP_WEIGHT); + }); +}); + +describe("guide to targets", () => { + it("weights targets by their place in the ranking", () => { + const targets = targetsFromGuide(variant); + const byStat = new Map(targets.map((entry) => [entry.stat, entry])); + expect(byStat.get("CritDamageBase")!.weight).toBe(TOP_WEIGHT); + expect(byStat.get("CritDamageBase")!.weight).toBeGreaterThan( + byStat.get("CritBase")!.weight, + ); + expect(byStat.get("CritBase")!.weight).toBeGreaterThan(byStat.get("AtkUp")!.weight); + }); + + it("keeps a target that the ranking does not mention", () => { + const targets = targetsFromGuide(variant); + const hp = targets.find((entry) => entry.stat === "HPMaxUp")!; + expect(hp.weight).toBe(1); + expect(hp.target).toBe(0.3); + }); + + it("drops a stat the model has no slot for", () => { + const targets = targetsFromGuide({ + name: "x", + targets: [{ stat: "NotAStat", target: 1 }], + priority: ["NotAStat"], + }); + expect(targets).toEqual([]); + }); +}); + +describe("guide lookup", () => { + it("returns null for a character with no published guide", () => { + expect(guideFor(table, "Zankou")).toBeNull(); + expect(variantFor(null, null)).toBeNull(); + }); + + it("falls back to the first variant when the named one is gone", () => { + const guide = { + key: "Zankou", + source: "x", + updated: "2026-08-21", + variants: [variant, { ...variant, name: "SubDPS" }], + }; + expect(variantFor(guide, "SubDPS")!.name).toBe("SubDPS"); + // A variant that was renamed upstream must not blank the character out. + expect(variantFor(guide, "Removed")!.name).toBe("Main DPS"); + expect(variantFor(guide, null)!.name).toBe("Main DPS"); + }); + + it("ships an empty table rather than invented guidance", () => { + // Prydwen's data could not be obtained; a plausible-looking guess would be + // worse than none, because the player could not tell it apart from real. + expect(table.characters).toEqual([]); + expect(table.format).toBe("nte-guides"); + }); +}); diff --git a/tests/host.test.ts b/tests/host.test.ts new file mode 100644 index 0000000..b79ae74 --- /dev/null +++ b/tests/host.test.ts @@ -0,0 +1,197 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { ICON_ORDER } from "../src/domain/shapes.ts"; +import type { SetBonusTable } from "../src/domain/setbonus.ts"; +import { consoleTrait } from "../src/domain/stats.ts"; +import { SLOT_COUNT } from "../src/domain/statvec.ts"; +import type { RawTilings } from "../src/domain/tilings.ts"; +import type { ExportedItem } from "../src/domain/items.ts"; +import { runJob, type JobProgress, type SolveJob } from "../src/solver/job.ts"; +import { CancelledError, createInlineHost, createSolverHost } from "../src/solver/host.ts"; + +const gamedata = JSON.parse(readFileSync("src/generated/gamedata.json", "utf8")); +const tilings = JSON.parse(readFileSync("src/generated/tilings.json", "utf8")) as RawTilings; +const setBonuses = JSON.parse(readFileSync("data-src/set-bonuses.json", "utf8")) as SetBonusTable; + +/** + * A synthetic account: plenty of every shape, and cartridges of one set. Real + * game data for the boards and packings, invented inventory - the fixture policy + * keeps real captures out of the repo. + */ +function account(): ExportedItem[] { + const items: ExportedItem[] = []; + let n = 0; + for (const shape of ICON_ORDER) { + for (let i = 0; i < 8; i += 1) { + n += 1; + items.push({ + instance: `m${n}`, + kind: "module", + item_id: `${shape}_1_Orange`, + shape, + level: 20, + rarity: "orange", + main_stats: [], + substats: [ + { stat: "CritBase", value: 0.01 * (i + 1) }, + { stat: "CritDamageBase", value: 0.02 * (i + 1) }, + ], + owner_group: null, + }); + } + } + for (let i = 0; i < 6; i += 1) { + n += 1; + items.push({ + instance: `c${n}`, + kind: "cartridge", + item_id: "Attack_orange", + set: "Shadow Creed", + level: 20, + rarity: "orange", + main_stats: [{ stat: "CritDamageBase", value: 0.6 }], + substats: [{ stat: "CritBase", value: 0.01 * (i + 1) }], + owner_group: null, + }); + } + return items; +} + +function job(keys: string[]): SolveJob { + return { + items: account(), + setBonuses, + tilings, + characters: keys.map((name) => { + const esper = gamedata.espers.find((e: { name: string }) => e.name === name); + return { + key: name, + slots: esper.slots, + trait: consoleTrait(esper), + base: new Array(SLOT_COUNT).fill(0), + scoring: { + targets: [ + { stat: "CritBase" as const, target: 0.7, weight: 3 }, + { stat: "CritDamageBase" as const, target: 2.0, weight: 3 }, + ], + }, + sets: ["Shadow Creed" as const], + }; + }), + options: { rounds: 1 }, + }; +} + +describe("runJob", () => { + it("solves one character end to end from a serialisable job", () => { + const run = runJob(job(["Zankou"])); + const progress: JobProgress[] = []; + let step = run.next(); + while (!step.done) { + progress.push(step.value); + step = run.next(); + } + const result = step.value; + expect(result.infeasible).toBe(false); + expect(result.assignment).toHaveLength(1); + expect(result.unbuildable).toEqual([]); + expect(result.unknownShapes).toEqual([]); + expect(progress.some((p) => p.phase === "portfolio")).toBe(true); + expect(progress.some((p) => p.phase === "team")).toBe(true); + }); + + it("gives two characters disjoint items", () => { + const run = runJob(job(["Zankou", "Haniel"])); + let step = run.next(); + while (!step.done) step = run.next(); + const used = step.value.assignment.flatMap((entry) => [ + entry.build.cartridge, + ...entry.build.modules, + ]); + expect(step.value.assignment).toHaveLength(2); + expect(new Set(used).size).toBe(used.length); + }); + + + it("honours a character's excluded instances", () => { + // R2 turned off: whatever another character wears is off limits, and the + // solve must actually avoid it rather than merely be told about it. + const plain = runJob(job(["Zankou"])); + let step = plain.next(); + while (!step.done) step = plain.next(); + const chosen = step.value.assignment[0]!.build; + const pool = job(["Zankou"]).items; + const used = [chosen.cartridge, ...chosen.modules].map((index) => pool[index]!.instance); + expect(used.length).toBeGreaterThan(0); + + const restricted = job(["Zankou"]); + restricted.characters[0]!.excludedInstances = used; + const run = runJob(restricted); + let next = run.next(); + while (!next.done) next = run.next(); + const after = next.value.assignment[0]!.build; + const afterInstances = [after.cartridge, ...after.modules].map( + (index) => restricted.items[index]!.instance, + ); + for (const instance of used) expect(afterInstances).not.toContain(instance); + }); + + it("carries a job with no packings through as unbuildable", () => { + const empty = job(["Zankou"]); + empty.characters[0]!.sets = ["Kingdom's Guard"]; // owned by nobody here + const run = runJob(empty); + let step = run.next(); + while (!step.done) step = run.next(); + expect(step.value.unbuildable).toEqual(["Zankou"]); + expect(step.value.assignment).toEqual([]); + }); + + it("reports item ids it has no shape for instead of dropping them", () => { + const odd = job(["Zankou"]); + odd.items.push({ + instance: "x1", + kind: "module", + item_id: "cell9_style9_1_Orange", + shape: "cell9_style9", + level: 0, + rarity: "orange", + main_stats: [], + substats: [], + owner_group: null, + }); + const run = runJob(odd); + let step = run.next(); + while (!step.done) step = run.next(); + expect(step.value.unknownShapes).toEqual(["cell9_style9_1_Orange"]); + }); +}); + +describe("solver host", () => { + it("falls back to inline where there is no Worker", () => { + // Node has none, which is also the file:// build's situation. + expect(createSolverHost().kind).toBe("inline"); + }); + + it("resolves with the same answer the generator gives", async () => { + const host = createInlineHost(); + const direct = runJob(job(["Zankou"])); + let step = direct.next(); + while (!step.done) step = direct.next(); + + const seen: JobProgress[] = []; + const handle = host.solve(job(["Zankou"]), (progress) => seen.push(progress)); + const result = await handle.promise; + expect(result.sorted).toEqual(step.value.sorted); + expect(seen.length).toBeGreaterThan(0); + host.dispose(); + }); + + it("cancels cooperatively", async () => { + const host = createInlineHost(); + const handle = host.solve(job(["Zankou", "Haniel"])); + handle.cancel(); + await expect(handle.promise).rejects.toBeInstanceOf(CancelledError); + host.dispose(); + }); +}); diff --git a/tests/import.test.ts b/tests/import.test.ts new file mode 100644 index 0000000..b9695f8 --- /dev/null +++ b/tests/import.test.ts @@ -0,0 +1,171 @@ +import { describe, expect, it } from "vitest"; + +import { emptyCharacter } from "../src/db/schema.ts"; +import { mergeCharacters, parseGearExport } from "../src/db/import.ts"; + +const item = (over: Record = {}) => ({ + instance: "a1", + kind: "module", + item_id: "cell3_style6_1_Orange", + shape: "cell3_style6", + level: 20, + rarity: "orange", + main_stats: [{ stat: "HPMaxAdd", value: 840 }], + substats: [{ stat: "CritBase", value: 0.06 }], + owner_group: null, + ...over, +}); + +const gearExport = (over: Record = {}) => ({ + format: "nte-gear-export", + format_version: 1, + scan: { cartridges: 0, modules: 1, characters: 0, characters_with_loadouts: 0, warnings: [] }, + exporter: { name: "nte-history-exporter", version: "0.4.0" }, + user_uid: "100200300", + characters: [], + items: [item()], + ...over, +}); + +describe("gear export import", () => { + it("accepts a well-formed export", () => { + const result = parseGearExport(gearExport()); + expect(result.ok).toBe(true); + expect(result.report.parsed).toBe(1); + expect(result.report.rejected).toBe(0); + expect(result.rows!.items[0]!.cells).toBe(3); + expect(result.rows!.userUid).toBe("100200300"); + expect(result.rows!.exporterVersion).toBe("0.4.0"); + }); + + it("refuses a file that is not a gear export", () => { + expect(parseGearExport({ format: "nte-achievement-export" }).ok).toBe(false); + expect(parseGearExport(gearExport({ format_version: 2 })).ok).toBe(false); + expect(parseGearExport("not json at all").ok).toBe(false); + }); + + it("writes nothing at all when one record is bad", () => { + // Fail closed: a half-imported account is worse than a refused import. + const result = parseGearExport( + gearExport({ + scan: { cartridges: 0, modules: 2 }, + items: [item(), item({ instance: "a2", level: 99 })], + }), + ); + expect(result.ok).toBe(false); + expect(result.rows).toBeUndefined(); + expect(result.report.rejected).toBe(1); + expect(result.report.problems.map((p) => p.code)).toContain("bad_level"); + }); + + it("reports a diff rather than a silent count", () => { + const result = parseGearExport( + gearExport({ scan: { cartridges: 0, modules: 3 }, items: [item()] }), + ); + expect(result.ok).toBe(false); + expect(result.report.expected).toBe(3); + expect(result.report.parsed).toBe(1); + expect(result.report.problems.map((p) => p.code)).toContain("count_mismatch"); + }); + + it("rejects a duplicate instance instead of overwriting it", () => { + // `instance` is the primary key, so a duplicate would silently vanish. + const result = parseGearExport( + gearExport({ scan: { cartridges: 0, modules: 2 }, items: [item(), item()] }), + ); + expect(result.ok).toBe(false); + expect(result.report.problems.map((p) => p.code)).toContain("duplicate_instance"); + }); + + it("rejects a stat the model has no slot for", () => { + const result = parseGearExport( + gearExport({ items: [item({ substats: [{ stat: "MadeUpStat", value: 1 }] })] }), + ); + expect(result.ok).toBe(false); + expect(result.report.problems.map((p) => p.code)).toContain("unknown_stat"); + }); + + it("allows a null main-stat value but not a null substat", () => { + // The game never transmits a main stat's displayed value. + expect( + parseGearExport(gearExport({ items: [item({ main_stats: [{ stat: "HPMaxAdd", value: null }] })] })) + .ok, + ).toBe(true); + expect( + parseGearExport(gearExport({ items: [item({ substats: [{ stat: "CritBase", value: null }] })] })) + .ok, + ).toBe(false); + }); + + it("rejects a module whose shape is unknown", () => { + const result = parseGearExport(gearExport({ items: [item({ shape: "cell9_style9" })] })); + expect(result.ok).toBe(false); + expect(result.report.problems.map((p) => p.code)).toContain("unknown_shape"); + }); + + it("resolves a cartridge's set from its packet id", () => { + const result = parseGearExport( + gearExport({ + scan: { cartridges: 1, modules: 0 }, + items: [ + item({ + instance: "c1", + kind: "cartridge", + item_id: "Psyche_orange", + shape: undefined, + main_stats: [{ stat: "CritDamageBase", value: 0.6 }], + }), + ], + }), + ); + expect(result.ok).toBe(true); + // Psyche, not Blood: the id the game actually uses. + expect(result.rows!.items[0]!.set).toBe("Devil's Blood: Curse"); + }); + + it("turns an owner group into an equipment row without naming a character", () => { + const result = parseGearExport(gearExport({ items: [item({ owner_group: "0000000d0d" })] })); + expect(result.ok).toBe(true); + const [row] = result.rows!.equipment; + expect(row!.ownerGroup).toBe("0000000d0d"); + // The name attached to a group is a guess until the player makes it. + expect(row!.characterId).toBeNull(); + expect(row!.origin).toBe("imported"); + }); + + it("leaves unequipped items out of the equipment store", () => { + const result = parseGearExport(gearExport()); + expect(result.rows!.equipment).toEqual([]); + }); +}); + +describe("character merge", () => { + it("refreshes level and ascension but keeps the player's configuration", () => { + const stored = { + ...emptyCharacter("Zankou"), + level: 60, + breakthroughs: 3, + arcId: "fork_vine", + arcRefinement: 2, + useCustom: true, + customTargets: [{ stat: "CritBase", target: 0.7, weight: 3 }], + }; + const [merged] = mergeCharacters( + [stored], + [{ ...emptyCharacter("Zankou"), level: 70, breakthroughs: 5 }], + ); + expect(merged!.level).toBe(70); + expect(merged!.breakthroughs).toBe(5); + expect(merged!.arcId).toBe("fork_vine"); + expect(merged!.arcRefinement).toBe(2); + expect(merged!.useCustom).toBe(true); + expect(merged!.customTargets).toHaveLength(1); + }); + + it("keeps a character the capture did not mention", () => { + const stored = { ...emptyCharacter("Oneiroi"), arcId: "fork_dustbin" }; + const merged = mergeCharacters([stored], [emptyCharacter("Zankou")]); + expect(merged.map((row) => row.characterId).sort()).toEqual(["Oneiroi", "Zankou"]); + expect(merged.find((row) => row.characterId === "Oneiroi")!.arcId).toBe("fork_dustbin"); + }); +}); diff --git a/tests/router.test.ts b/tests/router.test.ts new file mode 100644 index 0000000..b7c9978 --- /dev/null +++ b/tests/router.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, it } from "vitest"; + +import { hashFor, parseHash, TABS } from "../src/ui/router.ts"; + +describe("hash routing", () => { + it("round-trips every tab", () => { + for (const tab of TABS) { + expect(parseHash(hashFor(tab))).toEqual({ tab, id: null }); + } + }); + + it("carries a character id, encoded", () => { + const hash = hashFor("characters", "Chiichan073"); + expect(parseHash(hash)).toEqual({ tab: "characters", id: "Chiichan073" }); + // A name with a slash must not read as a third path segment. + expect(parseHash(hashFor("characters", "a/b"))).toEqual({ tab: "characters", id: "a/b" }); + }); + + it("falls back to characters for anything unrecognised", () => { + expect(parseHash("").tab).toBe("characters"); + expect(parseHash("#/nonsense").tab).toBe("characters"); + expect(parseHash("#").tab).toBe("characters"); + }); + + it("accepts a hash with or without the leading slash", () => { + expect(parseHash("#team").tab).toBe("team"); + expect(parseHash("#/team").tab).toBe("team"); + }); +}); diff --git a/tests/scoring.test.ts b/tests/scoring.test.ts new file mode 100644 index 0000000..88badc8 --- /dev/null +++ b/tests/scoring.test.ts @@ -0,0 +1,147 @@ +import { describe, expect, it } from "vitest"; + +import { + DEFAULT_MAIN_STAT_EPSILON, + compile, + explain, + score, + upperBound, +} from "../src/domain/scoring.ts"; +import { + SLOT_COUNT, + STAT_SLOTS, + addInto, + describe as describeVector, + elementSlot, + emptyPool, + emptyVector, + poolSlice, + slotOf, + vectorFrom, +} from "../src/domain/statvec.ts"; + +const config = { + targets: [ + { stat: "CritBase" as const, target: 0.7, weight: 3 }, + { stat: "CritDamageBase" as const, target: 2.0, weight: 3 }, + { stat: "AtkUp" as const, target: 0.5, weight: 1 }, + ], +}; + +const withStats = (pairs: Record) => + vectorFrom(Object.entries(pairs).map(([stat, value]) => ({ stat, value }))); + +describe("stat vector", () => { + it("gives every stat id its own slot and never reorders", () => { + expect(new Set(STAT_SLOTS).size).toBe(SLOT_COUNT); + // Slot order is an on-disk contract; append only. + expect(STAT_SLOTS[0]).toBe("HPMaxAdd"); + expect(slotOf("HPMaxAdd")).toBe(0); + expect(slotOf("NotAStat")).toBe(-1); + }); + + it("skips main stats whose value the game never transmits", () => { + const vector = vectorFrom([ + { stat: "CritBase", value: null }, + { stat: "CritBase", value: 0.06 }, + ]); + // Float32 keeps ~7 digits; substats carry three, so the storage is exact + // enough and the rounding never reaches the score. + expect(Object.keys(describeVector(vector))).toEqual(["CritBase"]); + expect(vector[slotOf("CritBase")]).toBeCloseTo(0.06, 6); + }); + + it("resolves a character's own damage-bonus slot", () => { + expect(elementSlot("Incantation")).toBe(slotOf("DamageUpIncantationBase")); + expect(elementSlot(null)).toBe(-1); + }); + + it("adds through a flat pool without allocating per item", () => { + const pool = emptyPool(3); + poolSlice(pool, 1).set(withStats({ CritBase: 0.1 })); + const total = emptyVector(); + addInto(total, poolSlice(pool, 1)); + addInto(total, poolSlice(pool, 1)); + expect(total[slotOf("CritBase")]).toBeCloseTo(0.2, 6); + }); +}); + +describe("scoring", () => { + const compiled = compile(config); + + it("is the weighted mean of per-stat attainment", () => { + // Half of every target, so every attainment is 0.5. + const half = withStats({ CritBase: 0.35, CritDamageBase: 1.0, AtkUp: 0.25 }); + expect(score(half, compiled)).toBeCloseTo(0.5, 5); + }); + + it("saturates at the target rather than rewarding a ceiling", () => { + const met = withStats({ CritBase: 0.7, CritDamageBase: 2.0, AtkUp: 0.5 }); + const report = explain(met, compiled); + expect(report.base).toBeCloseTo(1, 5); + expect(report.complete).toBe(true); + for (const stat of report.stats) expect(stat.attainment).toBe(1); + }); + + it("puts the shortfall on the lowest-weighted stat", () => { + // Missing the weight-1 stat entirely costs less than missing a weight-3 one. + const missingLight = withStats({ CritBase: 0.7, CritDamageBase: 2.0 }); + const missingHeavy = withStats({ CritDamageBase: 2.0, AtkUp: 0.5 }); + expect(score(missingLight, compiled)).toBeGreaterThan(score(missingHeavy, compiled)); + }); + + it("breaks a tie at 1.0 by overshoot, and only by a little", () => { + const met = withStats({ CritBase: 0.7, CritDamageBase: 2.0, AtkUp: 0.5 }); + const over = withStats({ CritBase: 0.9, CritDamageBase: 2.0, AtkUp: 0.5 }); + expect(score(over, compiled)).toBeGreaterThan(score(met, compiled)); + // Overshoot must not outweigh actually reaching a target. + const shortOnOne = withStats({ CritBase: 3.0, CritDamageBase: 2.0, AtkUp: 0.0 }); + expect(score(shortOnOne, compiled)).toBeLessThan(score(met, compiled)); + }); + + it("stops paying for overshoot past the cap", () => { + const double = withStats({ CritBase: 1.4, CritDamageBase: 2.0, AtkUp: 0.5 }); + const quadruple = withStats({ CritBase: 2.8, CritDamageBase: 2.0, AtkUp: 0.5 }); + expect(score(quadruple, compiled)).toBeCloseTo(score(double, compiled), 6); + }); + + it("lets the cartridge main stat break ties but never decide a build", () => { + const met = withStats({ CritBase: 0.7, CritDamageBase: 2.0, AtkUp: 0.5 }); + const ranked = compile({ ...config, mainStatRank: { CritDamageBase: 1 } }); + const withMain = score(met, ranked, slotOf("CritDamageBase")); + expect(withMain - score(met, ranked)).toBeCloseTo(DEFAULT_MAIN_STAT_EPSILON, 8); + + // A build one whole weight-1 target short cannot be rescued by the epsilon. + const short = withStats({ CritBase: 0.7, CritDamageBase: 2.0 }); + expect(score(short, ranked, slotOf("CritDamageBase"))).toBeLessThan( + score(met, ranked), + ); + }); + + it("ignores stats with no target", () => { + const irrelevant = withStats({ HealUp: 5, MagBase: 900 }); + expect(score(irrelevant, compiled)).toBe(0); + }); + + it("bounds any completion of a partial build", () => { + const partial = withStats({ CritBase: 0.35 }); + const best = withStats({ CritBase: 0.35, CritDamageBase: 2.0, AtkUp: 0.5 }); + const bound = upperBound(partial, best, compiled); + const finished = emptyVector(); + addInto(finished, partial); + addInto(finished, best); + // Admissible: the bound must never sit below what the completion scores. + expect(bound).toBeGreaterThanOrEqual(score(finished, compiled)); + const worse = withStats({ CritDamageBase: 1.0 }); + const reached = emptyVector(); + addInto(reached, partial); + addInto(reached, worse); + expect(bound).toBeGreaterThanOrEqual(score(reached, compiled)); + }); + + it("reports zero rather than dividing by an empty weight sum", () => { + const empty = compile({ targets: [] }); + expect(score(emptyVector(), empty)).toBe(0); + expect(explain(emptyVector(), empty).total).toBe(0); + }); +}); diff --git a/tests/sheet.test.ts b/tests/sheet.test.ts new file mode 100644 index 0000000..f5aa340 --- /dev/null +++ b/tests/sheet.test.ts @@ -0,0 +1,91 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { compareSheet, predictSheet } from "../src/domain/sheet.ts"; +import { emptyVector, slotOf } from "../src/domain/statvec.ts"; + +const gamedata = JSON.parse(readFileSync("src/generated/gamedata.json", "utf8")); +const zankou = gamedata.espers.find((esper: { name: string }) => esper.name === "Zankou"); + +const line = (lines: ReturnType, key: string) => + lines.find((entry) => entry.key === key)!; + +describe("predicted sheet", () => { + it("reproduces the measured off-team CRIT numbers", () => { + // Zankou off-team: 0.05 base + 0.24 Arc main + 0.30 gear = 0.59. + const total = emptyVector(); + total[slotOf("CritBase")] = 0.54; + total[slotOf("CritDamageBase")] = 1.5; + const lines = predictSheet(zankou, 70, total); + expect(line(lines, "crit").predicted).toBeCloseTo(0.59, 6); + expect(line(lines, "critDamage").predicted).toBeCloseTo(2.0, 6); + }); + + it("reproduces her measured level-70 base HP with no gear", () => { + const lines = predictSheet(zankou, 70, emptyVector()); + expect(line(lines, "hp").predicted).toBe(13466); + expect(line(lines, "def").predicted).toBe(789); + }); + + it("scales the Arc's flat ATK with ATK% but not gear's", () => { + const total = emptyVector(); + total[slotOf("AtkBase")] = 570; + total[slotOf("AtkUp")] = 0.125; + total[slotOf("AtkAdd")] = 420; + // (577 + 570) * 1.125 + 420 = 1710.375 + expect(Math.floor(line(predictSheet(zankou, 70, total), "atk").predicted!)).toBe(1710); + }); + + it("refuses to guess where the model has never been measured", () => { + // Level 80 is the level builds actually use, and the multiplier for it has + // never been read. Saying so beats inventing a number. + const lines = predictSheet(zankou, 80, emptyVector()); + expect(line(lines, "hp").predicted).toBeNull(); + expect(line(lines, "hp").unavailable).toContain("not measured at level 80"); + // Stats that do not depend on the multiplier still work. + expect(line(lines, "crit").predicted).toBeCloseTo(0.05, 6); + }); + + it("says so when the character's level is unknown", () => { + const lines = predictSheet(zankou, null, emptyVector()); + expect(line(lines, "atk").unavailable).toBe("character level unknown"); + }); + + it("starts cycle intensity and charge efficiency at their bases", () => { + const lines = predictSheet(zankou, 70, emptyVector()); + expect(line(lines, "cycle").predicted).toBe(100); + expect(line(lines, "charge").predicted).toBe(1); + }); +}); + +describe("drift against a real sheet", () => { + const lines = predictSheet(zankou, 70, emptyVector()); + + it("reports no drift when the reading matches", () => { + const compared = compareSheet(lines, { hp: 13466 }); + const hp = compared.find((entry) => entry.key === "hp")!; + expect(hp.delta).toBe(0); + expect(hp.drifted).toBe(false); + }); + + it("flags a gap larger than rounding", () => { + const compared = compareSheet(lines, { hp: 13000 }); + expect(compared.find((entry) => entry.key === "hp")!.drifted).toBe(true); + }); + + it("tolerates a one-point difference from a truncated display", () => { + const compared = compareSheet(lines, { hp: 13465 }); + expect(compared.find((entry) => entry.key === "hp")!.drifted).toBe(false); + }); + + it("compares a percentage on its own scale", () => { + // 1.0 of tolerance would make every percentage look correct. + const compared = compareSheet(lines, { crit: 0.2 }); + expect(compared.find((entry) => entry.key === "crit")!.drifted).toBe(true); + }); + + it("leaves a line alone when nothing was measured for it", () => { + const compared = compareSheet(lines, {}); + expect(compared.every((entry) => entry.actual === null && !entry.drifted)).toBe(true); + }); +}); diff --git a/tests/solver.test.ts b/tests/solver.test.ts new file mode 100644 index 0000000..88b4e4b --- /dev/null +++ b/tests/solver.test.ts @@ -0,0 +1,249 @@ +import { describe, expect, it } from "vitest"; + +import { buildPool, type ExportedItem } from "../src/domain/items.ts"; +import { compile } from "../src/domain/scoring.ts"; +import type { SetBonusTable } from "../src/domain/setbonus.ts"; +import { emptyVector } from "../src/domain/statvec.ts"; +import type { Tiling } from "../src/domain/tilings.ts"; +import { solveSingle } from "../src/solver/single.ts"; +import type { SolveProgress, SolveResult } from "../src/solver/protocol.ts"; + +const bonuses: SetBonusTable = { + format: "nte-set-bonuses", + format_version: 1, + sets: { + "Shadow Creed": { "2": { unknown: true, stats: [] }, "4": { unknown: true, stats: [] } }, + }, +}; + +const scoring = compile({ + targets: [ + { stat: "CritBase", target: 0.2, weight: 1 }, + { stat: "CritDamageBase", target: 0.4, weight: 1 }, + ], +}); + +let counter = 0; +function module_(shape: string, crit: number, critDamage: number): ExportedItem { + counter += 1; + return { + instance: `m${counter}`, + kind: "module", + item_id: `${shape}_1_Orange`, + shape, + level: 20, + rarity: "orange", + main_stats: [], + substats: [ + { stat: "CritBase", value: crit }, + { stat: "CritDamageBase", value: critDamage }, + ], + owner_group: null, + }; +} + +function cartridge(mainStat: string, value: number): ExportedItem { + counter += 1; + return { + instance: `c${counter}`, + kind: "cartridge", + item_id: "Attack_orange", + set: "Shadow Creed", + level: 20, + rarity: "orange", + main_stats: [{ stat: mainStat, value }], + substats: [], + owner_group: null, + }; +} + +/** A packing needing two of one shape and one of another. */ +const tiling = (pieces: string[]): Tiling => + ({ set: "Shadow Creed", pieces, cells: [], placement: [] }) as unknown as Tiling; + +function run(request: Parameters[0]): { + result: SolveResult; + progress: SolveProgress[]; +} { + const generator = solveSingle(request); + const progress: SolveProgress[] = []; + let step = generator.next(); + while (!step.done) { + progress.push(step.value); + step = generator.next(); + } + return { result: step.value, progress }; +} + +describe("single-character solve", () => { + const items = [ + module_("cell2_style1", 0.02, 0.04), + module_("cell2_style1", 0.06, 0.12), // clearly the best of its shape + module_("cell2_style1", 0.03, 0.06), + module_("cell3_style1", 0.01, 0.02), + module_("cell3_style1", 0.05, 0.10), // and of its shape + cartridge("CritDamageBase", 0.12), + ]; + const pool = buildPool(items); + const base = () => emptyVector(); + + it("picks the best module of each shape", () => { + const { result } = run({ + pool, + tilings: [tiling(["cell2_style1", "cell3_style1"])], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + const best = result.best!; + expect(best.modules.map((index) => pool.items[index]!.instance).sort()).toEqual(["m2", "m5"]); + expect(best.proven).toBe(true); + }); + + it("never uses the same module twice", () => { + const { result } = run({ + pool, + tilings: [tiling(["cell2_style1", "cell2_style1", "cell3_style1"])], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + const best = result.best!; + expect(best.modules).toHaveLength(3); + expect(new Set(best.modules).size).toBe(3); + // Two copies of a shape must take its two best, not its best twice. + expect(best.modules.map((index) => pool.items[index]!.instance).sort()).toEqual([ + "m2", + "m3", + "m5", + ]); + }); + + it("returns one module per piece in the packing", () => { + for (const pieces of [ + ["cell2_style1", "cell3_style1"], + ["cell2_style1", "cell2_style1", "cell3_style1"], + ]) { + const { result } = run({ + pool, + tilings: [tiling(pieces)], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + expect(result.best!.modules).toHaveLength(pieces.length); + } + }); + + it("respects items held by other characters", () => { + const { result } = run({ + pool, + tilings: [tiling(["cell2_style1", "cell3_style1"])], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + excluded: new Set([1]), // m2, the best cell2 + }); + const chosen = result.best!.modules.map((index) => pool.items[index]!.instance); + expect(chosen).not.toContain("m2"); + expect(chosen.sort()).toEqual(["m3", "m5"]); + }); + + it("reports a packing as unbuildable when no cartridge of its set is owned", () => { + const moduleOnly = buildPool(items.filter((item) => item.kind === "module")); + const { result } = run({ + pool: moduleOnly, + tilings: [tiling(["cell2_style1", "cell3_style1"])], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + expect(result.unbuildable).toBe(true); + expect(result.best).toBeNull(); + }); + + it("skips a packing that needs more copies of a shape than exist", () => { + const { result } = run({ + pool, + tilings: [tiling(["cell3_style1", "cell3_style1", "cell3_style1"])], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + expect(result.best).toBeNull(); + // The packing was reachable, so this is "no build", not "no packing". + expect(result.unbuildable).toBe(false); + }); + + it("yields progress with a real denominator and a usable best at every step", () => { + const { result, progress } = run({ + pool, + tilings: [ + tiling(["cell2_style1", "cell3_style1"]), + tiling(["cell2_style1", "cell2_style1", "cell3_style1"]), + ], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + expect(progress.length).toBeGreaterThan(0); + for (const step of progress) { + expect(step.total).toBe(2); + expect(step.done).toBeLessThanOrEqual(step.total); + // Anytime: any yielded best is already a complete, valid build. + if (step.best) expect(step.best.modules.length).toBe(step.best.tiling.pieces.length); + } + expect(result.examined).toBe(2); + }); + + it("carries the unmeasured set tiers through to the build", () => { + // Shadow Creed needs cell2_style1, cell2_style2, cell4_style1 and + // cell4_style6; two of them present is the (2) bonus. + const withRequired = buildPool([...items, module_("cell2_style2", 0.05, 0.1)]); + const { result } = run({ + pool: withRequired, + tilings: [tiling(["cell2_style1", "cell2_style2"])], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + // The tier is active and its value is unknown, which the build has to admit + // rather than quietly scoring it as zero. + expect(result.best!.unknownTiers).toEqual([2]); + }); + + it("reports no tier at all when the shapes do not qualify", () => { + const { result } = run({ + pool, + tilings: [tiling(["cell2_style1", "cell3_style1"])], + base: base(), + trait: null, + setBonuses: bonuses, + scoring, + }); + // Only one of Shadow Creed's required shapes is on the board. + expect(result.best!.unknownTiers).toEqual([]); + }); + + it("counts a character's own base contribution", () => { + const withBase = emptyVector(); + withBase[6] = 0.2; // CritBase already at target + const { result } = run({ + pool, + tilings: [tiling(["cell2_style1", "cell3_style1"])], + base: withBase, + trait: null, + setBonuses: bonuses, + scoring, + }); + expect(result.best!.score).toBeGreaterThan(0.5); + }); +}); diff --git a/tests/stats.test.ts b/tests/stats.test.ts new file mode 100644 index 0000000..7966785 --- /dev/null +++ b/tests/stats.test.ts @@ -0,0 +1,94 @@ +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { + BASE_CRIT_DAMAGE, + BASE_CRIT_RATE, + MULTIPLIER, + baseStat, + consoleTrait, + hasMultiplier, + totalAtk, + traitContribution, +} from "../src/domain/stats.ts"; + +const gamedata = JSON.parse(readFileSync("src/generated/gamedata.json", "utf8")); +const esperByName = (name: string) => + gamedata.espers.find((esper: { name: string }) => esper.name === name); +const curve = (esper: { stats: { id_stats: string; values: number[] }[] }, id: string) => + esper.stats.find((stat) => stat.id_stats === id)!.values; + +describe("base stats", () => { + it("reproduces the measured level-50 HP for two different espers", () => { + // Both must come out exact: the five-decimal multiplier floors Adler one + // point low, which is what forced the band. + // The multiplier is a property of the level, not the character: these two + // agree to five decimals while their flat deltas differ by 120. + expect(baseStat(curve(esperByName("Haniel"), "HPMaxBase"), 50, "HP")).toBe(8272); + expect(baseStat(curve(esperByName("Adler"), "HPMaxBase"), 50, "HP")).toBe(8638); + }); + + it("reproduces Zankou's measured level-70 sheet", () => { + const zankou = esperByName("Zankou"); + expect(baseStat(curve(zankou, "HPMaxBase"), 70, "HP")).toBe(13466); + expect(baseStat(curve(zankou, "DefBase"), 70, "DEF")).toBe(789); + }); + + it("keeps ATK on a lower multiplier than HP and DEF", () => { + // The level-50 bands do not overlap, so the split is real, not rounding. + const atk = MULTIPLIER[50]!.ATK as { min: number; max: number }; + const hp = MULTIPLIER[50]!.HP as { min: number; max: number }; + expect(atk.max).toBeLessThan(hp.min); + }); + + it("reports level 80 as unmeasured rather than guessing", () => { + expect(hasMultiplier(80)).toBe(false); + expect(baseStat(curve(esperByName("Zankou"), "HPMaxBase"), 80, "HP")).toBeNull(); + }); +}); + +describe("ATK formula", () => { + it("scales the Arc's ATK with ATK% but not flat gear ATK", () => { + expect(Math.floor(totalAtk(577, 570, 420, 0.125))).toBe(1710); + }); +}); + +describe("console trait", () => { + it("is read from the data, not hardcoded", () => { + const zankou = consoleTrait(esperByName("Zankou"))!; + expect(zankou).toEqual({ + stat: "CritDamageBase", + name: "CRIT DMG", + per: 0.16, + moduleCells: 3, + }); + }); + + it("is not always CRIT DMG and not always Type III", () => { + const traits = gamedata.espers.map((esper: never) => consoleTrait(esper)!); + const typeTwo = traits.filter((trait: { moduleCells: number }) => trait.moduleCells === 2); + expect(typeTwo).toHaveLength(3); + expect(new Set(traits.map((trait: { stat: string }) => trait.stat)).size).toBe(8); + }); + + it("counts only modules of the trait's own cell count", () => { + const zankou = consoleTrait(esperByName("Zankou"))!; + // Four Type III modules is the reading Zankou's sheet was solved against: + // 0.50 base + 0.60 cartridge main + 0.26 substats + 4 x 0.16 = 2.00. + const contribution = traitContribution(zankou, [ + "cell3_style1", + "cell3_style2", + "cell3_style3", + "cell3_style4", + "cell2_style1", + "cell4_style1", + ])!; + expect(contribution.value).toBeCloseTo(0.64, 10); + expect(BASE_CRIT_DAMAGE + 0.6 + 0.26 + contribution.value).toBeCloseTo(2.0, 10); + }); + + it("starts every character at 5% CRIT Rate and 50% CRIT DMG", () => { + expect(BASE_CRIT_RATE).toBe(0.05); + expect(BASE_CRIT_DAMAGE).toBe(0.5); + }); +}); diff --git a/tests/team.test.ts b/tests/team.test.ts new file mode 100644 index 0000000..bebf6a8 --- /dev/null +++ b/tests/team.test.ts @@ -0,0 +1,188 @@ +import { describe, expect, it } from "vitest"; + +import { bitsetOf, disjoint, members, overlapCount } from "../src/solver/bitset.ts"; +import { diversify, itemsOf, type Portfolio } from "../src/solver/portfolio.ts"; +import { compareLeximin, solveTeam } from "../src/solver/team.ts"; +import type { Build } from "../src/solver/protocol.ts"; +import type { Tiling } from "../src/domain/tilings.ts"; + +const POOL = 64; + +const tiling = { set: "Shadow Creed", pieces: [], cells: [], placement: [] } as unknown as Tiling; + +function build(score: number, cartridge: number, modules: number[]): Build { + return { + cartridge, + modules, + tiling, + score, + vector: new Float32Array(0), + proven: true, + unknownTiers: [], + }; +} + +const portfolio = (key: string, builds: Build[]): Portfolio => ({ + key, + entries: builds.map((b) => ({ build: b, items: itemsOf(b, POOL) })), + unbuildable: false, +}); + +function run(request: Parameters[0]) { + const generator = solveTeam(request); + const progress = []; + let step = generator.next(); + while (!step.done) { + progress.push(step.value); + step = generator.next(); + } + return { result: step.value, progress }; +} + +describe("bitsets", () => { + it("round-trips membership", () => { + const set = bitsetOf(POOL, [0, 5, 33, 63]); + expect(members(set)).toEqual([0, 5, 33, 63]); + }); + + it("detects sharing across word boundaries", () => { + expect(disjoint(bitsetOf(POOL, [1, 2]), bitsetOf(POOL, [3, 4]))).toBe(true); + expect(disjoint(bitsetOf(POOL, [1, 33]), bitsetOf(POOL, [33]))).toBe(false); + expect(overlapCount(bitsetOf(POOL, [1, 33, 40]), bitsetOf(POOL, [33, 40, 50]))).toBe(2); + }); +}); + +describe("portfolio diversity", () => { + it("prefers a spread over near-duplicates of the best build", () => { + const builds = [ + build(1.0, 0, [1, 2, 3]), + build(0.99, 0, [1, 2, 4]), // near-duplicate of the best + build(0.9, 10, [11, 12, 13]), // shares nothing + ]; + const kept = diversify(builds, POOL, 2); + expect(kept.map((entry) => entry.build.score)).toEqual([1.0, 0.9]); + }); + + it("keeps everything when the portfolio is smaller than the cap", () => { + const builds = [build(1.0, 0, [1]), build(0.5, 2, [3])]; + expect(diversify(builds, POOL, 10)).toHaveLength(2); + }); +}); + +describe("leximin comparison", () => { + it("maximises the worst entry first", () => { + expect(compareLeximin([0.9, 0.5], [0.8, 0.6])).toBeLessThan(0); + expect(compareLeximin([0.7, 0.7], [0.9, 0.5])).toBeGreaterThan(0); + expect(compareLeximin([0.6, 0.8], [0.8, 0.6])).toBe(0); + }); +}); + +describe("team solve", () => { + it("never gives one character an item another is using", () => { + const a = portfolio("A", [build(1.0, 0, [1, 2]), build(0.6, 10, [11, 12])]); + const b = portfolio("B", [build(0.9, 0, [1, 2]), build(0.5, 20, [21, 22])]); + const { result } = run({ portfolios: [a, b], poolSize: POOL }); + const used = result.assignment.flatMap((entry) => [ + entry.build.cartridge, + ...entry.build.modules, + ]); + expect(new Set(used).size).toBe(used.length); + }); + + it("lifts the worst character rather than the total", () => { + // Sum would pick 1.0 + 0.5 = 1.5; leximin picks 0.6 + 0.9 = 1.5 with a + // much better floor. + const a = portfolio("A", [build(1.0, 0, [1, 2]), build(0.6, 10, [11, 12])]); + const b = portfolio("B", [build(0.9, 0, [1, 2]), build(0.5, 20, [21, 22])]); + const { result } = run({ portfolios: [a, b], poolSize: POOL }); + expect(Math.min(...result.sorted)).toBeCloseTo(0.6, 6); + }); + + it("gives generation order no advantage", () => { + const a = portfolio("A", [build(1.0, 0, [1, 2]), build(0.6, 10, [11, 12])]); + const b = portfolio("B", [build(0.9, 0, [1, 2]), build(0.5, 20, [21, 22])]); + const forward = run({ portfolios: [a, b], poolSize: POOL }).result; + const backward = run({ portfolios: [b, a], poolSize: POOL }).result; + expect(forward.sorted).toEqual(backward.sorted); + }); + + it("reports characters with no valid build instead of dropping them", () => { + const a = portfolio("A", [build(1.0, 0, [1, 2])]); + const none: Portfolio = { key: "B", entries: [], unbuildable: true }; + const { result } = run({ portfolios: [a, none], poolSize: POOL }); + expect(result.unbuildable).toEqual(["B"]); + expect(result.assignment.map((entry) => entry.key)).toEqual(["A"]); + }); + + it("yields a complete, conflict-free assignment at every step", () => { + const a = portfolio("A", [build(1.0, 0, [1, 2]), build(0.6, 10, [11, 12])]); + const b = portfolio("B", [build(0.9, 0, [1, 2]), build(0.5, 20, [21, 22])]); + const { progress } = run({ portfolios: [a, b], poolSize: POOL }); + expect(progress.length).toBeGreaterThan(0); + for (const step of progress) { + expect(step.assignment).toHaveLength(2); + const used = step.assignment.flatMap((entry) => [ + entry.build.cartridge, + ...entry.build.modules, + ]); + expect(new Set(used).size).toBe(used.length); + } + }); + + it("uses drag order only to break a tie", () => { + const a = portfolio("A", [build(0.8, 0, [1, 2])]); + const b = portfolio("B", [build(0.8, 10, [11, 12])]); + const { result } = run({ portfolios: [a, b], poolSize: POOL, dragOrder: ["B", "A"] }); + expect(result.assignment.map((entry) => entry.key)).toEqual(["B", "A"]); + // The tie-break reorders the report; it does not change the outcome. + expect(result.sorted).toEqual([0.8, 0.8]); + }); + + + it("seeds a team when the portfolios share every item", () => { + // Both characters only ever want the same three items, so no conflict-free + // selection exists in the portfolios at all - the case that made a real + // four-character solve return nothing. + const a = portfolio("A", [build(1.0, 0, [1, 2])]); + const b = portfolio("B", [build(0.9, 0, [1, 2])]); + const withoutSeed = run({ portfolios: [a, b], poolSize: POOL }).result; + expect(withoutSeed.infeasible).toBe(true); + expect(withoutSeed.assignment).toEqual([]); + + const seeded = run({ + portfolios: [portfolio("A", [build(1.0, 0, [1, 2])]), portfolio("B", [build(0.9, 0, [1, 2])])], + poolSize: POOL, + resolve: (key, excluded) => + excluded.has(0) ? [build(0.4, 10, [11, 12])] : [build(0.9, 0, [1, 2])], + }).result; + expect(seeded.infeasible).toBe(false); + expect(seeded.assignment).toHaveLength(2); + const used = seeded.assignment.flatMap((e) => [e.build.cartridge, ...e.build.modules]); + expect(new Set(used).size).toBe(used.length); + }); + + it("reports infeasible rather than an empty team when it cannot seed", () => { + const a = portfolio("A", [build(1.0, 0, [1, 2])]); + const b = portfolio("B", [build(0.9, 0, [1, 2])]); + const { result } = run({ portfolios: [a, b], poolSize: POOL, resolve: () => [] }); + expect(result.infeasible).toBe(true); + expect(result.unbuildable).toEqual([]); + }); + + it("improves the vector by column generation and stops when it cannot", () => { + const a = portfolio("A", [build(1.0, 0, [1, 2])]); + const b = portfolio("B", [build(0.2, 10, [11, 12])]); + let calls = 0; + const { result } = run({ + portfolios: [a, b], + poolSize: POOL, + resolve: (key) => { + calls += 1; + // A better, still conflict-free build turns up for the worst-off. + return key === "B" && calls <= 2 ? [build(0.7, 30, [31, 32])] : []; + }, + }); + expect(Math.min(...result.sorted)).toBeCloseTo(0.7, 6); + expect(result.rounds).toBeGreaterThan(0); + }); +}); diff --git a/tools/bench-solve.ts b/tools/bench-solve.ts new file mode 100644 index 0000000..5610646 --- /dev/null +++ b/tools/bench-solve.ts @@ -0,0 +1,91 @@ +/** + * Times a real solve against a real export. Not a test - the fixture policy + * keeps real captures out of the repo, so this takes the export path as an + * argument and is run by hand. + * + * node --experimental-strip-types tools/bench-solve.ts path/to/gear.json + */ +import { readFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); + +import { buildPool, type ExportedItem } from "../src/domain/items.ts"; +import { compile, explain } from "../src/domain/scoring.ts"; +import { consoleTrait } from "../src/domain/stats.ts"; +import { loadTilings, type RawTilings } from "../src/domain/tilings.ts"; +import { boardFromSlots, boardKey } from "../src/domain/board.ts"; +import { emptyVector } from "../src/domain/statvec.ts"; +import type { SetBonusTable } from "../src/domain/setbonus.ts"; +import { solveSingle } from "../src/solver/single.ts"; + +const exportPath = process.argv[2]!; +const gear = JSON.parse(readFileSync(exportPath, "utf8")); +const gamedata = JSON.parse(readFileSync(join(root, "src/generated/gamedata.json"), "utf8")); +const setBonuses = JSON.parse(readFileSync(join(root, "data-src/set-bonuses.json"), "utf8")) as SetBonusTable; +const tables = loadTilings(JSON.parse(readFileSync(join(root, "src/generated/tilings.json"), "utf8")) as RawTilings); + +const pool = buildPool(gear.items as ExportedItem[]); +console.log( + `pool: ${pool.items.length} items, ${pool.modulesByShape.size} shapes, ` + + `${pool.cartridgesBySet.size} sets owned, unknown shapes: ${pool.unknownShapes.length}`, +); + +const zankou = gamedata.espers.find((e: { name: string }) => e.name === "Zankou"); +const board = boardFromSlots(zankou.slots); +const table = tables.find((t) => t.cells.join(",") === boardKey(board))!; + +const scoring = compile({ + targets: [ + { stat: "CritBase", target: 0.7, weight: 3 }, + { stat: "CritDamageBase", target: 2.0, weight: 3 }, + { stat: "AtkUp", target: 0.5, weight: 2 }, + { stat: "UnbalIntensityBase", target: 280, weight: 1 }, + ], + mainStatRank: { CritDamageBase: 1, AtkUp: 0.5 }, +}); + +for (const set of ["Crimson: Twin Butterflies", "Shadow Creed"] as const) { + const tilings = table.bySet.get(set) ?? []; + const started = Date.now(); + const run = solveSingle({ + pool, + tilings, + base: emptyVector(), + trait: consoleTrait(zankou), + setBonuses, + scoring, + }); + let step = run.next(); + let yields = 0; + while (!step.done) { + yields += 1; + step = run.next(); + } + const result = step.value; + const elapsed = Date.now() - started; + const best = result.best; + console.log( + `\n${set}: ${tilings.length} packings, examined ${result.examined}, ` + + `${yields} yields, ${elapsed} ms`, + ); + if (!best) { + console.log(" no build"); + continue; + } + console.log( + ` score ${best.score.toFixed(5)} proven=${best.proven} ` + + `pieces=${best.modules.length} unknownTiers=[${best.unknownTiers}]`, + ); + console.log(` cartridge ${pool.items[best.cartridge]!.itemId} main ${pool.items[best.cartridge]!.mainStat}`); + console.log(` modules ${best.modules.map((i) => pool.items[i]!.shape).join(" ")}`); + const report = explain(best.vector, scoring); + for (const stat of report.stats) { + console.log( + ` ${stat.stat.padEnd(20)} ${stat.value.toFixed(3).padStart(9)} / ${String(stat.target).padStart(6)}` + + ` ${(stat.attainment * 100).toFixed(1)}%`, + ); + } + console.log(` distinct modules used: ${new Set(best.modules).size}/${best.modules.length}`); +} diff --git a/tools/bench-team.ts b/tools/bench-team.ts new file mode 100644 index 0000000..705d334 --- /dev/null +++ b/tools/bench-team.ts @@ -0,0 +1,116 @@ +/** + * Times a four-character team solve against a real export. + * + * node --experimental-strip-types tools/bench-team.ts path/to/gear.json + */ +import { readFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +import { boardFromSlots, boardKey } from "../src/domain/board.ts"; +import { buildPool, type ExportedItem } from "../src/domain/items.ts"; +import { compile } from "../src/domain/scoring.ts"; +import type { SetBonusTable } from "../src/domain/setbonus.ts"; +import { consoleTrait } from "../src/domain/stats.ts"; +import { emptyVector } from "../src/domain/statvec.ts"; +import { loadTilings, type RawTilings } from "../src/domain/tilings.ts"; +import { diversify, type Portfolio } from "../src/solver/portfolio.ts"; +import { solveSingle } from "../src/solver/single.ts"; +import { solveTeam } from "../src/solver/team.ts"; +import type { Build } from "../src/solver/protocol.ts"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const gear = JSON.parse(readFileSync(process.argv[2]!, "utf8")); +const gamedata = JSON.parse(readFileSync(join(root, "src/generated/gamedata.json"), "utf8")); +const setBonuses = JSON.parse( + readFileSync(join(root, "data-src/set-bonuses.json"), "utf8"), +) as SetBonusTable; +const tables = loadTilings( + JSON.parse(readFileSync(join(root, "src/generated/tilings.json"), "utf8")) as RawTilings, +); + +const pool = buildPool(gear.items as ExportedItem[]); +const scoring = compile({ + targets: [ + { stat: "CritBase", target: 0.7, weight: 3 }, + { stat: "CritDamageBase", target: 2.0, weight: 3 }, + { stat: "AtkUp", target: 0.5, weight: 2 }, + { stat: "UnbalIntensityBase", target: 280, weight: 1 }, + ], + mainStatRank: { CritDamageBase: 1, AtkUp: 0.5 }, +}); + +const team = ["Zankou", "Haniel", "Adler", "Nanally"]; +const espers = team.map((name) => + gamedata.espers.find((esper: { name: string }) => esper.name === name), +); + +/** Every packing the character's board allows, across every set it owns. */ +function tilingsFor(esper: { slots: number[][] }) { + const key = boardKey(boardFromSlots(esper.slots)); + const table = tables.find((entry) => entry.cells.join(",") === key)!; + return [...table.bySet.values()].flat(); +} + +function solveOne(index: number, excluded: ReadonlySet): Build[] { + const run = solveSingle({ + pool, + tilings: tilingsFor(espers[index]), + base: emptyVector(), + trait: consoleTrait(espers[index]), + setBonuses, + scoring, + excluded, + beamWidth: 60, + candidateWidth: 12, + }); + let step = run.next(); + while (!step.done) step = run.next(); + return step.value.portfolio; +} + +console.log(`pool ${pool.items.length} items, team ${team.join(", ")}\n`); + +const phase0 = Date.now(); +const portfolios: Portfolio[] = espers.map((esper, index) => { + const started = Date.now(); + const builds = solveOne(index, new Set()); + const entries = diversify(builds, pool.items.length, 300); + console.log( + ` ${team[index]!.padEnd(9)} ${tilingsFor(esper).length} packings, ` + + `${builds.length} builds -> ${entries.length} kept, ` + + `best ${entries[0]?.build.score.toFixed(4) ?? "none"}, ${Date.now() - started} ms`, + ); + return { key: team[index]!, entries, unbuildable: entries.length === 0 }; +}); +console.log(`phase 0 total ${Date.now() - phase0} ms\n`); + +const phase12 = Date.now(); +const run = solveTeam({ + portfolios, + poolSize: pool.items.length, + dragOrder: team, + resolve: (key, excluded) => solveOne(team.indexOf(key), excluded).slice(0, 40), + rounds: 6, +}); +let step = run.next(); +let yields = 0; +while (!step.done) { + yields += 1; + console.log( + ` round ${step.value.round}: [${step.value.sorted.map((s) => s.toFixed(4)).join(", ")}]`, + ); + step = run.next(); +} +const result = step.value; +console.log(`\ninfeasible=${result.infeasible}`); +console.log(`phases 1+2 ${Date.now() - phase12} ms, ${yields} yields, ${result.rounds} rounds`); +console.log(`final sorted [${result.sorted.map((s) => s.toFixed(4)).join(", ")}]`); +for (const entry of result.assignment) { + console.log( + ` ${entry.key.padEnd(9)} ${entry.build.score.toFixed(4)} ` + + `${pool.items[entry.build.cartridge]!.itemId} + ${entry.build.modules.length} modules`, + ); +} +const used = result.assignment.flatMap((e) => [e.build.cartridge, ...e.build.modules]); +console.log(`items used ${used.length}, distinct ${new Set(used).size}`); diff --git a/tools/check-guides.ts b/tools/check-guides.ts new file mode 100644 index 0000000..8fcc40b --- /dev/null +++ b/tools/check-guides.ts @@ -0,0 +1,91 @@ +/** + * Validates `data-src/guides.json`. + * + * There is deliberately **no scraper**. Prydwen's character pages are + * client-rendered, so a plain fetch returns navigation chrome, and their Gatsby + * data endpoint answers `410 Gone`. Their robots.txt does allow content pages + * with a ten second crawl-delay, so a headless render would be within policy - + * but it is not something an unattended build step should be doing, and the plan + * always called for this file to be human-reviewed and committed. + * + * So the tool checks what a person typed instead: that every stat id has a slot, + * that targets look like the units the model expects, and that keys join to real + * characters. + * + * node --experimental-strip-types tools/check-guides.ts + */ +import { readFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +import type { GuideTable } from "../src/domain/guides.ts"; +import { isKnownStat } from "../src/domain/statvec.ts"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const guides = JSON.parse( + readFileSync(join(root, "data-src/guides.json"), "utf8"), +) as GuideTable; +const gamedata = JSON.parse(readFileSync(join(root, "src/generated/gamedata.json"), "utf8")); +const keys = new Set( + gamedata.espers.map((esper: { abilityKey: string }) => esper.abilityKey), +); + +const problems: string[] = []; + +if (guides.format !== "nte-guides") problems.push(`wrong format: ${guides.format}`); + +for (const guide of guides.characters ?? []) { + const where = `${guide.key}`; + if (!keys.has(guide.key)) { + // Seven codenames have no everness record, so this is a warning about a + // typo, not proof the character does not exist. + problems.push(`${where}: not an ability key in gamedata (typo, or a codename with no record)`); + } + if (!guide.variants?.length) problems.push(`${where}: no variants`); + + for (const variant of guide.variants ?? []) { + const scope = `${where}/${variant.name}`; + if (!variant.name) problems.push(`${scope}: variant has no name`); + + for (const stat of variant.priority ?? []) { + if (!isKnownStat(stat)) problems.push(`${scope}: priority stat has no slot: ${stat}`); + } + if (new Set(variant.priority ?? []).size !== (variant.priority ?? []).length) { + problems.push(`${scope}: a stat appears twice in the priority list`); + } + + for (const target of variant.targets ?? []) { + if (!isKnownStat(target.stat)) { + problems.push(`${scope}: target stat has no slot: ${target.stat}`); + continue; + } + if (!Number.isFinite(target.target) || target.target <= 0) { + problems.push(`${scope}: ${target.stat} has a non-positive target`); + } + // Percentages are fractions here, never "70". A target above 5 on a + // percentage stat is almost certainly a units mistake. + const isPercent = + target.stat.endsWith("Up") || + target.stat === "CritBase" || + target.stat === "CritDamageBase" || + target.stat.startsWith("DamageUp"); + if (isPercent && target.target > 5) { + problems.push( + `${scope}: ${target.stat} target ${target.target} looks like a percent, not a fraction`, + ); + } + } + } +} + +const count = guides.characters?.length ?? 0; +if (problems.length > 0) { + console.error(`guides.json: ${problems.length} problem(s)`); + for (const problem of problems) console.error(` ${problem}`); + process.exit(1); +} +console.log( + count === 0 + ? "guides.json is valid and empty - the app will say no published guide is available" + : `guides.json is valid: ${count} character(s)`, +); diff --git a/tools/fetch-icons.ts b/tools/fetch-icons.ts new file mode 100644 index 0000000..872066f --- /dev/null +++ b/tools/fetch-icons.ts @@ -0,0 +1,80 @@ +/** + * Downloads character and Arc artwork once, at build time. + * + * everness is never hotlinked at runtime: the app would break the moment their + * paths changed or their CORS policy tightened, and it would be rude besides. + * Files land in `public/img/` named by a content hash, so they can be served + * `immutable` and a changed icon gets a new name for free. + * + * The single-file `file://` build does not carry these - inlining 72 images + * would multiply its size for decoration. Cards fall back to the character's + * name there, which is the information that actually matters. + * + * node --experimental-strip-types tools/fetch-icons.ts + */ +import { createHash } from "node:crypto"; +import { mkdirSync, readFileSync, writeFileSync, readdirSync, rmSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const outDir = join(root, "public", "img"); +const BASE = "https://everness.info/images"; + +interface Entry { + key: string; + path: string; +} + +const gamedata = JSON.parse(readFileSync(join(root, "src/generated/gamedata.json"), "utf8")); + +const entries: Entry[] = [ + ...gamedata.espers.map((esper: { abilityKey: string; icon: string }) => ({ + key: `esper:${esper.abilityKey}`, + path: esper.icon, + })), + ...gamedata.arcs.map((arc: { id: string; icon: string }) => ({ + key: `arc:${arc.id}`, + path: arc.icon, + })), +].filter((entry) => typeof entry.path === "string" && entry.path.length > 0); + +mkdirSync(outDir, { recursive: true }); +// Rebuilt wholesale, so a renamed icon cannot leave an orphan behind. +for (const name of readdirSync(outDir)) rmSync(join(outDir, name)); + +const manifest: Record = {}; +let bytes = 0; +let failed = 0; + +for (const entry of entries) { + const url = `${BASE}${entry.path}.webp`; + try { + const response = await fetch(url, { headers: { "user-agent": "nte-optimizer build" } }); + if (!response.ok) { + failed += 1; + console.warn(` ${response.status} ${url}`); + continue; + } + const buffer = Buffer.from(await response.arrayBuffer()); + const hash = createHash("sha256").update(buffer).digest("hex").slice(0, 8); + const slug = entry.path.split("/").pop() ?? "icon"; + const name = `${slug}-${hash}.webp`; + writeFileSync(join(outDir, name), buffer); + manifest[entry.key] = name; + bytes += buffer.byteLength; + } catch (error) { + failed += 1; + console.warn(` failed ${url}: ${error instanceof Error ? error.message : error}`); + } +} + +writeFileSync( + join(root, "src", "generated", "icons.json"), + `${JSON.stringify({ format: "nte-icons", format_version: 1, files: manifest }, null, 1)}\n`, +); + +console.log( + `icons ${Object.keys(manifest).length} of ${entries.length} fetched` + + `${failed > 0 ? `, ${failed} failed` : ""} ${(bytes / 1024).toFixed(0)} KB`, +); diff --git a/tools/precompute-tilings.ts b/tools/precompute-tilings.ts new file mode 100644 index 0000000..c971fda --- /dev/null +++ b/tools/precompute-tilings.ts @@ -0,0 +1,115 @@ +/** + * Precomputes every (board, set, filler) packing, so exact cover never runs at + * runtime. + * + * Positions do not affect score, so one canonical placement per shape multiset + * is all the app ever needs - for rendering. What the solver actually consumes + * is the list of multisets that tile at all. + * + * Output src/generated/tilings.json (committed, bundled). + */ +import { readFileSync, writeFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +import { boardFromSlots, boardKey, fillers, tile, type Board } from "../src/domain/board.ts"; +import { REQUIRED_PIECES, SET_NAMES } from "../src/domain/cartridges.ts"; +import { ICON_ORDER, type ShapeId } from "../src/domain/shapes.ts"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const gamedata = JSON.parse( + readFileSync(join(root, "src", "generated", "gamedata.json"), "utf8"), +); + +// Characters sharing a grid share a tiling table; there are only a few distinct +// grids across the whole roster. +const boards = new Map(); +for (const esper of gamedata.espers) { + const board = boardFromSlots(esper.slots); + const key = boardKey(board); + const entry = boards.get(key); + if (entry) entry.espers.push(esper.abilityKey); + else boards.set(key, { board, espers: [esper.abilityKey] }); +} + +const boardList = [...boards.values()]; +const freeCells = new Set(boardList.map((entry) => entry.board.cells.length)); +if (freeCells.size !== 1) { + throw new Error(`boards disagree on free cell count: ${[...freeCells].join(", ")}`); +} +const cellCount = [...freeCells][0]!; + +const REQUIRED_CELLS = 12; +const fillerSets = fillers(cellCount - REQUIRED_CELLS); + +/** + * Entries are encoded rather than spelled out: 1,297 packings of 20 cells is + * 350 KB as plain arrays and 50 KB like this, and the app decodes one entry + * only when it draws a board. + * + * [setIndex, pieces, placement] + * pieces one base36 digit per piece - an index into ICON_ORDER + * placement one base36 digit per board cell, in `cells` order - an index + * into `pieces` + */ +type Entry = [set: number, pieces: string, placement: string]; + +const base36 = (value: number): string => { + if (value >= 36) throw new Error(`index ${value} does not fit one base36 digit`); + return value.toString(36); +}; + +const tables: Array<{ cells: number[]; espers: string[]; entries: Entry[] }> = []; +let attempted = 0; +let tiled = 0; +const pieceCounts = new Map(); + +for (const { board, espers } of boardList) { + const entries: Entry[] = []; + const cellIndex = new Map(board.cells.map((cell, index) => [cell, index])); + for (const [setIndex, set] of SET_NAMES.entries()) { + const required = REQUIRED_PIECES[set] as readonly ShapeId[]; + if (required.reduce((sum, shape) => sum + Number(shape.slice(4, 5)), 0) !== REQUIRED_CELLS) { + throw new Error(`${set} does not total ${REQUIRED_CELLS} cells`); + } + for (const filler of fillerSets) { + attempted += 1; + const multiset = [...required, ...filler]; + const packed = tile(board, multiset); + if (!packed) continue; + tiled += 1; + pieceCounts.set(multiset.length, (pieceCounts.get(multiset.length) ?? 0) + 1); + + const pieces = packed.map((piece) => base36(ICON_ORDER.indexOf(piece.shape))).join(""); + const placement = new Array(board.cells.length); + packed.forEach((piece, index) => { + for (const cell of piece.cells) placement[cellIndex.get(cell)!] = base36(index); + }); + if (placement.some((slot) => slot === undefined)) { + throw new Error(`packing left a cell uncovered for ${set}`); + } + entries.push([setIndex, pieces, placement.join("")]); + } + } + tables.push({ cells: [...board.cells], espers, entries }); +} + +const out = { + format: "nte-tilings", + format_version: 1, + gridSize: 7, + cellCount, + shapes: ICON_ORDER, + sets: SET_NAMES, + boards: tables, +}; +const json = JSON.stringify(out); +writeFileSync(join(root, "src", "generated", "tilings.json"), json + "\n"); + +const byPieces = [...pieceCounts.entries()].sort((a, b) => a[0] - b[0]); +console.log( + `tilings.json ${boardList.length} boards x ${SET_NAMES.length} sets x ` + + `${fillerSets.length} fillers = ${attempted} combinations, ${tiled} tile ` + + `(${byPieces.map(([n, count]) => `${n} pieces: ${count}`).join(", ")}) ` + + `${(json.length / 1024).toFixed(0)} KB`, +); diff --git a/tools/prune-gamedata.ts b/tools/prune-gamedata.ts new file mode 100644 index 0000000..c8faa08 --- /dev/null +++ b/tools/prune-gamedata.ts @@ -0,0 +1,136 @@ +/** + * Prunes the mirrored everness data down to what the app actually needs. + * + * Input data-src/{espers,arcs,arc_effects}.json (committed, not shipped) + * Output src/generated/gamedata.json (committed, bundled) + * + * Everything dropped here is presentation the app never renders: voice lines, + * fashion, profile text, and the ability descriptions. What stays is the stat + * curves, the console grid, the console trait, and the ids that join to a + * capture. + */ +import { readFileSync, writeFileSync, mkdirSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const read = (name: string) => + JSON.parse(readFileSync(join(root, "data-src", name), "utf8")); + +interface StatCurve { + id_stats: string; + name: string; + bShowPercent: boolean; + values: number[]; +} + +interface TraitStat { + id_stats: string; + name: string; + bShowPercent: boolean; + value: number; +} + +export interface Esper { + id: number; + /** The `GA__*` name the capture marks character blocks with. */ + abilityKey: string; + name: string; + element: string | null; + rarity: number; + icon: string; + /** Per-level curves, indexed by level - 1. */ + stats: StatCurve[]; + /** 7x7, -1 blocked and 0 free. */ + slots: number[][]; + /** + * The module type the console trait keys off - 2 or 3, NOT the grid type. + * Prydwen's "Console Grid Type" means this same number. + */ + ownerGridCount: number; + /** Never assume Type III / CRIT DMG: seven different stats appear here. */ + trait: TraitStat[]; + /** Levels at which a breakthrough is taken. */ + breakthroughLevels: number[]; +} + +export interface Arc { + id: string; + name: string; + icon: string; + quality: number; + desc: string; + stats: unknown; + values: unknown; +} + +const espersRaw = read("espers.json") as any[]; +const arcsRaw = read("arcs.json") as Record | any[]; +const arcEffects = read("arc_effects.json") as Record; + +function abilityKey(esper: any): string { + const id: string | undefined = esper?.melee?.[0]?.id; + const match = /^GA_(.+?)_Melee$/.exec(id ?? ""); + if (!match) throw new Error(`no GA__Melee id on esper ${esper?.name}`); + return match[1]!; +} + +const espers: Esper[] = espersRaw.map((esper) => ({ + id: esper.id, + abilityKey: abilityKey(esper), + name: esper.name, + element: esper.element?.[0]?.element_id ?? null, + rarity: esper.rarity, + icon: esper.icon, + stats: (esper.stats ?? []).map((stat: StatCurve) => ({ + id_stats: stat.id_stats, + name: stat.name, + bShowPercent: stat.bShowPercent, + values: stat.values, + })), + slots: esper.equip_slots.slots, + ownerGridCount: esper.equip_slots.OwnerGridCount, + trait: (esper.equip_slots.stats ?? []).map((stat: TraitStat) => ({ + id_stats: stat.id_stats, + name: stat.name, + bShowPercent: stat.bShowPercent, + value: stat.value, + })), + breakthroughLevels: (esper.breakthrough ?? []).map((step: { level: string }) => + Number(step.level), + ), +})); + +const arcEntries = Array.isArray(arcsRaw) ? arcsRaw : Object.values(arcsRaw); +const arcs: Arc[] = arcEntries.map((arc: any) => ({ + id: arc.id, + name: arc.name, + icon: arc.icon, + quality: arc.quality, + desc: arc.desc, + stats: arc.stats, + values: arc.effect?.values ?? arc.effect ?? null, +})); + +const gamedata = { + format: "nte-gamedata", + format_version: 1, + generated: new Date().toISOString().slice(0, 10), + espers, + arcs, + arcEffects, +}; + +const outDir = join(root, "src", "generated"); +mkdirSync(outDir, { recursive: true }); +const json = JSON.stringify(gamedata); +writeFileSync(join(outDir, "gamedata.json"), json + "\n"); + +const sourceBytes = ["espers.json", "arcs.json"].reduce( + (total, name) => total + readFileSync(join(root, "data-src", name)).byteLength, + 0, +); +console.log( + `gamedata.json ${espers.length} espers, ${arcs.length} arcs ` + + `${(sourceBytes / 1024).toFixed(0)} KB -> ${(json.length / 1024).toFixed(0)} KB`, +); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..c80f7a7 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022", "DOM", "DOM.Iterable", "WebWorker"], + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "types": [], + "strict": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "noImplicitOverride": true, + "noFallthroughCasesInSwitch": true, + "verbatimModuleSyntax": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true, + "noEmit": true, + "allowImportingTsExtensions": true, + "outDir": "./.tsbuild/app" + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..aa9f5f2 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "ESNext", + "moduleResolution": "bundler", + "types": ["node"], + "strict": true, + "noUncheckedIndexedAccess": true, + "verbatimModuleSyntax": true, + "resolveJsonModule": true, + "isolatedModules": true, + "skipLibCheck": true, + "noEmit": true, + "allowImportingTsExtensions": true, + "outDir": "./.tsbuild/node" + }, + "include": ["tools", "vite.config.ts", "vite.single.config.ts", "vitest.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..03c6bd6 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +// `base: './'` keeps the build working unchanged at nte.goober.moe, under a +// plain `python3 -m http.server -d dist`, and inside the single-file build. +export default defineConfig({ + base: "./", + plugins: [react()], + build: { + target: "es2022", + outDir: "dist", + assetsInlineLimit: 4096, + sourcemap: false, + }, + worker: { format: "es" }, +}); diff --git a/vite.single.config.ts b/vite.single.config.ts new file mode 100644 index 0000000..e57b29b --- /dev/null +++ b/vite.single.config.ts @@ -0,0 +1,98 @@ +/** + * The `file://` build: one HTML file, everything inlined. + * + * Chrome gives a `file://` document an opaque origin, which costs it IndexedDB, + * workers, `fetch` and module scripts. So this build is a classic IIFE with the + * game data inlined rather than dynamically imported, and the worker aliased out + * entirely. The app degrades behind `PersistenceAdapter` and `SolverHost` and + * never sees the difference. + */ +import { readFileSync, writeFileSync, rmSync, readdirSync } from "node:fs"; +import { join } from "node:path"; + +import { fileURLToPath } from "node:url"; + +import { defineConfig, type Plugin } from "vite"; +import react from "@vitejs/plugin-react"; + +const fromRoot = (relative: string): string => + fileURLToPath(new URL(relative, import.meta.url)); + +const OUT_DIR = "dist/single"; +const TARGET = "dist/nte.html"; + +/** Fold the emitted script and stylesheet into one document. */ +function inlineEverything(): Plugin { + return { + name: "inline-everything", + writeBundle() { + const files = readdirSync(OUT_DIR, { recursive: true }) as string[]; + const scripts = files.filter((name) => name.endsWith(".js")); + const styles = files.filter((name) => name.endsWith(".css")); + if (scripts.length !== 1) { + // More than one chunk means something escaped `inlineDynamicImports`, + // and a file:// page cannot fetch the second one. + throw new Error(`expected one script, got ${scripts.length}: ${scripts.join(", ")}`); + } + const script = readFileSync(join(OUT_DIR, scripts[0]!), "utf8"); + const css = styles.map((name) => readFileSync(join(OUT_DIR, name), "utf8")).join("\n"); + + const html = ` + + + + + NTE gear optimizer + + + +
+ + + +`; + writeFileSync(TARGET, html); + rmSync(OUT_DIR, { recursive: true, force: true }); + const kb = (html.length / 1024).toFixed(0); + // eslint-disable-next-line no-console + console.log(`${TARGET} ${kb} KB, one file, no external requests`); + }, + }; +} + +export default defineConfig({ + base: "./", + plugins: [react(), inlineEverything()], + resolve: { + // Matched against the whole import specifier and replaced with an absolute + // path: a regex that rewrites only part of a relative specifier resolves + // against the importer's directory and lands nowhere. + alias: [ + { + find: /^\.\/worker-host\.ts$/, + replacement: fromRoot("src/solver/worker-host.single.ts"), + }, + { + // No artwork travels with the single file, so the manifest is emptied + // rather than left to request images that are not there. + find: /^\.\.\/generated\/icons\.json$/, + replacement: fromRoot("src/generated/icons.empty.json"), + }, + ], + }, + build: { + outDir: OUT_DIR, + emptyOutDir: true, + target: "es2022", + cssCodeSplit: false, + assetsInlineLimit: Number.MAX_SAFE_INTEGER, + rollupOptions: { + output: { + format: "iife", + inlineDynamicImports: true, + entryFileNames: "app.js", + assetFileNames: "app.[ext]", + }, + }, + }, +}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..faa6d98 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + environment: "node", + include: ["tests/**/*.test.ts"], + }, +});