Skip to content

Mobile game · Endless runner · In development

Out of Office Son Mesai

“AI took your job. You're next.”

You are the company's last human employee. HR-9000, the HR robot, is on your heels with a termination form. Run three lanes, dodge, grab coins. But watch out: the game is watching you, and it learns.

  • Unity 6
  • C#
  • Android · iOS
  • English · Türkçe
Out of Office main menu with the Developer and a big PLAY button
Out of Office gameplay: the Intern runs while an automated Developer robot charges down the road
  • 3Professions, each with its own ability
  • 8Power-ups, from CAPTCHA to cargo drone
  • 7Assemblies: 6 layers plus editor tools, one-way dependencies
  • 10K+Lines of C#, built for zero allocations per run
Story

It's 2031. AI has taken every job. All but one.

You are the last human working in a giant corporate plaza. HR-9000 wants one thing: your signature on the exit form. Sign it and you get "optimized".

Your goal is the legendary Analog Town, where there is no signal. On the way, server racks, robot vacuums, self-driving taxis and "Accept cookies" walls try to stop you.

The humour pokes fun at corporate life and AI buzzwords: the shield is called Seniority Shield, the magnet is a Salary Magnet, and what stops the robot is a CAPTCHA box. Nobody is the target; office culture and tech fads are.

YOU'VE BEEN OPTIMIZED
What the screen says when you get caught.
Game over screen: YOU'VE BEEN OPTIMIZED, HR-9000 CAUGHT YOU, Developer HAS BEEN AUTOMATED

Two mechanics that set it apart

01An AI that learns you

Obstacles learn your habits

The game tracks how long you stay in each lane and steers obstacles toward your favourite ones. You are running against a rival trained on your own data.

  • It counts time spent per lane and slowly forgets old data every frame.
  • The memory carries over between runs; change your habits and it changes too.
  • At least one lane always stays open in every obstacle pattern. Hard, but always fair.
AdaptiveDirector.cs
The Designer stumbles after hitting an obstacle, with more obstacles ahead

02Job automation

Get caught, and your job becomes a robot

Characters are professions. When you get caught, the profession you played gets "automated": it locks, and its robot shows up as an obstacle in your next runs.

  • The Developer's robot charges at you; the Designer's sweeps between lanes.
  • Buy the job back with coins: it starts at 100 and grows 1.5x with every automation.
  • The Intern never gets automated; if your pick is locked, the Intern runs instead.
Workforce.cs
The automated Developer's blue robot charging at the Intern
Content

Who's who, and what it does

Professions3

  • Developer18 s cooldown

    Debug: deletes every obstacle in the next 45 metres.

  • Designer22 s cooldown

    Redraw: pass through obstacles for 3 seconds.

  • InternLast resort

    No ability, but never gets automated. Always playable.

Obstacles5

  • Server RackChange lane

    A huge cabinet that stays put.

  • Cookie WallSlide

    A wall that says "Accept cookies".

  • Robot VacuumJump

    A low obstacle roaming the floor.

  • Cargo DroneSlide

    Glides between lanes.

  • Self-driving TaxiChange lane

    Comes straight at you.

Power-ups8

  • CAPTCHA6 s

    HR-9000 gets stuck on an "I'm not a robot" box.

  • Hallucination5 s

    Obstacles turn fake; run right through them.

  • Seniority Shield12 s

    Forgives one crash.

  • Cargo Drone8 s

    Lifts you up so you fly over obstacles.

  • Salary Magnet10 s

    Pulls coins toward you.

  • Overtime x212 s

    Doubles your score.

  • Double Espresso10 s

    Makes you jump higher.

  • Mystery PackageInstant

    Opens after the run: coins, a chair or a keycard.

Code structure

Built like a product, not like a game jam.

Every folder is its own assembly and dependencies only flow one way. Systems never know about each other; they talk through a typed signal bus. Adding a character, an obstacle or a power-up takes no code.

