Web and mobile game · farming and fishing
Conuco
Grow crops, go fishing, and restore a Caribbean town. A game for web and mobile, written in Spanish first.
-
Game core, no renderer
- src/core
- src/state
- src/systems
- src/data
14 systems Farming, fishing, cooking, weather, festivals and more. Data files define 12 crops, 9 fish, 8 recipes and 6 characters.Saved random state Saving the mulberry32 state preserves the random sequence when the game reloads.126 Vitest tests exercise the game core without rendering a frame.
- Reads the state src
/render The only folder that imports PixiJS. It draws the world from the game state, so the art can change without touching the rules.
Saving and loading
- Autosave Saves when the app moves to the background.
- src
/save Moves the previous save to the backup slot, then writes the new save with its version./save.ts - src
/save Loading uses the backup if the main save is corrupt. Older saves migrate one version at a time, with defaults from a fresh game for new fields./migrations.ts
- Role
- Timeline
- Stack
By the numbers
126
tests in 24 files, all on the game core
194
keys per language, English and Spanish
41
Dominican terms kept the same in both languages
The idea
Conuco is a farming and fishing game set in a Caribbean coastal pueblo, built first in Spanish. Plant, fish, cook and help the town recover. Keep the colmado open and bring back festivals as a resort developer looks to buy the coast.
What I built
PixiJS draws the world, with all imports contained in src/render. This keeps game systems, including the end-of-day logic, testable in Vitest without a display. Content is defined as data: 12 crops, 9 fish, 8 recipes, 6 characters, 4 town projects, 2 festivals and 12 achievements.
The game saves its mulberry32 generator state, so reloading continues the same random sequence. Saves are versioned and migrate forward one step at a time, filling new fields with defaults. A backup slot can recover a corrupt main save. The app saves automatically when it moves to the background.
The hard parts
-
Testing rules independently of rendering
The renderer will evolve with the art. Keeping rules and state separate lets tests exercise the entire game core without drawing a frame.
-
Migrating saved games
New crops, festivals and story steps add save fields. Each version has a migration, and missing fields take defaults from a fresh game. A test covers recovery from a corrupt save using the backup slot.
-
Dominican terms in both languages
Conuco, colmado and sancocho keep their names in English and Spanish. A shared glossary preserves 41 Dominican terms across both languages, and each language file contains the same 194 keys.
What’s next
Tune the economy with a headless simulation and add two more festivals.
Shared approaches
Make runs reproducible with seeded randomness
SWARMGEDDON, Invicto, Flawless, The Veil · El Velo, Coherente, This site
Keep rules separate from the interface
Keep English and Spanish in sync
Protect saved progress
Coherente, SWARMGEDDON, El Corre Corre, Invicto