== Tutorial: progressive disclosure across first 3 combats ==

Three contextual tips fire one-at-a-time on the player’s first three combats. Each is a top-of-screen amber-accent banner (TutorialBanner) that slides in, holds for ~12 seconds (or until clicked), then slides out. Auto-wired via RuntimeInitializeOnLoadMethod so no scene config required.

Tips:

  1. COMBAT BASICS — first combat ever. Explains stance + distance.
  2. DEFENSE LAYERS — second combat. Explains shield vs armor vs DoT bypass.
  3. BUILD PATHS — third combat. Explains the path-commitment system.

Each tip is gated by its own PlayerPrefs key (tut_basics_seen, tut_defense_seen, tut_paths_seen) so they fire exactly once globally per player. TutorialManager.ResetAll() can be called from a future “Reset Tutorials” settings option to replay them.

Implementation:

  • TutorialBanner.cs: self-contained slide-in panel with title + body + dismiss X. Uses sortingOrder 700 (above story screens, boss hype screens, popups). DontDestroyOnLoad on its canvas so the banner survives mid-combat scene weirdness.
  • TutorialManager.cs: static class subscribed to CombatManager.OnCombatStart. Re-wires on every scene load so it picks up each new CombatManager instance.

== Damage breakdown on hover ==

When dragging a card over an enemy, a tooltip now shows the FULL damage math: SLASH vs HEAVY MECH BASE 7 +4 (FRONT STANCE) DISTANCE x1.5 (CLOSE) = 16 VULNERABLE x1.5 = 24 HITS x1 = 24 FINAL 24 Shield absorbs 8 · Armor absorbs 6 HP -10

Players can finally SEE why a card hit for X. Eliminates the “feels-rigged” interpretation when math is opaque.

Implementation:

  • DamagePreview.cs (new helper): static Build(card, target) returns rich-text breakdown string. Mirrors CombatManager’s actual formula (ApplyPlayerDistanceDamage + vulnerable + hits + shield/armor absorption). Color-coded rows: amber for distance, magenta for vulnerable, gold for final, etc. Pierce note when applicable.
  • CardUI.OnDrag: every drag frame, raycasts to find an EnemyUI under the cursor. If found, calls DamagePreview.Build and shows via FloatingTooltipUI. Tooltip auto-follows the cursor.
  • CardUI.OnEndDrag + early-return paths: hide the tooltip cleanly.

For non-damage cards or self-target cards, no tooltip appears.

Reuses existing FloatingTooltipUI which already handles cursor- follow positioning. Zero new tooltip systems.

Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]


Commit bce1215 by astafford8488.