- PlayerPose: Icon (Sprite) + Title (string) UI properties
- PoseMenu: modal pause overlay building a radial menu from Icon Button
prefab instances; active pose disabled (hover ring marks it); click
applies pose via SetPoseIndex and closes
- OverviewMenu: pose button wiring with pause hand-off, Esc/Tab chain
extended; hotkeys C (toggle pose menu) and V (paint mode) mirroring
the buttons incl. identical gating
- PlayerPoseController: C cycle hotkey and NextPose() removed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The center re-probe could miss the still-touching climbed face and adopt
a hit on a different collider much farther out, flipping the wall normal
and letting the standoff servo drag the capsule across the pinch every
other frame. When the probed gap is well beyond the standoff and the
full-capsule span still holds a steep surface meaningfully closer, keep
that contact instead of defecting to the far hit.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- OverviewMenu: taunt button (manual ping + close, hider/seek-only), Tab triggers the Escape chain (TypingGuard-gated)
- GameModeManager: LocalPlayerIsHider helper, allow E-ping in free cam (Q/E no longer used for movement)
- FreeCamController: vertical movement only via Space/Ctrl
- Icons: Icon_taunt (wired), Icon_firstperson_paint (unwired, for later)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Scene edits wiring the new Icon Button prefab/icons into the Overview
menu (includes the usual re-save YAML reshuffle) plus TMP font SDF
atlas churn from the UI work.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New Match Results menu + button (user authoring), MatchResultScreen
_panelRoot reference; includes the usual re-save YAML reshuffle.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MatchResultScreen becomes a self-contained modal (IsOpen/Open/Close,
_panelRoot, pause handling); resolution auto-open moves there from the
session browser. OverviewMenu integrates it into the Esc chain and hides
the Match Results button until results exist (same pattern as the
role-scoped mode buttons).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Overview UI canvas active, OverviewMenu component wired to panel,
browser reference and mode buttons; includes YAML reshuffle from the
scene re-save (content verified unchanged).
- EditorSettings: known 1-line churn.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New OverviewMenu component: Esc toggles the pause overlay, buttons
switch modes via GameModeManager.TrySwitchTo<T>() and close the panel;
visibility follows the role-scoped mode set, active mode disabled.
- Esc in paint mode exits to camera mode instead (PlayerControlMode,
hunter falls back to FirstPersonMode) rather than opening the menu.
- Centralized all Esc handling in OverviewMenu (browser close included)
to avoid frame races; OnlineSessionBrowserUI gains IsOpen/Open/Close.
- GameModeManager: switchKey Tab-cycle removed, TrySwitchTo<T> added.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The Room export split/renamed to 'The Room Scene.asset' / 'The Room Audio.asset' under Assets/Scenes (old root-level export removed), scene references updated
- Default Steam Audio material: transmission raised (0.8/0.6/0.3) so walls dampen less aggressively
- EditorSettings: enter-play-mode options reset
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SteamAudioGeometry on Map root (exportAllChildren) + exported static
mesh asset so occlusion raycasts have scene geometry to hit.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New occlusion opt-in on SoundEffect: spatialized instances get a
SteamAudioSource with raycast occlusion + frequency-dependent
transmission (walls muffle instead of hard-mute)
- Replace SoundEffectDistanceRange asset indirection with an explicit
_3d bool (user refactor); rolloff/distance now left to defaults
- Hey.asset: occlusion enabled
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New Assets/Audio/ with Hey.asset (+ ogg samples), Sound Effect
Distance Range moved there; Main.unity wires Hey.asset to the
MatchManager radar ping; The Room AudioSource tweak and regenerated
Player.prefab GlobalObjectIdHash (editor churn).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MatchManager: new Radar Ping Sound property; MsgRadarPing now goes to
all clients (spawnBlips flag keeps blips hunter-only), sound plays 3D
at each pinged hider. Distance-based stagger (speed of sound + 35 ms
min gap) prevents phase cancellation when multiple hiders ping.
SoundEffect: new spatialize toggle (per asset, applied only to 3D
instances -> Steam Audio HRTF); removed unused fade field.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Official Unity package under Assets/Plugins/SteamAudio; enabled as
Spatializer + Ambisonic Decoder in the audio settings (HRTF: sounds
behind the listener are filtered/muffled directionally). Download
staging Tools/SteamAudio/ gitignored.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Particles kept playing at the last hit position when the cursor left the
mesh mid-stroke. New _stampLandedThisFrame flag: reset before each stamp
attempt, set only where the dab actually paints (after placement and
corner guard); no landed stamp -> StopPaintParticles immediately.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Enthält zwangsläufig auch den PaintHud-RectTransform-Churn (Prefab-Override-Anker/Größen) — Szenen-File nicht splitbar.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Cursor_Normal/Paint/Pipette: generierte Grafiken jetzt in Vollauflösung (766-829 px, Max Size im Importer steuert Anzeigegröße), Paint-Ring-Inneres freigestellt
- Neuer Cursor_Blank (transparent): wird während eines Strokes auf dem Mesh gesetzt statt Cursor.visible zu togglen (fixt Flicker-Kampf mit dem Orbit-Input)
- CursorController: Hotspots normalisiert (0-1, unabhängig von Import Max Size); Zustandskette Pipette > (Stroke ? Blank : Paint) > Normal; off-mesh während Stroke -> Normal
- MeshPainter: StrokeInProgress-Flag (Maustaste auf Paint-Pfad gehalten)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Scene file can't be split: also carries PaintHud anchor/size re-serialization
from the layout pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- CursorController: polls painter state in LateUpdate; paint cursor only
while the brush preview decal actually draws (MeshPainter.BrushPreviewVisible),
pipette while held/toggled, fallback to normal over UI (InputUtil.PointerOverUi)
- Auto ForceSoftware while Unity Recorder is recording (reflection into
editor-only assembly, 0.5s poll, editor-only) so the cursor is captured;
back to hardware cursor when recording stops
- 3 placeholder cursor PNGs (32x32, cursor import type) with per-cursor hotspots
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
IsGloballyEnabled() kill switch: Awake destroys the component at
runtime, OnEnable self-disables in the editor. Flip the constant to
re-enable.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Distanz-LOD am Renderer (Start/End/Min Shells, pro Kamera), Rendering Layer Mask wie beim MeshRenderer
- Cutout in der AlphaTest-Queue statt Transparent-Blend (Early-Z killt Overdraw), Shells tip-to-root submitted
- LightMode UniversalForwardOnly (Deferred+ hatte den Opaque-Pass sonst nicht gezeichnet)
- FurGBuffer-Pass (ComplexLit-Muster): HTrace WSGI sieht das Fell, kein Durchscheinen mehr
- Root-AO-Fix: Grading straehnen-relativ (gradeH) statt absoluter Shell-Hoehe -- schwarze Streifen weg
- Distanz-Aggregations-Fade wieder entfernt (auf Wunsch, Fern-Straehnen bleiben voll)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Transparent queue sorted fur draws per object, so overlapping fur
renderers swapped in front of each other frame to frame. FurForward
now writes depth; new Depth Sort Clip tunable discards low-coverage
fragments before they write depth (avoids halo punch-through).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The mixer's start snapshot overwrites exposed params set before the
first frame, so the BeforeSceneLoad SetFloat was discarded. Re-apply
the saved volume after one frame (Awaitable.NextFrameAsync).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Generated _normal/_height maps for all frame photo textures (DeepBump)
- The Room: picture frame pass; Lobby/Test Map scene passes
- AudioMixer: unmute group
- New layer 8 "BlockCam" (TagManager) + Main Camera culling mask includes it
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Shader (PictureTessellationLit):
- Lighting parity with URP Lit: lightmaps, shadowmask/mixed, APV, DBuffer
decals, vertex additional lights, rendering layers, fragment fog
- UniversalGBuffer pass (with tessellation + graded albedo) so HTrace WSGI
composes correct GI instead of a cyan veil over pictures
- Skip GPU tessellation entirely when strength/displacement is 0
- Inspector ranges matched to builder (-3..3 bump, -10..10 tessellation)
Builder:
- Frame Thickness & Padding are now absolute meters (size-independent)
instead of fractions of the picture size
- Tooltip updates for the new default/range semantics
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Generated _normal/_height PNGs for the P10027xx photo set, wired height maps
and strength values on scene frames, Frame Picture material switched to the
new PictureTessellationLit shader.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Optional Picture Normal Map + Height Map fields on the per-frame material
instance (_BumpMap/_NORMALMAP keyword, _HeightMap; height doubles as
occlusion map when the material has none)
- Sliders: Normal Map Strength, Occlusion Strength, Tessellation Strength
(0-3, default 1), Occlusion Contrast (-1-3), Brightness (0-3)
- Picture Crop left/right/top/bottom via UV window remap; aspect follows
the cropped pixel dimensions
- Picture Subdivisions (1-64): picture surface as triangle grid for
tessellation displacement
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hull/domain tessellation with height-map displacement, occlusion map with
strength/contrast controls, height-weighted brightness multiplier, standard
PBR (base/normal/metallic/smoothness). ComplexLit pattern (UniversalForwardOnly)
so custom shading survives Deferred+; ShadowCaster/DepthOnly/DepthNormalsOnly
all run through the same displacement domain.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Right-click a texture > Process > Generate Normal + Height Map (DeepBump):
runs the DeepBump ML CLI (color_to_normals, then normals_to_height) in the
background with progress display. Sources larger than 2048px are downscaled
via Pillow/Lanczos first (quadratic tile cost, avoids grid seams). Normal
imports as Normal Map, height as linear (sRGB off). Tool lives outside
Assets under Tools/DeepBump (gitignored: cloned repo + local venv).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Enable mipmaps on the existing photo texture imports and add the new
IMG_20250412 photo set; scene pass in The Room.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The renderer wiring had flipped it to Base; as a Base camera with
Don't Clear it rendered fullscreen into an uninitialized target
(RenderGraph debug yellow). Overlay restores stack compositing.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Classic hit path now captures a statue record like conversion does;
rename the statue infrastructure (CaptureStatue/SpawnStatues/
DespawnStatues/_statueRecords) since it is no longer conversion-only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A pointer-up after a drag no longer counts as a click (dragging flag +
press-to-release distance within the existing tolerance), so drag ->
release -> click cannot trigger a reset anymore. PaintHud prefab:
pointer tolerance 4 px, HalfLambert default back to 0.5.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Also serializes wallStepOffset on Player prefab and includes SliderDoubleClickReset wiring in Main (mixed scene edits).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>