Hitonami — Crowd Walking Game
人波 (Hitonami, “human wave”) — an endless runner where you navigate Japan’s crowds without bumping into anyone. Stations, shopping arcades, festival grounds, temple approaches — anywhere people flow.
Core Concept
Based on the real phenomenon of pedestrian flow in Japan: everyone unconsciously scans trajectories ~20 meters ahead and adjusts. Most people cooperate. Some don’t. And sometimes your route changes mid-stride and you have to cut across traffic. This happens everywhere — station concourses, covered shopping streets, festival crowds, park paths during hanami.
The game turns this into a one-finger, portrait-mode endless runner in the vein of Subway Surfers or Temple Run — procedural, no fixed levels, play until you crash.
Gameplay Loop
- Character auto-walks forward at a base speed that increases over time (Temple Run-style difficulty ramp).
- Crowd flows around you — most pedestrians avoid you, but some are distracted or unpredictable.
- Dodge, weave, thread gaps. Collisions are angle-dependent (see below). Score = distance + flow bonuses.
Collision System — Angle Matters
Not all bumps are equal. Impact severity depends on the collision angle:
- Frontal collision (head-on, ~0°–30° off center) → game over. You walked straight into someone. No recovery.
- Glancing bump (side-scrape, ~30°–90° off center) → stumble. Brief slow-down, flow multiplier resets, and your controls become sluggish and drifty for ~1.5 seconds. You can recover — but barely.
- Stumble + any second bump → game over. While stumbling, your character is hard to steer, making recovery a tense mini-challenge. Threading through a crowd while fighting impaired controls is the “oh shit” moment.
This mirrors real crowd physics — a shoulder-brush is awkward but survivable, a face-to-face collision is a full stop. It also rewards skillful angled movement: if you’re going to clip someone, clip them at an angle.
Flow Scoring
- Near-miss bonus: threading between two people gives a score pop and multiplier bump. The Burnout “near miss” dopamine hit.
- Combo chains: consecutive near-misses stack the multiplier.
- Speed streaks: maintaining high flow for X seconds triggers a brief visual reward (character glows, crowd parts slightly for 2 seconds as a breathing window).
Route Changes — the Signature Mechanic
Your character follows phone navigation (small direction arrow HUD at the top, styled like a minimal Google Maps strip: ”→ Exit 7 | 230m”).
Periodically, a notification slides down — “Exit 7 closed. Rerouting to Exit 3 ←” — and the arrow swings. Now you have to cut across the crowd flow to realign. This is the high-tension moment:
- Before reroute: moving with the crowd (easier).
- After reroute: cutting across the flow (harder) until you merge into the new lane.
The phone notification is diegetic — everyone does stare at their phone and suddenly change direction in stations. It justifies the mechanic thematically.
Controls — Invisible Anchor + Input Vector
No joystick. No visible UI. The screen is the controller. One finger does everything.
Input Model
- Anchor: touch anywhere on the screen → that point becomes your anchor.
- Input vector: thumb position relative to anchor defines a direction vector. This is NOT a position mapping — the thumb tells the character where to go, not where to be. The character reacts with its own movement physics (acceleration, momentum, steering curve).
- Exponential falloff: the first few mm of thumb movement are responsive; pushing further from anchor gets progressively harder. Prevents accidental max inputs and makes fine control easy.
Axes
- Up/down axis = speed. Thumb up from anchor → character accelerates. Thumb down → character decelerates (minimum slow-walk speed, never fully stops). The character drifts slightly up/down on screen as a visual reflection of speed, but this is a consequence of movement, not a direct position mapping.
- Left/right axis = steering. Thumb left/right from anchor → character starts curving in that direction with momentum. Camera shifts to compensate so the character doesn’t drift off-screen. Again, the character moves as a result of steering forces, not thumb teleportation.
- Diagonal input works naturally — thumb up-left = accelerate while curving left.
Speed ↔ Steering Coupling
Lateral agility scales with forward speed. At slow speed, left/right steering is also slow — you can’t sidestep quickly while crawling. To dodge sharply, you need to be moving fast. This mirrors real walking physics (you can’t juke sideways from a standstill) and prevents turtling — crawling at minimum speed is safe from frontal collisions but leaves you unable to react laterally when someone walks into your path.
Visual Feedback
The character has an invisible bounding circle limiting how far it can drift from its default screen center. The character’s on-screen position reflects its current movement state (faster = slightly higher, steering left = slightly left), but always within this circle. The circle is a constraint on the output, not the input.
Release / Re-anchor
- Release: character gradually decelerates back to base speed, steering straightens, drifts back toward screen center.
- Re-touch: new anchor is set wherever the thumb lands. Brief drift-back during the lift is the cost of re-anchoring — needs to be fast enough to not feel punitive.
Stumble Interaction
During a stumble, the character’s responsiveness to the input vector is dampened — same input, slower/driftier reaction. Combined with the speed-steering coupling (stumble slows you down → lateral agility drops), recovery becomes a tense challenge without needing a separate control mode.
Character Types (NPCs)
Pedestrians aren’t generic — they have distinct types with different behaviors, each recognizable at a glance:
| Type | Behavior | Visual |
|---|---|---|
| おじさん (Ojisan) | Walks confidently, won’t dodge you — you dodge him | Middle-aged salary man, briefcase |
| おばあちゃん (Grandma) | Very slow, blocks the path | Small, hunched, shopping bag |
| Tourist | Keeps walking in a straight line, oblivious, won’t adapt | Camera, backpack, looking up |
| Overly Friendly Person | Gives you the right of way — but if you also yield → awkward dance → collision | Waving, smiling |
| Phone Zombie | Erratic trajectory, eyes glued to screen | Head down, phone glow |
| Rush Hour Salary Man | Sprinting, fast and aggressive trajectory | Running pose, tie flying |
| Group of School Kids | Move as a slow wide cluster, hard to pass | Uniforms, clustered together |
The comedy comes from recognizing these archetypes. Each type forces a different micro-decision.
Stereotype-breaking: character personalities apply most of the time, but not always. Sometimes the grandma is fast. Sometimes the tourist dodges perfectly. Sometimes the overly friendly person just walks through you. Just like real life — stereotypes are heuristics, not guarantees. This prevents the player from reducing NPCs to deterministic patterns and keeps every encounter a read-and-react moment.
Extras (Pickups)
Japan-themed, funny, feel good to pick up, and make the game easier:
- おにぎり (Onigiri) — brief shield/invincibility. You’re snacking, unbothered.
- お守り (Omamori) — temple charm that protects from your next collision. One free pass.
- 傘 (Kasa / Umbrella) — people give you extra space for a few seconds (wider personal bubble).
- 駅弁 (Ekiben / Station Bento) — brief slow-motion, everything goes bullet-time. Pick your line carefully.
- 招き猫 (Maneki-neko) — lucky cat, bonus points gravitate toward you for a few seconds.
- 新幹線キップ (Shinkansen Ticket) — brief speed burst where you’re untouchable. Power fantasy moment.
Art & Presentation
- Old-school 2D pixel art, pure top-down, 32×32 native grid. No perspective distortion, no rotation, no 3D. Reference range:
- Floor: Pokémon Fire Red / Emerald — flat top-down, minimal detail, frame-switching walk cycles (2–4 frames per direction).
- Ceiling: modern GBA-inspired pixel art (Japanese farming sims, island survival games) — same flat top-down characters, but richer environment tilesets with atmospheric detail (cherry blossoms, seasonal lighting, detailed floor tiles).
- Hitonami sits somewhere in this range. Characters stay simple and flat (no rotation, no perspective, sprite-switch animation only). Environments can have more pixel detail per tileset since each stage has its own visual identity.
- Small characters — much smaller than Subway Surfers or Temple Run. The player character is one person in a crowd, not a hero filling the screen. The camera shows a wide field with many pedestrians visible at once — the crowd is the visual subject, not any individual. Each NPC type is readable at small scale through color and silhouette alone (hat shape, bag, uniform color).
- Portrait mode, native mobile feel.
- Visually clean — the crowd is the complexity, the art should not compete with it. The pixel art style keeps production scope manageable (sprite sheets, not skeletal animation) and fits the cute/charming tone.
Asset Pipeline
Primary Source: GuttyKreum Japan Collection (~$150)
The GuttyKreum Complete Japan Collection Bundle is the foundation. 32×32 pixel art, purpose-built for Japanese settings. Relevant packs from the bundle:
Environment tilesets (3 launch environments):
- Osaka City + Dotonbori City → Osaka streets / shōtengai environment (1,038+ tiles of dense urban shopping arcade)
- Kanagawa → coastal/suburban environment
- Temples and Shrines Vol. 1 & 2 → shrine approach environment (torii gates, lanterns, festival grounds)
Indoor tilesets (for building interiors):
- Onsen, Bakery, School, Bar, Office, Konbini interior packs → indoor level segments where the player enters a building and navigates crowds inside before exiting back outdoors
Characters:
- JRPG Characters Pack ($8.99 in bundle) — 20 animated 32×32 sprites with 8-frame walk cycles in 4 directions + character template for variations
- Characters Vol. 1 — stylized archetypes (sumo wrestler, idol, salaryman, yakuza, etc.)
- Other character sprites from the bundle’s various packs
Other useful bundle packs:
- Train Station + Train Interiors/Exteriors — station environment tiles, transition segments
- Japanese City — general urban tiles
Supplementary Generation: PixelLab + GPT Images + Manual
For punctual fixes, NPC variations, and small-scale asset needs not covered by the bundle:
- PixelLab (Aseprite plugin, ~$12–24/mo) — generate NPC variations using GuttyKreum sprites as style reference. Wang-tile generation for terrain transitions. 4-direction rotation from one input sprite. Best at 32×32 (matches our grid).
- ChatGPT Images 2.0 (gpt-image-2) — concept art, shop signs, posters, 2D illustration backgrounds. NOT for final sprites (produces “mixels” at small sizes). Good for concepting props and environment details.
- Manual Aseprite cleanup — every AI-generated asset gets a human editing pass. Fix faces, align silhouettes, normalize to the shared palette. Needed for both style consistency and copyright protection (purely AI-generated assets are not copyrightable).
Workflow
- Pull base tiles/sprites from GuttyKreum packs.
- Generate variations with PixelLab where needed (crowd volume NPCs, props).
- Concept odd pieces with GPT Images, then recreate/clean in Aseprite.
- All shipped assets must have meaningful human editing — document the editing process.
Environments
Each environment is backed by a specific GuttyKreum asset pack and has its own crowd physics, layout rules, and indoor sub-levels. Three environments at launch, expandable later using additional packs from the bundle.
Launch Environments (3)
| Environment | Asset pack | Crowd character | Unlock |
|---|---|---|---|
| 大阪 (Osaka Streets) | Osaka City + Dotonbori City | Dense shōtengai arcade, shop-front bottlenecks, slow browsers, bidirectional flow | Start |
| 神奈川 (Kanagawa) | Kanagawa | Coastal suburban streets, calmer flow, wider paths but surprise crossings | Score X in Osaka |
| 神社 (Shrine Approach) | Temples and Shrines Vol. 1 & 2 | Narrow torii-gate corridors, tourist flow with sudden photo-stops, festival crowd density | Score X in Kanagawa |
Indoor Levels
During a run, the player can enter buildings — a temple, a konbini, a bar, an office. This opens an indoor level segment using the bundle’s interior tilesets (Onsen, Bakery, School, Bar, Office, Konbini). The player navigates indoor crowds (tighter spaces, different NPC mix) and eventually exits back to the outdoor environment.
Indoor segments work as mid-run variety breaks:
- Triggered by a reroute (“Shortcut through the konbini →”) or by walking into a building entrance.
- Indoor crowds have their own rules (konbini = tight aisles + shelf obstacles, temple = slow reverent visitors, bar = erratic drunk NPCs).
- Exiting returns you to the outdoor environment, possibly at a different point in the procedural stream.
Future Environments (post-launch)
Additional environments can be built from other packs already in the Japan Collection bundle:
- Train Station + Train Interiors/Exteriors → station concourse + platform environment
- Japanese City → general urban district
- Dark Tokyo → neon nightlife district variant
- School → school hallway bonus stage
Each environment has its own procedural generation parameters:
- Crowd density and flow patterns
- Corridor/path width and shape
- Obstacle types (pillars, stalls, benches, torii gates, shelves)
- Environment-specific NPC mixes
- Reroute frequency and style
- Indoor segment frequency and type
Within a run, difficulty still ramps over time (auto-acceleration, increasing density). The environment determines the flavor of that difficulty.
Procedural Generation — Wave Function Collapse
Each environment generates infinite terrain using Wave Function Collapse (WFC) over hand-curated tile vocabularies from the GuttyKreum packs. WFC is the proven approach for tile-based procedural generation (used by Bad North, Caves of Qud, Townscaper).
How it works
- Hand-author 5–10 sample chunks per environment in the engine’s tile editor using GuttyKreum tilesets. These define what valid tile adjacencies look like (e.g., “shrine path tile can connect to torii gate tile”).
- Tag every tile with environment + connector metadata — biome constraints prevent cross-environment mixing (no konbini shelves spawning on a shrine path).
- Rolling-window generation — WFC generates the next chunk of tiles just ahead of the player; old chunks despawn behind. Backtracking ensures no broken/impossible cells.
- Transitions between outdoor and indoor segments use specific marker tiles (building entrances, doorways).
- NPCs and pickups spawn on a separate layer using Poisson-disk distribution + environment-biome lookup.
Environment-specific transitions
- Osaka streets: alley intersections, wider plazas, shōtengai canopy openings
- Kanagawa: crosswalks, park entrances, coastal path turns
- Shrine approach: torii gate sequences, stone stairways, festival ground clearings
- Indoor segments: doorway entry/exit, room transitions (hallway → main room → exit)
Every ~500m, a brief transition gives a visual refresh and a momentary breather.
Implementation note
Generate the tile vocabulary offline using asset packs + AI cleanup pipeline. WFC runs procedurally at runtime. Do NOT AI-generate tiles at runtime — adds latency, cost, and IP fragility. If WFC levels feel “samey” after 5 minutes of play, inject hand-authored set-piece chunks at fixed intervals (e.g., a festival tunnel, a train rushing past) as scripted moments.
Progression
Environment Unlocks (main axis)
Reach a target score in one environment to unlock the next. Osaka → Kanagawa → Shrine Approach, with more environments added post-launch from the same asset bundle. Each new environment is a visible goal on a Japan travel map. Once unlocked, environments are freely replayable — pick any stage from the map.
Stamp Rally (missions)
スタンプラリー — collect stamps by completing challenges. 3 active stamps at a time:
- “Thread 10 near-misses in one run”
- “Survive 3 reroutes without stumbling”
- “Glancing-bump an ojisan and recover”
- “Reach 500m in Shibuya without touching anyone”
Stamps fill a visual stamp book (browsable, each with a cute illustration). Completing stamp sets earns IC card balance (currency) and contributes toward environment unlocks.
Omiyage Collection (achievements)
Each environment has 3–5 regional omiyage that unlock at milestones. Tokyo Banana, takoyaki keychain, momiji manju, shiroi koibito. Purely cosmetic trophies in a collection screen. Completionist bait.
Playable Characters
Unlock different player characters as you progress. Each is a Japanese archetype with subtle stat differences:
- 高校生 (high schooler) — default, balanced
- OL (office lady) — slightly narrower hitbox
- サラリーマン (salary man) — slightly faster base speed
- おばあちゃん (grandma) — slower but tighter steering curve
- 外国人 (tourist) — wider FOV (sees further ahead)
Cosmetic skins within each character type (summer uniform, matsuri yukata, etc.) are the deeper collectible layer.
IC Card Balance (currency)
In-game currency styled as IC card (Suica/ICOCA) balance. Earned through runs. Spend by “tapping” — with the satisfying beep sound. Used for character unlocks and cosmetics.
Sound Design
Environment-specific ambience is a core part of the experience:
Launch environments:
- Osaka Streets — shopkeeper chatter, sizzling takoyaki, arcade machine bleeps, pachislot noise, bicycle bells
- Kanagawa — coastal breeze, quieter foot traffic, distant train crossings, vending machine hum
- Shrine Approach — cicadas, gravel footsteps, temple bells, festival taiko drums when crowd density spikes
Indoor segments:
- Konbini — door chime, convenience store muzak, register beeps
- Temple — hushed reverence, wooden floor creaks, incense atmosphere
- Bar — muffled chatter, clinking glasses, enka music
Future environments would get their own soundscapes (station jingles, crossing melodies, rural wind, etc.).
Monetization
None for now: completely free.
Tech Stack
- Engine: Godot 4 — free (MIT license), text-first architecture (
.gdscripts,.tscnscenes,.tresresources are all human-readable), best-in-class 2D pixel art support, iOS + Android export, small binary size. Chosen specifically because all project files are text-editable by Claude Code — no binary blobs or GUI-only workflows. - Language: GDScript — Godot’s native scripting language. Lightweight, Python-like syntax, tight engine integration.
- Tilemap: Godot TileMap with autotile — for environment rendering, pixel-perfect grid alignment, and WFC tile placement.
- Procedural generation: AlexeyBond/godot-constraint-solving — Godot Asset Library WFC plugin with TileMapLayer support, backtracking, and multithreading.
- Sprite animation: AnimatedSprite2D — frame-switching walk cycles from sprite sheets (GuttyKreum 32×32 format).
- Art editor: Aseprite ($19.99) — sprite cleanup, palette management, animation editing. Hub for PixelLab and Retro Diffusion plugins.
- Tilemap authoring: Tiled (free) — for hand-authored WFC sample chunks, re-imported to Godot.
- AI generation: PixelLab (Aseprite plugin, ~20 one-time) — NPC variations, tile transitions, supplementary props.
- Target platforms: iOS + Android (portrait mode).
Open Questions
- Exact steering feel — anchor-drag sensitivity, steering curve sharpness. Needs prototyping.
- Exact score thresholds for environment unlocks — should feel achievable but not trivial.
References
- Subway Surfers — endless runner structure, one-hit death, revive mechanic
- Temple Run — auto-acceleration, swipe controls, procedural difficulty
- Crossy Road — isometric camera, cute art, short sessions
- Alto’s Adventure — invisible touch controls, flow-state scoring
- Burnout (series) — near-miss bonus system
Lived-experience source
- 2026-05-20-Small social joys - elevator door and crowd surfing — the user describes “crowd surfing — walking through big commuter crowds with everyone flowing perfectly” as one of their daily small pleasures. That sensation is exactly the affective target of this game’s flow-scoring + cooperative-pedestrian model; the design isn’t extrapolating, it’s translating a felt experience the user is having right now in Osaka.
Siblings under the same pattern
- Typhoon Cleanup Crew - Story Idea — same take a Japan-everyday observation, build a small artifact pattern in a different medium (story instead of game). Hitonami extracts crowd-flow into an endless runner; Typhoon Cleanup extracts post-typhoon civic-cleanup into a story entry.