From 51ec62d4e976db5e8f24d37c3c41c3e636f67636 Mon Sep 17 00:00:00 2001 From: JOY Date: Tue, 26 May 2026 23:12:21 +0700 Subject: [PATCH] docs: define alpha level and stat progression --- ROADMAP.md | 7 +- docs/SUMMARY.md | 1 + docs/design/03-systems-index.md | 19 +- ...-character-stat-and-relationship-system.md | 3 + .../39-alpha-stats-and-skills-design.md | 8 + .../40-soul-skill-carryover-and-sync.md | 3 + .../45-inventory-and-equipment-system.md | 4 + .../57-alpha-level-core-stat-progression.md | 455 ++++++++++++++++++ 8 files changed, 490 insertions(+), 10 deletions(-) create mode 100644 docs/design/57-alpha-level-core-stat-progression.md diff --git a/ROADMAP.md b/ROADMAP.md index 53912f02..bb367ede 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -472,10 +472,13 @@ prototype. in #260. - [ ] Check `docs/design/38-alpha-design-decision-register.md` before reopening any alpha scope debate or treating older TODO text as blocking. Track in #260. -- [ ] Implement alpha stats and skills from +- [ ] Implement alpha stats and skills from #260 and #275: `docs/design/39-alpha-stats-and-skills-design.md`: 1-15 stat scale, body archetype budgets, skill origin model, first skill slots, Sentinel starter - kit, semantic skill intents, and server validation. Track in #260. + kit, semantic skill intents, and server validation. Implement body level, XP, + body stat points, and derived-stat recompute from + `docs/design/57-alpha-level-core-stat-progression.md`. Track in #260 and + #275. - [ ] Implement the alpha carryover and sync model from `docs/design/40-soul-skill-carryover-and-sync.md`: skill origin labels, carryover rules, lock reasons, simple soul-body sync, and server-validated diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index b7f702a0..d7288470 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -73,6 +73,7 @@ - [Networked Player Controller Prototype](design/07-player-controller-prototype.md) - [AI NPC Backend And Client Feature Roadmap](design/37-ai-npc-backend-client-roadmap.md) - [Alpha Stats and Skills Design](design/39-alpha-stats-and-skills-design.md) +- [Alpha Level and Core Stat Progression](design/57-alpha-level-core-stat-progression.md) - [Soul Skill Carryover and Sync Design](design/40-soul-skill-carryover-and-sync.md) ## Research and References diff --git a/docs/design/03-systems-index.md b/docs/design/03-systems-index.md index fa4519a8..e21ed82e 100644 --- a/docs/design/03-systems-index.md +++ b/docs/design/03-systems-index.md @@ -74,27 +74,30 @@ The first alpha execution spine is: 12. [39-alpha-stats-and-skills-design.md](39-alpha-stats-and-skills-design.md) for alpha stat scale, body archetype budgets, skill origin, skill slots, first body kits, skill data, and validation rules. -13. [40-soul-skill-carryover-and-sync.md](40-soul-skill-carryover-and-sync.md) +13. [57-alpha-level-core-stat-progression.md](57-alpha-level-core-stat-progression.md) + for body level, XP curve, body stat points, derived stat recompute, and + inventory/equipment stat requirement handoff. +14. [40-soul-skill-carryover-and-sync.md](40-soul-skill-carryover-and-sync.md) for learned skill survival, body imprint loss, equipment gates, soul-body sync, effective skill execution, and UI lock reasons. -14. [41-alpha-asset-shortlist.md](41-alpha-asset-shortlist.md) for alpha asset +15. [41-alpha-asset-shortlist.md](41-alpha-asset-shortlist.md) for alpha asset candidates, purchase guidance, style-fork comparison, import test order, and visual budget risks. -15. [42-alpha-visual-budget.md](42-alpha-visual-budget.md) for PC alpha, Web +16. [42-alpha-visual-budget.md](42-alpha-visual-budget.md) for PC alpha, Web demo, and mobile candidate budgets covering characters, environments, materials, lighting, NPC counts, VFX, and issue #151 WebGL risks. -16. [43-alpha-material-shader-recipe.md](43-alpha-material-shader-recipe.md) +17. [43-alpha-material-shader-recipe.md](43-alpha-material-shader-recipe.md) for the Unity 6000.5 URP clean PBR recipe, URP Lit / Simple Lit / toon shader comparison protocol, platform material defaults, and look-dev evidence checklist. -17. [44-alpha-body-rig-action-compatibility.md](44-alpha-body-rig-action-compatibility.md) +18. [44-alpha-body-rig-action-compatibility.md](44-alpha-body-rig-action-compatibility.md) for the Unity 6000.5 Humanoid Avatar, action registry, weapon visibility, root motion, scale, nameplate, and candidate body evidence checklist. -18. [48-art-direction-and-asset-buying-guide.md](48-art-direction-and-asset-buying-guide.md) +19. [48-art-direction-and-asset-buying-guide.md](48-art-direction-and-asset-buying-guide.md) for Anime-Ready Semi-Real asset-buying guardrails, medieval asset limits, character and environment requirements, reject criteria, and Unity 6.5 URP import evaluation. -19. [45-inventory-and-equipment-system.md](45-inventory-and-equipment-system.md) +20. [45-inventory-and-equipment-system.md](45-inventory-and-equipment-system.md) for body carry inventory, account/soul stash, Garden stash, temporary Gate loot, equipment slots, custody lifecycle states, hostile / monster / boss body equipment rules, starter item definitions, death loss rules, UI flows, @@ -124,7 +127,7 @@ blockout tasks for the alpha. | 41 | The Garden living roster loop | Gameplay / Meta | VS | Concept | [33-alpha-production-backlog.md](33-alpha-production-backlog.md), [26-alpha-game-design-document.md](26-alpha-game-design-document.md), [27-alpha-level-design.md](27-alpha-level-design.md), [25-core-loop-v1.md](25-core-loop-v1.md), [24-pick-me-up-reference-analysis.md](24-pick-me-up-reference-analysis.md), [37-ai-npc-backend-client-roadmap.md](37-ai-npc-backend-client-roadmap.md) | Actor profiles, NPC memory, TIME / SECOND economy, Gate missions, AI agent policy | | 42 | Garden personalization and decor | Gameplay / Social | VS | Concept | [25-core-loop-v1.md](25-core-loop-v1.md) | The Garden, actor profiles, NPC memory, outcome reports, inventory, social visits | | 37 | OpenClaw-connected NPC bridge (user-owned agents as NPC actors) | Gameplay / Meta | Alpha | Concept | [10-character-profile-agent-memory.md](10-character-profile-agent-memory.md) | Auth, Nakama, api.dos.ai model service, NPC dialogue, LLM safety | -| 12 | Level/stat progression | Progression | MVP | Prototype | [40-soul-skill-carryover-and-sync.md](40-soul-skill-carryover-and-sync.md), [39-alpha-stats-and-skills-design.md](39-alpha-stats-and-skills-design.md), [14-character-stat-and-relationship-system.md](14-character-stat-and-relationship-system.md) | Persistence | +| 12 | Level/stat progression | Progression | MVP | Prototype | [57-alpha-level-core-stat-progression.md](57-alpha-level-core-stat-progression.md), [40-soul-skill-carryover-and-sync.md](40-soul-skill-carryover-and-sync.md), [39-alpha-stats-and-skills-design.md](39-alpha-stats-and-skills-design.md), [14-character-stat-and-relationship-system.md](14-character-stat-and-relationship-system.md) | Persistence | | 13 | Reincarnation flow (death -> SECOND -> new Frame) | Progression | VS | Prototype | [12-game-design-document.md](12-game-design-document.md) | Level/stats, NFT escrow, Persistence | | 14 | SECOND economy | Economy | VS | Not designed | (GDD pending - JOY input) | DOS Chain integration | | 36 | TIME / SECOND economy | Economy | VS | Prototype | [31-alpha-economy-balance-and-playtest-plan.md](31-alpha-economy-balance-and-playtest-plan.md), [08-time-as-currency.md](08-time-as-currency.md) | Reincarnation, Combat, Persistence | diff --git a/docs/design/14-character-stat-and-relationship-system.md b/docs/design/14-character-stat-and-relationship-system.md index 8674a44c..d28fde0e 100644 --- a/docs/design/14-character-stat-and-relationship-system.md +++ b/docs/design/14-character-stat-and-relationship-system.md @@ -18,6 +18,9 @@ authority. It is a design contract, not a final combat spreadsheet. For alpha implementation details such as stat ranges, body archetype budgets, skill slots, first body kits, and skill validation, see [39-alpha-stats-and-skills-design.md](39-alpha-stats-and-skills-design.md). +For body level, XP thresholds, stat points per level, and derived-stat +recompute rules, see +[57-alpha-level-core-stat-progression.md](57-alpha-level-core-stat-progression.md). --- diff --git a/docs/design/39-alpha-stats-and-skills-design.md b/docs/design/39-alpha-stats-and-skills-design.md index 8892fb6e..a4a7556f 100644 --- a/docs/design/39-alpha-stats-and-skills-design.md +++ b/docs/design/39-alpha-stats-and-skills-design.md @@ -13,6 +13,9 @@ without replacing it.* For carryover rules after body loss, body imprint loss, learned skill survival, equipment gates, and soul-body sync, see [40-soul-skill-carryover-and-sync.md](40-soul-skill-carryover-and-sync.md). +For body level, XP thresholds, body stat points, derived-stat recompute, and +inventory stat requirement handoff, see +[57-alpha-level-core-stat-progression.md](57-alpha-level-core-stat-progression.md). --- @@ -111,6 +114,11 @@ Alpha formula rule: > Use simple transparent formulas first, then move constants into data once > combat feel is stable. +The alpha level and XP packet fixes the first implementation defaults: level +cap 15, 3 body stat points per current-body level, no automatic +plus-one-to-all-stats growth, and a fixed XP table. See +[57-alpha-level-core-stat-progression.md](57-alpha-level-core-stat-progression.md). + Example direction: ```text diff --git a/docs/design/40-soul-skill-carryover-and-sync.md b/docs/design/40-soul-skill-carryover-and-sync.md index 6b35f2fa..2a9bfbea 100644 --- a/docs/design/40-soul-skill-carryover-and-sync.md +++ b/docs/design/40-soul-skill-carryover-and-sync.md @@ -17,6 +17,9 @@ SECOND SPAWN should not treat every skill as a body stat. A person learns through memory, timing, habit, judgment, and repeated use. The current body then decides how well that knowledge can be executed. +For current-body level, XP, and body stat point loss on reinhabitation, see +[57-alpha-level-core-stat-progression.md](57-alpha-level-core-stat-progression.md). + The practical rule: > Physical stats mostly belong to the body. Learned skills can belong to the diff --git a/docs/design/45-inventory-and-equipment-system.md b/docs/design/45-inventory-and-equipment-system.md index bf86f829..cc3c4988 100644 --- a/docs/design/45-inventory-and-equipment-system.md +++ b/docs/design/45-inventory-and-equipment-system.md @@ -8,6 +8,10 @@ This document complements `39-alpha-stats-and-skills-design.md`, `40-soul-skill-carryover-and-sync.md`, and `46-hunter-nft-skin-escrow.md`.* +For level, core stats, body stat points, derived stats, and equipment +stat-requirement validation, see +[57-alpha-level-core-stat-progression.md](57-alpha-level-core-stat-progression.md). + --- ## 1. Purpose diff --git a/docs/design/57-alpha-level-core-stat-progression.md b/docs/design/57-alpha-level-core-stat-progression.md new file mode 100644 index 00000000..d261fc9e --- /dev/null +++ b/docs/design/57-alpha-level-core-stat-progression.md @@ -0,0 +1,455 @@ +# Alpha Level and Core Stat Progression + +*Status: Alpha implementation design* +*Created: 2026-05-26* +*Source of truth level: Implementation packet for issue #275. This extends +`14-character-stat-and-relationship-system.md`, `39-alpha-stats-and-skills-design.md`, +`40-soul-skill-carryover-and-sync.md`, and +`45-inventory-and-equipment-system.md`.* + +--- + +## 1. Purpose + +This document defines the first alpha body-level, XP, and core-stat allocation +rules for SECOND SPAWN. + +The design goal is to keep the satisfying manhwa feeling of: + +```text +gain XP -> level up -> spend points -> feel stronger +``` + +without losing SECOND SPAWN's core rule: + +```text +the current body grows, the body can die, and the player continues through a +different body only by explicitly designed carryover rules. +``` + +--- + +## 2. Reference Takeaways + +Use these references for pattern recognition, not direct cloning. + +| Reference | Useful Pattern | What SECOND SPAWN Should Not Copy Blindly | +| ---- | ---- | ---- | +| Solo Leveling and Solo Leveling: ARISE | Readable player stat allocation after level-up. Several public guides describe Sung Jinwoo gaining stat points on level-up and allocating them into stats, with fan/game guide discussion often citing five points per level. | One main character with permanent growth does not match SECOND SPAWN's body-loss loop. | +| Pick Me Up, Infinite Gacha | Roster units matter, training and survival matter, and unit loss creates pressure. | Gacha/hero-rank structure and opaque promotion rules are not the alpha progression model. | +| Diablo IV / Path of Exile 2 | Gear, level, stats, and skills all contribute to power but must stay readable. | Full endgame affix complexity, huge passive trees, and long-term respec economy are out of alpha. | + +References: + +- [Pro Game Guides: Best stats to add for Sung Jinwoo in Solo Leveling ARISE](https://progameguides.com/solo-leveling-arise/best-stats-to-add-for-sung-jinwoo-in-solo-leveling-arise/) +- [TheGamer: How To Reset Stat Points In Solo Leveling: Arise](https://www.thegamer.com/solo-leveling-arise-best-stats-level-up-reset-guide/) +- [Pick Me Up Wiki: Heroes](https://pick-me-up.fandom.com/wiki/Pick_Me_Up%21/Heroes) + +--- + +## 3. Alpha Decisions + +### D1: Body Level Is Current-Body Progression + +Alpha uses `current_body_level`, not durable account level, as the first +player-facing level. + +Rules: + +- The inhabited body has `current_body_level`. +- The inhabited body has `current_body_xp`. +- Body XP and body level are lost, retired, or archived with the body on death + unless a later design explicitly grants account or soul carryover. +- The player's durable account can remember achievements, unlocked knowledge, + relationships, and selected soul-layer progress through separate systems, but + those are not the same as current body level. + +This keeps reinhabitation meaningful. A new body is not a simple respawn of the +same stat sheet. + +### D2: Alpha Level Cap Is 15 + +Alpha supports levels 1-15 for current bodies. + +Practical demo expectation: + +- first 30-minute demo: likely reaches level 2-4 +- full alpha slice: can support level 1-15 +- level 16+ is reserved for elite, boss, anomaly, post-alpha, or tuning tests + +Do not show an uncapped level bar in alpha UI. + +### D3: Each Body Level Grants 3 Body Stat Points + +On each current-body level-up: + +```text +body_stat_points_awarded = 3 +``` + +Why not five points per level: + +- Solo Leveling-style five-point allocation is readable and satisfying, but it + assumes a mostly permanent main-character progression path. +- SECOND SPAWN has eight core stats, body loss, body archetypes, equipment + requirements, and reinhabitation reset pressure. +- Five points per level would flatten body identity too quickly in the alpha + range. + +Three points per level is the alpha default because it gives the player a real +choice at every level while keeping the current body's original shape visible. + +### D4: No Automatic Plus-One-To-All Core Stats + +Alpha does not grant automatic +1 to every stat on level-up. + +Reason: + +- automatic all-stat growth makes level alone too dominant +- current body archetype should remain readable +- derived stats already include level as a scaling input + +Instead, level contributes to derived stats, and the player chooses where the +three body stat points go. + +### D5: Body Stat Points Are Body-Bound + +Body stat points are spent on the current body only. + +Rules: + +- unspent body stat points are stored on the current body +- spent body stat points are stored as current-body allocation +- body death retires the current allocations with that body +- reinhabiting another body starts from that body's base stats and explicit + eligibility rules +- future soul carryover may remember skill knowledge, not raw body stat points + +The alpha UI should label these as `Body Points`, not `Soul Points`. + +--- + +## 4. Core Stat Allocation Rules + +Canonical core stats remain: + +```text +strength +dexterity +endurance +perception +focus +presence +intelligence +luck +``` + +Allocation rules: + +| Rule | Alpha Value | +| ---- | ---- | +| points per level | 3 | +| minimum allocatable level | level 2 | +| alpha stat hard cap | 15 unless explicit elite/anomaly test | +| max allocated bonus per stat | +5 above that body's base stat | +| respec | no normal alpha respec, debug/admin only | +| unspent points | allowed, but shown clearly | + +The `+5 above base` rule protects body identity. A Courier can improve +endurance, but it should not become a Sentinel just by spending a few early +levels. + +Recommended UI labels: + +| Field | Player Copy | +| ---- | ---- | +| `current_body_level` | Body Level | +| `current_body_xp` | Body XP | +| `unspent_body_stat_points` | Body Points | +| body-bound allocated stat | Body Training | +| blocked stat allocation | Body limit reached | + +Do not show raw internal field names in player UI. + +--- + +## 5. Alpha XP Table + +Alpha uses a fixed data table for levels 1-15. A table is easier to inspect, +tune, and sync across Nakama, Unity, and future Fusion server validation than an +opaque formula. + +| Current Level | XP To Next Level | Total XP Required For Next Level | Body Points At Next Level | +| ---- | ----: | ----: | ----: | +| 1 | 120 | 120 | 3 | +| 2 | 180 | 300 | 6 | +| 3 | 260 | 560 | 9 | +| 4 | 360 | 920 | 12 | +| 5 | 480 | 1400 | 15 | +| 6 | 620 | 2020 | 18 | +| 7 | 780 | 2800 | 21 | +| 8 | 960 | 3760 | 24 | +| 9 | 1160 | 4920 | 27 | +| 10 | 1380 | 6300 | 30 | +| 11 | 1620 | 7920 | 33 | +| 12 | 1880 | 9800 | 36 | +| 13 | 2160 | 11960 | 39 | +| 14 | 2460 | 14420 | 42 | +| 15 | cap | cap | 42 | + +Design intent: + +- Level 2 should be reachable in the first short session. +- Level 3-4 should be reachable during a focused demo playthrough. +- Level 10+ should require repeated Gate or Garden investment, not one mission. +- Level 15 is a meaningful alpha body, not the default expectation. + +Data rule: + +- Store both `level` and `current_xp`. +- Derive next threshold from the table. +- Do not let client-submitted XP change level. + +--- + +## 6. XP Sources + +XP must come from validated gameplay events, not from client claims or LLM text. + +Recommended alpha XP sources: + +| Source | Typical Body XP | Rules | +| ---- | ----: | ---- | +| Garden training action | 30-80 | server-owned action, capped per short window | +| Gate objective progress | 80-220 | mission attempt must be valid | +| Gate extraction or partial success | 120-420 | tied to outcome report | +| Server-validated combat training hit | 5-20 | capped, no infinite dummy farming | +| Server-validated enemy defeat assist | 20-80 | requires Fusion or Nakama validation | +| Quest milestone | 150-350 | one-time per body or per account, depending on quest design | + +Do not grant body XP for: + +- opening UI panels +- raw chat messages +- LLM-generated suggestions +- repeated fallback dialogue +- local-only combat visuals +- client-side quest claims + +NPC dialogue may lead to a quest clue, and the quest clue may later contribute +to a validated quest milestone, but the text line itself is not XP. + +--- + +## 7. Derived Stat Recalculation + +After any level-up or body stat allocation, recompute derived stats on the +server-owned path. + +Alpha derived stat direction: + +```text +max_health = 60 + endurance * 5 + level * 6 + body_grade_bonus +max_energy = 20 + focus * 4 + dexterity * 1 + level * 3 +attack_power = weapon_base + primary_stat * 0.7 + level * 1.5 +defense_power = armor_base + endurance * 0.5 + level * 0.5 +dodge_rating = dexterity * 2 + focus + equipment_dodge +body_stability = endurance * 2 + focus + level + condition_modifier +``` + +Formula rules: + +- keep constants centralized +- round consistently on the server +- Unity may preview, but server results win +- equipment can add inputs, but cannot directly bypass stat requirements +- `luck` can bias capped rolls only, never mint rewards directly + +These formulas are alpha starting points, not final balance law. + +--- + +## 8. Inventory And Equipment Link + +Inventory and equipment requirements must read the same canonical stats. + +Examples: + +| Requirement Type | Example | +| ---- | ---- | +| stat requirement | `strength >= 8` to equip a heavy shield | +| role requirement | Sentinel or Scrap Warden body tag for heavy brace tools | +| sync requirement | `soul_body_sync >= 50` for advanced role skill | +| injury restriction | cannot use heavy weapon when arm injury blocks it | +| body anatomy restriction | hostile shell action requires compatible body tag | + +Equipment can contribute: + +- weapon base +- armor base +- shield profile +- tool action +- skill origin +- secondary stat modifier + +Equipment must not: + +- grant permanent body stat points +- write body XP directly +- bypass current body eligibility +- create reward, TIME, SECOND, or quest completion without server validation +- let LLM output invent stat bonuses + +--- + +## 9. Reinhabitation Rules + +On body death or retirement: + +| Layer | Alpha Default | +| ---- | ---- | +| current body level | lost with body | +| current body XP | lost with body | +| unspent body stat points | lost with body | +| allocated body stat points | archived with body record, not transferred | +| learned soul skill | survives only if explicitly recorded | +| body imprint skill | lost unless a future learning rule converts part of it | +| gear | follows inventory custody and death-loss rules | +| relationship/memory | server-owned records can survive as world memory | + +The outcome report should explain this in plain language: + +```text +Body Level lost with retired Frame. +Learned knowledge remains only where recorded. +``` + +Do not call this reincarnation XP, soul XP, or account XP in alpha. + +--- + +## 10. Implementation Packets + +### L1: Level And XP Table + +Issue: #275 + +Build: + +- Add a server-owned alpha XP table for levels 1-15. +- Store current body level and current body XP. +- Level up only through server-validated XP grants. +- Return next-level threshold and progress ratio to Unity. + +Evidence: + +- Backend test or script showing XP grants cross level thresholds correctly. +- Rejection test for client-supplied level or XP mutation. + +### L2: Body Stat Point Allocation + +Issue: #275 + +Build: + +- Grant 3 body stat points per body level. +- Track unspent points. +- Validate allocation across the eight canonical stats. +- Enforce hard cap 15 and max +5 above body base per stat. +- Keep legacy aliases read-only compatibility only. + +Evidence: + +- Test for valid allocation. +- Test for over-cap rejection. +- Test for canonical stat names. + +### L3: Derived Stat Recompute + +Issues: #275, #26 + +Build: + +- Centralize derived stat computation. +- Recompute after level-up, stat allocation, equipment change, injury change, + or body state refresh. +- Return derived stats to Unity as read-only presentation and combat inputs. + +Evidence: + +- Test fixtures for Sentinel, Courier, and Clinic body examples. +- Diffable output showing before and after allocation. + +### L4: Inventory Requirement Integration + +Issues: #275, #218 + +Build: + +- Make equipment requirements read canonical stats and body tags. +- Surface player-facing lock reasons. +- Ensure LLM and Unity cannot bypass requirement validation. + +Evidence: + +- Test for valid equip. +- Test for stat requirement failure. +- Test for missing body tag or injury restriction. + +### L5: UI And Smoke Handoff + +Issues: #275, #138, #218 + +Build: + +- Show Body Level, Body XP, unspent Body Points, and stat allocation UI in the + relevant Body Hall or roster surface. +- Show allocation result and lock reasons without raw backend field names. +- Smoke one level-up and one stat allocation in Play Mode after code lands. + +Evidence: + +- Screenshot or short capture of level progress, Body Points, allocation, and + derived stat refresh. + +--- + +## 11. Acceptance Criteria + +The level and core-stat system is alpha-ready when: + +- current body level and XP are server-owned +- level cap 15 is enforced +- XP table is data-driven and shared by backend and client presentation +- each level grants exactly 3 body stat points +- body stat points can be allocated only to the canonical eight stats +- stat cap 15 and max +5 above body base are enforced +- derived stats recompute after level, stat, equipment, injury, or body refresh +- inventory requirements use canonical stats and server validation +- body death does not transfer level, XP, or body stat points to the next body +- UI labels this as Body Level, Body XP, and Body Points +- Play Mode or backend evidence verifies one valid level-up, one invalid XP + mutation rejection, one valid stat allocation, and one over-cap rejection + +--- + +## 12. Cut Rules + +If implementation time is tight: + +- keep the XP table +- keep 3 body stat points per level +- keep allocation validation +- keep derived stat recompute for health, energy, attack, and defense +- cut normal respec +- cut advanced soul skill conversion +- cut full UI polish and show debug Body Hall first + +Do not cut: + +- server authority +- body-bound reset on death +- canonical stat names +- cap enforcement +- inventory requirement validation +