Resident style guide & handoff

THE
RESIDENTS

Tiny procedural beings who keep the town running.
Monochrome by default. Color when selected, active, or interacting.

Color is attention. A resident lights up when you select it, when it speaks, when it acts, or when something happens to it.

passive → active

01 The state system monochrome by default, color on attention.

passive Init
Passive
⤳
active Init
Attention
⤳
returned passive
Returns

Attention triggers

  • Selected by the user
  • Speaking, or being spoken to
  • Performing an action
  • Involved in an event
  • Carrying new information

Return to passive

2–5 seconds after the trigger ends. Configurable. The world is calm by default — color is for moments, not background.

02 The founding cast twenty residents · each one does one job.

Lifecycle & identity how a thing begins, names itself, and is found again. 5 residents
Init
01/20
__init__
opens the town.
Init passive
passive
Init active
active
Repr
02/20
__repr__
describes what it sees.
Repr passive
passive
Repr active
active
Iter
03/20
__iter__
walks the same loop.
Iter passive
passive
Iter active
active
Hash
04/20
__hash__
identifies and files.
Hash passive
passive
Hash active
active
Len
05/20
__len__
counts what's there.
Len passive
passive
Len active
active
Containers & access how things are put away, fetched, and called for. 5 residents
Getitem
06/20
__getitem__
fetches by name.
Getitem passive
passive
Getitem active
active
Setitem
07/20
__setitem__
puts things in their place.
Setitem passive
passive
Setitem active
active
Contains
08/20
__contains__
checks if it's here.
Contains passive
passive
Contains active
active
Call
09/20
__call__
makes it happen.
Call passive
passive
Call active
active
Bool
10/20
__bool__
yes or no — no maybe.
Bool passive
passive
Bool active
active
Arithmetic the math crew. They combine, separate, and scale. 5 residents
Add
11/20
__add__
brings two together.
Add passive
passive
Add active
active
Sub
12/20
__sub__
takes one from another.
Sub passive
passive
Sub active
active
Mul
13/20
__mul__
scales things up.
Mul passive
passive
Mul active
active
Div
14/20
__truediv__
splits things evenly.
Div passive
passive
Div active
active
Mod
15/20
__mod__
keeps the leftover.
Mod passive
passive
Mod active
active
Higher-order the bots who do the same thing to many things. 5 residents
Prop
16/20
__prop__
looks after each property.
Prop passive
passive
Prop active
active
Sort
17/20
__sort__
arranges in order.
Sort passive
passive
Sort active
active
Filter
18/20
__filter__
keeps only what passes.
Filter passive
passive
Filter active
active
Map
19/20
__map__
touches each one the same way.
Map passive
passive
Map active
active
Reduce
20/20
__reduce__
folds many into one.
Reduce passive
passive
Reduce active
active

03 Anatomy & construction built from modular layers.

Style overview

Hand-drawn ink & paper. Closed shapes, soft outlines, slight wobble. Tiny, readable, full of subtle character. Big head, small body for readability.

cute first, geometric never.

Line weight

Heavy — outline
Medium — detail
Light — texture

Stacking order

Back to front, every resident is the same:

  1. Shadow (soft oval, slight offset)
  2. Legs
  3. Torso
  4. Arms
  5. Props (left & right)
  6. Head
  7. Hat / hair

all parts are swappable.

Proportions

Simple rounded geometry: 45% head, 30% torso, 25% legs. Big eyes, small mouths. Closed shapes only — never an open path. Corners are always rounded.

head 45% · torso 30% · legs 25%

silhouette must read at 32px.

04 Palette & texture warm, muted, never loud.

Palette — for the color state

Warm, muted, desaturated tones. Used for clothing, hats, and props — never for skin (skin stays in the warm beige range).

#e9d4b3
#c89568
#6f8a4a
#4f6b8a
#6e4f7a
#9c3a3a
#b08a3a

SKIN  ·  #e6c7a3 warm beige only

Texture

Paper grain and tiny ink specks live on the page, not on the sprite. The character art has light hatching for shadow only — never decorative. Soft edges, no harsh lines.

specks belong to the paper.

Readability rules

  • Silhouette must be clear at 32px
  • One accent color per resident
  • Details stay large and bold
  • Test at every zoom level

05 Implementation the engine consumes art. it does not draw it.

Asset structure

assets/residents/
  <id>/
    passive/    front · back · left · right
    active/     walk-a · walk-b · speaking · sleeping

Every resident has the same eight poses in both passive and active states. The engine swaps states by swapping asset files.

Engine rules

  • Renders PNG sprites only
  • Never draws characters from primitives
  • Selection swaps passive → active art
  • Missing asset = placeholder, not substitute
  • Pivot is feet-center
  • Nearest-neighbor scaling for small sizes

What lives in code

Placement on the world map. State (passive / active / selected / alert). Pose (front / walk / speak / sleep). Idle bob and prop sway. Path overlays. Speech bubble offset (top-right).

art is fixed. behavior is alive.

06 The approved guide source of truth.

APPROVED · v3
Dunderville resident style guide — the approved illustrated sheet with all twenty residents shown in passive and active states
resident_style_guide_APPROVED.png · 1024×1536 if the asset and the guide disagree — the guide wins.