Icehouse
A walkable winter playground. Slice ice, throw the pieces into a pool, and leave your footprints outside.
Downloads 3.6 MB on demand
- WASD / Left-side drag
- Walk
- Mouse / Drag
- Look
- Click / Tap
- Swing sword
- E / Double tap
- Door or pick up/drop
- Right click / Long press
- Place portal pair
- Q
- Throw held object
- Space
- Jump
- Escape
- Pause
- Built
- Stack
- TypeScript, three.js, WebGL, Vite
How it works
A timber room opens onto a snowy courtyard, with a pool that responds to what you throw into it. The sword cuts convex ice into new, capped meshes that remain physical objects. Ice and wood float while stones sink; snow sprites deform with a damped spring when they land. Outside, footsteps permanently depress and shade the snow. A small hut contains a live doorway into a much larger room, using a translated camera view and matching traversal.
Notes
- First-person walking, jumping, swimming, mouse look, and touch controls share one playable scene
- Runtime convex mesh clipping produces reusable ice fragments with newly generated cut surfaces
- Pick up, drop or throw props; density-dependent buoyancy connects their motion to the pool
- Right-click two large wall surfaces to place a temporary portal pair; traversal preserves facing and consumes both portals
- Outward-opening entrance doors respond to E, with rotating collision and blocked-motion checks
- Splash crowns, reflective droplets, delayed rebound jets and secondary impacts connect the surface to the spray
- A damped height-field simulation propagates impact ripples across the water and reflects them off the basin edges
- Footprints depress the snow grid and leave detailed boot-tread imprints, so the path you took remains visible
- Local CC0 Poly Haven textures, a winter HDR sky, planar water reflections and shadowed indoor lighting add material detail and depth
- A virtual camera renders the pocket-room doorway; crossing transfers the player and carried object to the matching space
- Snow sprites use spring-driven deformation; prop contacts use a bounded approximation rather than a general rigid-body solver
