Skip to content

Iso Farm Game Weekly Update: The Farm Is Becoming Playable

A build note on the current isometric farming prototype: Tiled maps, the farming loop, hotbar actions, real-time crop care, and the asset pipeline.

This week the farming game crossed an important line: it stopped feeling like a pile of systems and started feeling like a small playable place.

There is still a long way to go. The player is a marker, the world is a test map, and the economy is still mostly scaffolding. But the core loop now has a real shape: choose a thing, click the farm, walk there, wait through the action, and watch the world change.

Current iso-farm-game prototype showing the isometric farm grid, carrot plots, player marker, and hotbar.

Current local build. The important part is not the size of the world yet, but the fact that the loop is wired end to end.

The project is a React 19 shell around a Phaser 4 game scene. React owns the page UI, Phaser owns the world, and shared Zustand stores sit between them. That split is starting to pay off.

The biggest visible changes so far:

  • Isometric tile presentation is centralized instead of scattered through one-off math.
  • Farm maps now come from Tiled rather than hard-coded scene fixtures.
  • The hotbar has tools, seeds, fertilizer, plot kits, stack counts, and keyboard labels.
  • Plots can be placed, tilled, watered, fertilized, planted, harvested, and cleaned up.
  • Crop growth uses real timestamp semantics, even in the compressed local playtest route.
  • Plot hover UI tells the player what is happening in the soil instead of dumping debug state.
  • The repo now has PR quality checks, preview deploy plumbing, and project workflow docs.

That is the difference between a tech demo and the beginning of a game system.

The main interaction rule is simple:

  1. Pick a hotbar item or tool.
  2. Hover a valid target.
  3. Click.
  4. The player walks to the tile.
  5. A timed action runs.
  6. The farm mutates only when the action completes.

That matters because farming games live or die on physicality. A plot should not appear because a button toggled some invisible state. The player should feel the tiny ritual: move, work, wait, result.

Right now the resolver can route a click into these actions:

  • place a rough plot from a stackable plot kit
  • till rough soil with the pitchfork
  • plant carrot, potato, raspberry, or wheat seeds
  • water prepared or planted soil
  • apply fertilizer
  • harvest ripe crops
  • clean up spent or failed plots
  • move when no farm action applies

The click does not mutate the world immediately. It becomes a queued task. The queue handles walking, timing, item reservation, completion, refund-on-failure, and stale callback cleanup if the player interrupts the flow.

That sounds fussy, but it is exactly the fussy foundation the game needs before fences, machines, animals, decorations, or multi-step chores arrive.

One of the best structural improvements was moving the playable map into Tiled.

The active map is a 16 by 16 isometric tilemap with named layers for grid, ground, and authoring data. The grid layer gives the game coordinates and hit-testing. The ground layer displays the visual farm surface. The authoring layer holds things like player spawn, tutorial targets, and demo fixtures.

That means the game can now ask the map what it is, instead of rebuilding the same facts in code.

The tile set also carries semantic properties like:

  • plot.rough
  • plot.prepared
  • plot.watered
  • plot.spent
  • crop.growing
  • crop.ripe

So the farming system can say “this plot is watered” and resolve that through authored tile metadata, rather than hard-coding tile ids all over the runtime.

Runtime tile atlas for the current isometric farm ground, plot, and carrot lifecycle states.

Current runtime tile atlas. The art direction is moving from isolated generated tiles toward a consistent production sheet.

The early visual work was messy in the useful way. Individual generated tiles helped test direction: grassy slabs, rough dirt, tilled rows, watered soil, carrots, and broader cozy-farm composition studies.

The useful lesson was that single beautiful tiles are not enough. A farming game needs tiles that agree with each other:

  • same projection
  • same tile footprint
  • same side-wall depth
  • same lighting direction
  • similar grass density
  • readable state differences at gameplay zoom
  • enough texture to feel alive without making the grid noisy

The current atlas is not final art, but it is doing the job a prototype atlas should do. It lets the game test state readability: grass versus dirt, rough versus prepared, watered versus dry, growing versus ripe.

Cozy isometric farm concept art used as a broad mood and composition reference.

Concept direction for the larger mood: cozy, readable, warm, and farmable. The runtime is not trying to copy this one-to-one, but it helps point the atmosphere.

The game is not being designed as a paused single-session toy. It is aiming at a FarmVille-style rhythm where real time matters.

Current crop definitions already separate grow time from water tuning:

  • carrot: mid-length, thirsty, good for teaching care
  • raspberry: fast and attention-heavy
  • potato: long and steady
  • wheat: hardy and less dependent on water

The production-style values use real-world crop timers, while the local owner-test route compresses carrot growth so the full loop can be tested in minutes instead of hours.

That distinction is important. The system keeps epoch-millisecond semantics even when timing is compressed. So the code can be tested quickly without lying about the eventual persistence model.

Water and fertilizer are also becoming more interesting than simple meters:

  • water is plot-level soil state
  • empty prepared soil can be watered before planting
  • planted crops drain moisture over time
  • dry crops enter an at-risk wither countdown
  • fertilizer boosts active eligible growth
  • compost can be applied before planting and waits until a crop uses it

The design goal is care and planning, not punishment. Missing a day should not destroy the farm. But good care should matter.

UI is splitting into the right responsibilities

Section titled “UI is splitting into the right responsibilities”

The UI is starting to find its lanes.

Phaser owns the world-space things that move every frame: the player marker, tile highlights, action progress bar, and target indicators.

React owns interface surfaces: the hotbar, plot tag, tutorial dialogue, debug controls, and performance/debug panels.

The interesting bit is the bridge. Phaser publishes intrinsic game state, like a hovered plot’s water, crop lifecycle, and world anchor. React renders the inspection card from that state. The game does not store screen coordinates inside the farming model, and React does not become the source of truth for game state.

That separation is not glamorous, but it is what will keep the project editable as it grows.

A surprising amount of progress was not gameplay code. It was project hygiene.

The repo now has:

  • PR quality validation for tests, typecheck, lint, format, and build
  • preview deploy plumbing
  • a low-usage Codex workflow
  • architecture docs
  • project-agent guidance
  • a Tiled map contract
  • broader tests around farming, UI, pathfinding, stores, and action resolution

That stuff is easy to dismiss as scaffolding. But for a game this system-heavy, scaffolding is how you keep moving without re-breaking the same loop every week.

The next meaningful layer is a day system.

The domain already has pieces that want a farm calendar: water reset, regrow windows, daily chores, visitors, weather, and offline persistence. The next version needs a clear rule for when a farm day begins, how the scene learns that the day changed, and what systems respond.

After that, the likely next surfaces are:

  • harvest results UI
  • sell/use/save-seed decisions
  • almanac or crop journal
  • richer tile polish
  • animals as future fertilizer and care systems
  • more authored maps instead of one tutorial scene

This is still early. But the prototype has crossed the best kind of threshold: the systems are no longer just describing a farming game. They are starting to behave like one.