Visual Direction & Concept↔Prototype Deltas¶
Source: PROJECT_CONTEXT.md §7, §8, §9;
config.jscamera,ui,map(tilt,wallH). Status: ⚠️ Partial — visual identity is implemented; this doc is largely a "watch these on the Unity port" tracker.
What it is¶
The game's visual identity and a register of the intentional/pending divergences between the original concept doc and the current web prototype. A designer reads this before proposing visual changes or scoping the Unity port.
How it works¶
Visual identity (implemented):
- 2.5D render, not flat top-down. A slight isometric tilt: X maps straight across, Y is squashed by TILT to fake the downward viewing angle (iso/unproject in game.js). Walls are faux-height cubes (WALL_H). It is not a 45° iso rotation.
- Camera fit for phones. Small screens zoom out proportionally so a phone still shows useful tactical context (camera.fitRef, camera.fitMin).
- Cute-fantasy "Thornwood" theme (committed). Woods, wardens, goblins, a forest-brute boss — chosen over the concept's military/semi-real default as a fresh, differentiating angle. The prototype ships only this theme.
- Render-only attack body-language (setLean/attackLeanOffset, a stand-in for sprite anim): the body token leans toward a melee target (ui.attackLean) and kicks back from a ranged shot (ui.shootRecoil) for ui.leanTime, while feet + shadow stay planted. Applies to the player and enemies, so a fight reads as a back-and-forth.
Tunables¶
| Key | Default | Meaning |
|---|---|---|
map.tilt |
0.67 |
2.5D vertical squash (Y) — reload |
map.wallH |
30 |
Wall cube height (px) — reload |
camera.fitRef |
880 |
Viewport width (px) below which the camera starts zooming out |
camera.fitMin |
0.9 |
Floor on the small-screen zoom-out factor (the phone knob) |
ui.attackLean |
7 |
Px the body leans toward the target on a melee strike |
ui.shootRecoil |
3 |
Px the body kicks away from the target on a ranged shot |
ui.leanTime |
0.13 |
Duration (s) of the lean/recoil pop |
Design intent¶
The 2.5D tilt + faux-height walls give cover and line-of-sight real spatial weight (you read what's behind a wall), serving Route over reflexes and the fog/vision-cone stealth loop. The lean/recoil body-language makes the melee↔ranged stance handoff legible without sprite animation, reinforcing readable, tactical combat. The cute-fantasy theme is the deliberate market-differentiation bet.
Open questions / deltas¶
Pending divergences to track for the Unity port (PROJECT_CONTEXT §9):
1. Camera is 2.5D, not flat top-down. Concept names pure top-down (Hunter Assassin style); prototype renders with the tilt (map.tilt, faux-height walls). Decide whether Unity keeps the 2.5D look or reverts to flat top-down. (Note: §9 prose cites TILT 0.58; the live config.js value is map.tilt = 0.67 — reconcile.)
2. "Crit Damage" (concept) vs crit (code). Concept lists Crit Damage as a core stat; prototype tracks a single crit value. Reconcile naming/semantics on the port.
3. Single-player simulated MP vs networked PvP. "Other players" are AI bots matched to your Power (Arc-style), not networked humans. Consistent with the concept's framing, but real PvP is out of scope for the prototype.
4. Settings collapsed to one. Concept lists military/semi-real as default with cute-fantasy experimental; prototype ships only the cute-fantasy theme.
5. Added systems not in the concept doc — carry forward unless deliberately cut: stamina (sprint + dodge-roll with i-frames), regenerating shield/overshield, noise propagation, portal-guarding AI, and the storm-cataclysm finale. These flesh out the "tension + readability" pillars.