Hole Game

v0.5-cityblocks

Procedural city blocks · Buildings, cars, and props are procedurally built from primitives at scene-build time. Each block has a multi-story building (random height, pastel body, blue windows) at center; vehicles park on streets; cones and signs at block corners. Pivoted away from Kenney CC0 packs after URP material conversion proved a rabbit hole.

Build notes

Why the pivot to procedural primitives

  • First attempt was Kenney's CC0 city packs (~300 stylized FBX meshes). Three problems killed it: Kenney's Car Kit uses vertex colors baked into the FBX, the city packs use a tiny variation-a.png colormap atlas, and Unity 6's URP auto-import preserves neither — every imported mesh rendered as plain white.
  • Fixing this cleanly needs a custom URP Shader Graph that samples vertex colors. That's a 1–2 hour real shader task, and squarely M4 polish itself.
  • Plus the suburban-house meshes are sized for *Kenney's* 10–15 unit yards, not our 8 unit blocks; forcing them in made buildings look cramped or off-axis. Cohesion across packs was poor (suburban houses next to skyscrapers reads as a glitch).
  • Procedural primitives are on-brand for a hole game (Hole.io, Crowd City, Donut County all use similar minimalism), eliminate material conversion entirely, and give us full control over scale.

BuildBuilding

  • Body cube (random height 3–7.5, footprint 4.4–5.8) with random pastel color from a curated palette.
  • Roof slab slightly larger than the body, in a darker derived color.
  • Window grid stamped on front + back faces: floors = height / 1.4, columns = width / 1.4, each window a small blue cube embedded 0.06 units into the face.
  • Single BoxCollider sized to the combined body+roof bounds. The hole's absorption logic only cares about XZ overlap with the building's footprint, so any internal structure is invisible to gameplay.

BuildCar

  • Body cube (length 2.4–2.9, width 1.1–1.25, height 0.55) with a saturated random body color.
  • Cabin cube on top, 55% of body length, narrower, blue-tinted.
  • Four black wheel cubes at the corners — slightly elongated to look like tires.
  • Static — vehicles don't move (yet). Adding traffic AI is an entire milestone.

BuildProp

  • Tier-specific. ExtraTiny renders as a stacked-cube traffic cone (orange body + dark base + white stripe).
  • Tiny renders as a single random-color box (trash bin, planter, generic ground prop).
  • Small renders as a yellow-sign-on-a-pole (street sign or light).
  • All props get a single BoxCollider sized to combined bounds.

Layout per block

  • 1 building at the center (with a small XZ jitter so it doesn't feel mechanical).
  • 4 props at the corners — alternating Tiny/Small for variety.
  • Plus 28 vehicles distributed across the city's 10 streets (5 N–S + 5 E–W), randomly along each lane.
  • Total 4 (seed cubes near origin) + 16 (buildings) + 64 (props) + 28 (vehicles) ≈ 112 absorbables.