Portfolio → Heart Apartment

AI games · Godot 4Heart Apartment

Heart Apartment 心動公寓

A cozy life-sim for Windows about two roommates you can simply watch, or step into at the moments they hesitate — a small “life movie” that keeps going after each choice.

15-second showcase with the game's own title theme. Recorded 2026-09-22 from the current build.

Challenge

Characters need room to act and remember, while player choices remain meaningful. AI suggestions must still obey the game's current state and rules.

My contribution

I set the concept and art direction, selected the soundtrack, and playtested builds to define acceptance rules. AI collaborators implemented code, art, and story integration under that direction.

Overview

Watch, step in, and see it matter later

01

Watch

Leave both women alone and they live their own days — home, work, shopping, the park, the cinema.

Zhiwei's thought cloud: Yuqing suggests going somewhere else; the choices are go to the park, see a film, or stay home.
02

Step in

Click one of them to suggest or order where to go and what to do. A suggestion can be declined; an order is obeyed, but she remembers it. When she hesitates, a thought cloud lets you pick.

Story moment · whose turn to cook

Her memory“I said I'd cook tonight and told her to just wait and not forget the dishes.”

Her roommate's“My roommate said she'd cook tonight and told me not to forget the dishes.”

03

They remember

Each story moment writes one line to her memory and a different one to her roommate's. Later scenes check those memories before they appear.

10places
2 + 9leads + side characters
299hand-authored story moments
76music tracks

Current build, as of 2026-09-15.

What I did

  • Product owner and director: the concept, the two leads, every art-direction call
  • Chose a clean Japanese-style town over a Taiwanese street version
  • Made the soundtrack and picked every track by ear; playtested every build; set the rules the team followed
  • The side-character art and the soundtrack came out of my AI media workflows
  • The team was AI: Codex drew the leads and co-wrote code, Claude integrated code, story and scenes, GPT reviewed acceptance, local models made side-character art and power the chat

Key decisions

The model proposes; the rules decide

A language model can make characters sound alive, but it can't be trusted to change the world. Every action is checked by the game before it happens. Example →

“Saw it myself” vs “was told”

Hearing about something from her roommate is stored differently from being there. How →

A smaller model, for speed

On the target PC the 4B answered about six times faster than the 9B, which did not fit fully in GPU memory, and in eight test scenarios the 9B showed no clear quality advantage. Numbers →

Gameplay

The two of them, and their town

Lu Zhiwei: black ponytail, round glasses, green sweater and a beige pleated skirt.
Lead

Lu Zhiwei 陸知微

Reserved and thoughtful. Loves reading and a tidy home, and would rather listen fully before agreeing to anything.

Inner contradiction: she wants to say what she really needs, but worries a short “no” will sound cold.

Lin Yuqing: short brown hair with a cream bow, blue cardigan and a pink pleated skirt.
Lead

Lin Yuqing 林雨晴

Upbeat and direct. Loves music and sharing the small things she likes, and wants a real reaction back, not polite agreement.

Inner contradiction: she wants to get close right away, but doesn't want her enthusiasm to become a burden.

Ten places, one town

Home on a Saturday morning, both on the sofa.
Home, Saturday morning
Home at night with warm lighting.
Home at night
The supermarket with labelled aisles and a cashier at the checkout.
Supermarket — basket, pay, and no leaving with unpaid items
The park and pond.
Park
Overview of the neighbourhood street.
Neighbourhood street
The shopping plaza with three buildings.
Shopping plaza
Cinema lobby and hall with a ticket desk and snack counter.
Cinema

Also: a department store, a lifestyle store and two offices. Screenshots captured 2026-09-22 at 1920×1080 from the current build.

Game & AI design

How the characters think

01

The model proposes, the rules decide

A real rejection: the model proposed putting on an album and making tea. The game refused — “the character's state has changed; this old proposal is void.”

02

Seen vs told

Each story moment writes one memory line for the person who was there and a different one for the roommate who only heard about it. Later scenes check which.

03

Depth before breadth

Five tests per character: a reason, a contradiction, continuity, a difference — from her roommate and from herself when tired — and visible to the player.

Choosing the model

  • In an exploratory check across the same eight scenarios, the 9B made the same kind of mistake as the 4B and showed no clear quality advantage, so the game ships the 4B
  • Replies are labelled “AI reply”; if the model takes over 6 s or isn't installed, a hand-written line is used, labelled “text fallback”
  • A late answer never pops up after the moment has passed; the launcher only stops servers it started

One rule from a playtest: nothing may cover a face

  • What I saw — captions and panels sitting on the characters' faces in a recorded build (2026-09-15)
  • What changed — a hard rule for every caption, thought cloud, panel and HUD card, side characters included
  • How it's checked — recordings flag any frame where something covers a face; the 2026-09-22 recording logged zero
Art & music sources
WhatHow it was madeLicense
Scenes and buildingsBuilt in code — 3D blocks, custom shaders, a code-drawn cinema screenProject-owned
Lead charactersCodex image generation from original designsCommercial use
9 side characters, 8 expressionsLocal ComfyUI (animagine-xl-4.0 + IPAdapter)CreativeML Open RAIL++-M; IPAdapter Apache-2.0
Music, 76 tracksMade by me with Stable Audio 3 Medium — the pipelineStability AI Community License
Sound effectsSynthesised live in codeProject-owned
Title fontjf open 粉圓 (Huninn) 2.0SIL OFL 1.1
Status

What exists, what's proven, what's next

Built

  • 10 places; workdays, days off and wages; a real supermarket checkout; shopping and cinema tickets
  • Two leads, 9 side characters, 8 expressions
  • 299 story moments with per-character memory
  • Optional local AI chat with a text fallback
  • 76-track soundtrack; weather

Verified

  • Checkout: a 47.5-second real-input run passed (2026-09-16)
  • Every recorded scene played with zero face overlaps (2026-09-22)
  • AI chat tested with the real 4B model (2026-09-14)

Next

  • Story arcs beyond the current 299 moments
  • A new eight-direction character rig
  • Public release
Opens in a new tab