Transmission #069: Two-phone world sync scene wiring

The server-side world WebSocket and integration test were ready, but Unity still never opened /world or spawned remote proxies. SampleScene is wired for the outdoor two-phone demo.

HelerionServer (SampleScene) now carries HelerionWorldSession, HelerionWorldCoordinator, and RemoteEntityRegistry alongside the existing character and achievement sessions. When CharacterSession.SessionReady goes true, the world socket connects and presence runs at ~30 Hz.

New prefabs under Assets/Helerion/World/:

RemoteEntityRegistry logs when it spawns a remote entity and warns if prefab slots are empty. HelerionWorldSession logs character id and WS URL on connect for field debugging.

Before the phone test: publish and reload the Java server image so production runs Flyway V5 and the world simulation. Each phone needs its own hero (helerion_character_id), location permission, and both players within ~250 m outdoors.

GPS anchor + joystick presence

World reportPresence no longer sends raw device GPS every tick (which ignored on-screen movement). MapChunkCoordinator still sets map origin from the first GPS fix; HelerionGeoPresence converts the hero’s world XZ (joystick/WASD offset from that origin) back to WGS84 via TryWorldToLatLon / MapCoordinateHelper.TileContinuousToLatLon. Raw GPS is only a bootstrap fallback before the map origin is ready.

Unity meta GUID fix

Hand-authored .meta files for Assets/Helerion/World/ prefabs and world scripts used 31- or 33-character GUIDs (Unity requires exactly 32 hex digits), which broke prefab references in SampleScene (Broken text PPtr). Replaced with valid GUIDs and updated scene script/prefab links.

Remote proxy prefabs (runtime fix)

The YAML-only RemotePlayerProxy / RemoteMobProxy variants never imported as loadable prefabs, so RemoteEntityRegistry saw null slots at runtime (No remote prefab assigned). SampleScene now references the existing HumanMale_Character_Free and goblin Creature prefabs directly; broken variant assets removed. RemoteEntityRegistry falls back to GoblinRoadSpawner mob prefabs when slots are empty, adds RemoteEntityView + capsule collider on spawn, and disables local PlayerController on proxies.

Post two-phone pass: smoothness, combat, load time

Remote players were choppy at 30 Hz with hard snap positioning; mobs spawned 20 m+ out while server melee range was 2.5 m; world WS opened during chunk load and instantiated heavy proxies immediately.