Reordered/updated the HTrace AO profile reference, MetallicIndirectFallback 1 -> 0 and DebugSceneMismatch 0 -> 1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Added SkyboxEnvironmentUpdater to the scene and switched Environment Reflections to Custom with the generated SkyboxReflection cubemap; unassigned the borrowed Supercyan forest LightingData asset (m_LightingDataAsset -> 0) and lowered ambient intensity to 0.75. Gold material metallic 1 -> 0.9 to soften the reflection look.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New [ExecuteAlways] component that renders the skybox (or an optional override material) into a custom reflection cubemap and refreshes DynamicGI so smooth/metallic materials reflect the sky without a baked LightingData asset. Uses a deferred apply plus a synchronous warm-render so the ambient probe resolves after domain reload; runs the reflection capture as a stripped CameraType.Reflection to avoid the URP MIP-bind error. Exposes reflection intensity (0..4) and optional ambient override.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Refreshed brush atlases (Brushes.psb + hard/soft/square PNGs), new DiscordChaos material + texture, and PaintHudPanel slider range/value tweaks.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New Paintman-Wall animation and Pose_Wall asset (authored via the UMotion project) added to the Player's pose list. Player MeshPainter textureSize 1024->512.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Additional ProBuilder mesh work in The Room plus updated ProBuilder shape/select editor settings (Plane shape defaults).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
RunSeekPhase fired the interval ping from an accumulating countdown that discarded each cycle's frame overshoot and drifted seconds late over a match, while the HUD ping countdown is anchored absolutely to _seekStartTime. Fire on absolute interval boundaries (n*interval from _seekStartTime) instead, sharing the HUD's anchor so the on-screen timer hits 0:00 the same moment the sweep fires. A missed boundary is skipped, never bursted.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the resolution gate in LoadPaintByName/ReadMapPng. A slot saved at any size is now bilinearly resampled per map to the current avatar's textureSize (new ResampleBilinear/Bilerp helpers, running on the stored bytes with no gamma conversion to match downstream consumption), so any painting loads onto any avatar regardless of the size it was saved at.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hideDuration 90->120, seekDuration 300->240; radar ping interval and lifetime adjustments plus blip fade defaults.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bundle Microsoft.CodeAnalysis (C#) plus its dependencies under
Assets/Plugins/Roslyn for source-generator / analyzer support.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
FurShell.mat: remove the now-orphaned _FurScaleInfluence serialization.
Player.prefab: _xrayFurStrength tuned to ~0 (fur X-ray glow off).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the _FurScaleInfluence blend (fur stays a constant world length at
any avatar size, as tuned to influence 0) and scale the gravity curvature
droop by the avatar world scale (_FurObjScale) instead, so the bend tracks
the player: hider 0.5 => smaller droop, hunter 1.5 => bigger droop.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds com.unity.multiplayer.playmode 2.0.2 (manifest + lock) for local multi-client testing. Serializes the package's generated PlayMode.meta and VirtualProjectsConfig.json.
Co-Authored-By: Claude <noreply@anthropic.com>
Material now stores the shader's new _FurObjScale/_FurScaleInfluence and
X-ray glow properties (template defaults; FurShellRenderer remains the
single source of truth and overrides them live from the painter).
Co-Authored-By: Claude <noreply@anthropic.com>
The fur is drawn from a CPU-baked unit-scale mesh whose instance matrix
carries the avatar's world scale, so the extrusion scaled fully 1:1 with
the player (hider 0.5 / hunter 1.5). That read as too-short fur on the
small hider and too-long on the big hunter, and the curvature droop was
sized off the raw unity_ObjectToWorld which doesn't carry the per-instance
scale in the RenderMeshInstanced path.
- FurShellRenderer pushes the avatar's lossyScale (_FurObjScale) plus a new
Fur Scale Influence (0..1, default 0.5) that blends the fur SIZE between
fully proportional (1) and a constant world length (0). The shader
pre-divides the object-space displacement so the net world length follows
effScale; curl droop and wind use the same effScale, keeping the curl
SHAPE invariant across avatar sizes and influence settings.
- The body's see-through X-ray reveal (forward half) is mirrored onto the
visible fur so strands glow WITH the reveal instead of hiding it under
opaque fur. FurShellRenderer pulls the live colour/pulse/flash from the
sibling MeshPainter (new getters), in phase with the body. A new X-Ray
Fur Strength (default 0.2) tames the per-shell accumulation, since the
body writes the glow once (opaque) but the fur stacks N transparent
shells that each composite it.
Co-Authored-By: Claude <noreply@anthropic.com>
- Manual hider ping on "E": server-authoritative RequestManualPing gated to
Seek + living hider; shared EmitRadarPings path so interval and manual pings
produce identical blips. Ping key read client-side in GameModeManager, role-
gated and excluded in FreeCam (E is fly-up there).
- Radar refreshes an existing blip for the same transform target instead of
duplicating it (lifetime resets to the configured value) via RadarTarget.Refresh.
- Blips fade in/out independently of the disc fade: per-blip MoveTowards factor
multiplied on top of the radar fade, refresh-safe, with separate in/out speeds.
- Resolution countdown waits for conversion statues to load: generalized the
match-start loading barrier (RunReadinessBarrier over _barrierTargets, hold
phase carried in MsgBeginLoad) and run it a second time over statue IDs before
starting the real resolveDuration. Only holds for Conversion with real statues.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Set GameModeManager.playersCollide to off in Main.unity, retune the
NetworkSimulator preset reference, and pick up the ConversionStatue
prefab's regenerated GlobalObjectIdHash.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a per-machine "Players Collide" switch on GameModeManager: a
self-healing reconciler routes the local capsule through other avatars'
body colliders via Physics.IgnoreCollision when disabled, re-asserting
every frame while off to survive the late-created runtime MeshCollider,
conversion respawns and teleport resets. Expose Active/ActiveVersion/
BodyCollider on NetworkPlayerSetup for the reconciler.
Give MatchStatue the same Active registry + BodyCollider pattern so the
frozen conversion statues obey the same toggle (they carry their own
paint MeshCollider but are deliberately not NetworkPlayerSetup avatars).
Also drive the statue's steady X-ray reveal in Resolution, matching an
un-found hider.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
In Conversion mode, capture a snapshot (pose index + paint) of each hider
at conversion time and materialize a frozen, painted statue at the found
spot for the resolution phase, independent of the now-hunter avatar.
- MatchStatue.cs (new): server-init pose/paint, network-driven pose then
freeze, reveal-gate (hidden until paint applied), kills inherited sim.
- PlayerPaintSync: _isStatue (sibling auto-detect) suppresses the three
auto-behaviours so MatchStatue drives the paint flow deterministically.
- MatchManager: statuePrefab; capture in ConvertToHunter; spawn on
resolution enter; despawn + record clear on EndMatch/teardown/start.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Server-authoritative skip flag consumed by each phase wait loop
(loading barrier, hide/resolution wait, seek phase), routed via
authority like RequestEndMatch. Exposed as a [ContextMenu] and
public method; single transition per trigger, cleared on teardown.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Main.unity: matchLoadTimeout 30, hitRevealDelay 0.35 -> 0.2, sim
preset reselect (Mobile 2G), and remove the redundant AudioListener
on Radar Camera (silences the "2 audio listeners in scene" warning).
- PlayerCharacterController: GravityEnabled toggle. When off, hold
vertical velocity at zero and skip steep-slope sliding so a frozen
avatar neither falls nor drifts; true is byte-for-byte the old path.
- GameModeManager: during Loading, additionally disable gravity and
hide the local body (SkinnedMesh + fur shell), re-asserted each frame
to catch the mid-load lobby->match respawn. Restored (body shown,
gravity on) before ActiveMode.Enter() on release to Hide.
- MatchManager: enter Loading *before* SwapScenes so still-bound lobby
avatars are frozen before their floor unloads. Fixes the player
falling into the void during the lobby->map scene swap.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Gate the Lobby-to-world transition on a new MatchSubPhase.Loading before
Hide: movement stays frozen and the Hide countdown does not start until
every connected client has spawned all match avatars and applied their
paintings.
- MatchManager: Loading phase; matchLoadTimeout tunable; Match_BeginLoad
broadcasts the respawned avatar NetworkObjectIds (+ generation tag),
Match_Ready collects per-client ACKs (host self-checks locally); barrier
coroutine in RunMatchPhases before Hide; disconnect/teardown cleanup.
- GameModeManager: freeze local player (movement/paint/tab) during Loading,
restored via ActiveMode.Enter() on transition to Hide (no camera jump).
- NetworkPlayerSetup: treat Loading like Hide in ComputeVisible so a
fast-loading client cannot reveal a hider early.
- MatchHud: "Loading" phase label.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Radar: nur sichtbar bei >=1 Target, in First-Person und in der Seek-Phase
(Overlay-Kamera getoggelt, Blip-Skripte laufen weiter). Singleton fuer
Server-Zugriff. GameModeManager: Kamera + Tab-Moduswechsel erst ab
gebundenem Lobby-Player (Inert-Zustand ohne Player, Orbit-Input geparkt).
MatchManager: Server tickt im Seek alle radarPingInterval (30s) und
broadcastet noch nicht gefundene Hider (NetworkObjectId + radarPingLifetime
3s) nur an Hunter-Clients; jeder Hunter loest lokal auf und spawnt Blips.
Ping-Loop in die Seek-Coroutine gefaltet (EndMatch stoppt ihn mit).
MatchHud: Ping-Countdown lokal aus Seek-Start + Kadenz berechnet, Format
m:ss (0:30..0:01), ausserhalb Seek / bei deaktivierten Pings 0:00.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Radar.Spawn(transform, lifetime) clones the "Target Template", names it
"Target" and attaches a RadarTarget that self-destructs after lifetime.
RadarTarget aims each frame toward camera->target (full 3D LookRotation),
drives the point renderer's _BaseColor from a forward-bearing gradient
(ahead/side/behind depth cue lost in the flat disc projection) via a
MaterialPropertyBlock, and scales the point renderer transform by
camera->target distance.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
HsvColorPicker: read the color swatch from the SV handle's child
("Handle/Swatch") instead of a standalone root child; drop the dead
leftover-alpha bar and root-swatch fallback handling.
PaintHudPanel.prefab: restructure the picker so the swatch lives under
the SV handle and wire _swatch accordingly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
X-ray hit flash: drive a dedicated flash mode instead of the normal
reveal - pulse off (steady), intensity boost (xrayFlashBoost, default 3x),
snap-on, then restore authored color/pulse exactly. Fixes the weak/dark
flicker where the 0.35s hit window often caught only the pulse's near-off
plateau.
Spawn/respawn freeze: pool GPU RenderTextures across despawn->respawn
(TeardownGpu recycles, CreateRT pops) so a hider->hunter conversion no
longer churns ~70MB of RT alloc/free on every observer; reuse staging
textures to cut per-map GC. Defer the blank base-seed on reveal-gated
remote replicas (DeferInitialSeed) - the real pixels arrive with the
snapshot apply anyway; gate the FurShellRenderer alongside the body so a
deferred replica never shows the pooled RT's stale fur; EnsureBackendSeeded
+ TryCaptureSnapshot guard against capture-before-reseed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Laser.shader + HunterLaserBeam: additive HDR beam, fade in/out over opacity
and thickness, code-driven LineRenderer, tunable emission multiplier.
- FirstPersonMode: TryShoot computes world endpoint, fires beam with lateral
muzzle offset (right) so it isn't dead-center from hunter view.
- NetworkPlayerSetup: shot relay RPCs (owner->server->all) + hit-flash RPC
(server->all), flash OR-branch in ComputeXRay.
- MatchManager: hit reveal broadcasts X-ray flash first, delays hider removal
by hitRevealDelay so the glow is visible before the body vanishes.
- MeshPainter reseed: in-place fast path avoids full GPU backend teardown on
snapshot apply (no ~70MB RT churn), fixes spawn/paint-load hitch.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Installs the Multiplayer Tools package to simulate poor network
conditions (delay/jitter/drop) in the editor/dev builds, replacing the
Debug Simulator inspector fields removed in UnityTransport 2.x.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Hide remote avatars until this client has actually applied a snapshot
reaching the owner-published baseline cutoff, preventing the default
grey/white material from flashing before a player's painting has loaded.
- PlayerPaintSync: owner-authoritative _publishedCutoff NetworkVariable,
receiver tracks _appliedCutoff; explicit blank publish for never-painted
avatars so they still reveal.
- NetworkPlayerSetup: cache _paintSync, hide body renderers on spawn, gate
UpdateVisibility on PaintRevealReady.
- MeshPainter.Pick: fur toggle now follows pickedHeight (own paint-mesh
only), matching the Occlusion/Height pipette behaviour.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Avatar-Setup und HUD-Autoring fuer das Fur-Feature (Code liegt in 1b783a3):
- Player.prefab: FurShellRenderer am Player verdrahtet, furLength-Default 0.5
- PaintHudPanel.prefab: Slider_FurLength + Fur-Panel-Widgets
- The Room.unity: Fur-Testaufbau
- FurShell_Test.mat: Test-Material fuer den Shell-Shader
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>