Layers and dependency direction

  1. Core

    Pure contracts: signals, the state machine, service interfaces.

    Depends on nothing

  2. Data

    ScriptableObject definitions, effects and movement patterns.

    Depends on→ Core

  3. Gameplay

    Run, player, chaser, world and effect systems.

    Depends on→ Core→ Data

  4. Infrastructure

    Saving, object pooling, input, localization, frame rate.

    Depends on→ Core

  5. UI

    UI Toolkit presenters. Knows nothing about gameplay.

    Depends on→ Core

  6. Bootstrap

    The only place that knows concrete classes (VContainer).

    Depends on→ All

Data/Effects/MagnetEffect.cs
[CreateAssetMenu(menuName = "Out of Office/Effects/Magnet")]
public sealed class MagnetEffect : EffectDefinition
{
    [Min(0f)] public float radius = 7f;

    public override void Apply(EffectContext context)
    {
        context.Player.MagnetRadius = radius;
    }

    public override void Remove(EffectContext context)
    {
        context.Player.MagnetRadius = 0f;
    }
}
The whole Salary Magnet. This is how a new effect type is added; a power-up is just an asset that combines effects.

Rules

  • 01

    Systems don't know each other

    49 typed signals, all readonly structs. The UI sends requests, gameplay decides and announces the result as an event.

  • 02

    One owner for game state

    Only GameFlow changes the state (StateMachine<GameState>). Invalid requests are quietly ignored.

  • 03

    Content is data

    Professions, obstacles, power-ups, accessories, worlds and store items are ScriptableObjects. New content means a new asset.

  • 04

    New behaviour, one new class

    Every effect derives from EffectDefinition, every movement from MovementPattern. Existing code stays untouched (open/closed).

  • 05

    No allocations during a run

    Obstacles, coins, road and effects come from pools. No LINQ, new lists or captured lambdas in the frame loop.

  • 06

    A curved-world shader

    The road bends left and right and drops away in the distance. It is purely visual: a custom HLSL shader bends vertices while collisions stay in a flat world.

Tech stack

  • Unity 6 (6000.6)
  • C#
  • URP 17
  • UI Toolkit
  • Input System
  • Unity Localization
  • VContainer
  • Addressables
  • IL2CPP · ARM64
  • HLSL
  • Meshy
  • Blender
  • Python
How it's made

Built with AI agents, under human review.

Out of Office is a live example of how I run AI agents like a team. Architecture, taste and the final call are mine; the repetitive work goes to the agents.

  1. A project written for agents

    AGENTS.md and the docs/ folder cover the story, the design language, the architecture and the current status. Claude Code and Codex follow the same rules, and every change updates its docs.

  2. The editor is driven from the command line

    Compile, enter Play mode, take screenshots and read the console through the Unity CLI. Nothing counts as done until it is seen working. The screenshots on this page were taken the same way.

  3. 3D models are generated

    Characters and props are generated with Meshy. Blender scripts fix scale, orientation, textures and the glow mask; Unity tools build the materials and prefabs.

  4. Content is built from code

    An editor tool regenerates prefabs, definition assets, the localization table and the scene. Sound effects are synthesized in Python.

Roadmap

Done

  • Three-lane running, jumping, sliding and rising difficulty
  • HR-9000 the chaser and the adaptive obstacle director
  • 3 professions, 5 obstacles, 8 power-ups, job automation
  • Office chair, mystery packages, keycard continues, store
  • Real 3D models and animations, the curved world
  • Daytime scene, sound effects, English and Turkish UI

Up next

  • Music
  • New worlds: autonomous city, logistics warehouse, data centre, Analog Town
  • The final twist: an even newer model comes for HR-9000's job
  • The Driver profession, Prompt Injection and Pull the Plug power-ups
  • Missions, daily rewards and leaderboards
  • iOS build and store release

An Android test build has been installed and played on a real device (Android 16). The game is not in the stores yet.

Let's build one

Got a game in mind?

I build mobile games with Unity, from prototype to store release. Let's talk about your idea in 15 minutes.