← Home

2026 · personal · private

PlanEatJJJ Studio · team of three

A mobile survival game where you grow by swallowing space junk up to planets: team of three, preparing a Google Play release

Role
Player, growth, form branching, save, backend, monetization (one of three)
Period
Apr 2026 – present
Status
Preparing a Google Play release (closed testing, September target)
Stack
Unity 6, C#, URP, UGS, Google Play Games

Context

A mobile game made by three people. One rule: smaller than you is food, bigger than you is death. You steer a cosmic creature with a single virtual joystick, eat, grow, see further and eat bigger things, while larger polluted bodies hunt you in the dark. Work started on April 23, 2026 and the team is running closed testing toward a September 20 Google Play release.

Roles: I (SJ) own the player, absorb/growth, form branching, save, backend and monetization; HJ owns camera, scenes and menus, lobby and background; WJ owns objects and spawning, threats, difficulty, traits and game feel.

What I built

  • Player and absorb/growth: Rigidbody movement, size comparison on contact and automatic absorption, growth by volume conservation (sum V = s³, cube root back). The scale punch is separate from growth so feedback survives even when the growth path changes. Six growth stages with automatic transitions, per-stage absorb filters and a zoom-out punch on transition.
  • Form branching: a fork mid-growth into suction (wide radius), condensed (strong pull) or drifter (fast). Data, controller and selection UI, with the view behind IFormSelectionView so HJ can swap the UI.
  • Input and save: a self-bootstrapping virtual joystick overlay, a single-file JSON save with an auto save/load binder.
  • Backend (UGS): anonymous login, cloud save (run save and meta progress under different keys so deleting the run on death never wipes permanent progress), leaderboards that accept only scores a verification script passed, with failures held for retry and rejections dropped. The principle: the game works fully offline when anything fails.
  • Google Play Games: anonymous accounts are linked to GPGS so the PlayerId survives, device-change recovery, native leaderboard UI with a fallback, gamer-tag sync.
  • Release work and monetization: Play Console setup, keystore passwords from environment variables, privacy policy and account-deletion pages on a public Pages repo, account deletion in-game, app icon and splash, a rewarded-ad revive button.

How the team works

  • Interface contracts first: absorption was split by agreeing IAbsorbable { float Size; void OnAbsorbed(GameObject) } up front: I own detection, judgement and growth, WJ owns the implementations and spawning.
  • Feature branch → PR → main, with scene-conflict rules written down in the first week.
  • Claude Code as a team tool: the repo’s CLAUDE.md requires syncing with teammates’ work before starting, recording to the backlog after, and writing design decisions with reasons and alternatives. Slash commands (/spec, /decide, /issue, /done, /sync) drive it; over 140 decisions are on record, and a new member gets the commands and codegraph hooks from one setup.ps1.
  • Minutes by bot: the Discord meeting bot I built records, transcribes and summarizes the weekly meeting into a separate repo.

Lessons

  • A backend that swallows failures quietly is right for a mobile game: offline, not signed in, GPGS missing are all no-ops, so the game starts first on any device.
  • Release is policy before code. The day we checked the closed-testing requirement (12 testers × 14 days) in the console set the release date.