Module 30

Farming / Life Sim

Tend a farm, befriend a village, and never have enough hours in the day | Pixel Valley Farm

"A great farming sim makes Tuesday feel different from Saturday and spring feel different from winter — time is not a resource to spend but a season to live through."

Week 1: History & Design Theory

The Origin

In 1996, Yasuhiro Wada created Harvest Moon because he missed the rural countryside after moving to Tokyo. The game was a quiet rebellion against the prevailing design philosophy that games needed conflict, enemies, and win states. Instead, Harvest Moon gave the player a neglected farm and a single year to restore it. You tilled soil, planted seeds, watered crops, and waited. Days passed. Seasons changed. The town had people with names, schedules, and opinions about you. Harvest Moon proved that the loop of planting, waiting, and harvesting was deeply satisfying because it mirrored the rhythms of real life compressed into something manageable.

How the Genre Evolved

Harvest Moon (1996) — Established every pillar the genre still rests on: a calendar with seasons, crops that grow over real in-game days, an energy system limiting daily actions, NPCs with relationship meters, and a farm that visibly transforms through sustained effort. Progression was measured in days and seasons, not levels and experience points.

Animal Crossing (2001) — Nintendo took the farming sim concept and removed the farm. Animal Crossing ran on the console's real-time clock. Seasons changed with real months. Villagers remembered if you had not visited in weeks. It proved that the "life" half of "life sim" could carry an entire game without the "farming" half.

Stardew Valley (2016) — Eric "ConcernedApe" Barone, working alone for four years, synthesized everything the genre had learned. Stardew Valley kept Harvest Moon's farming loop but added a crafting system, a dungeon-crawling mine, deep NPC relationships, and seasonal festivals. Most importantly, Barone understood pacing: days were short and activities numerous. You could never do everything in one day.

What Makes It "Great"

A great farming sim creates the feeling that you are living a small life, and that small life matters. The calendar is the secret weapon: it creates natural deadlines, natural variety, and natural milestones. The relationship system adds emotional texture. And the daily time limit forces the most compelling question in all of game design: "What do I do with today?"

The Essential Mechanic

Managing limited time each day across competing priorities — farming, socializing, exploring, crafting.


Week 2: Build the MVP

What You're Building

A single-season farming sim where the player manages a small grid-based farm over 28 in-game days. Each day has limited hours (6 AM to midnight). The player can till soil, plant seeds, water crops, harvest grown crops, sell produce for gold, give gifts to NPCs, and craft basic items. Crops take varying numbers of days to grow. After 28 days, the season ends and the game shows a summary.

Core Concepts

1. Calendar / Time System

The game tracks the current day (1-28), the time of day (6:00 AM to midnight), and advances the calendar when the player sleeps. Each in-game minute passes at an accelerated rate, and certain actions consume chunks of time. The calendar drives everything: crop growth, NPC schedules, and the end-of-season deadline.

calendar = {
    day: 1,
    season: "spring",
    timeOfDay: 600,    // 6:00 AM
    WAKE_TIME: 600,
    MIDNIGHT: 2400,
    DAYS_PER_SEASON: 28
}

function sleepAndAdvanceDay():
    calendar.day += 1
    calendar.timeOfDay = calendar.WAKE_TIME
    if calendar.day > calendar.DAYS_PER_SEASON:
        triggerSeasonEnd()
    growCrops()
    advanceNPCSchedules()

Why it matters: The calendar transforms an open-ended sandbox into a game with rhythm and stakes. Without it, the player can do everything eventually and nothing matters. With it, every day is a scarce resource.

Interactive: Crop Growth Timer

Click an empty plot to plant a seed (costs 1 seed from your supply). Crops progress through stages each day: seed, sprout, grown, harvestable. Click a harvestable crop to collect it. Press "Next Day" to advance time. Water gets applied automatically each day.

Day 1 of 28 Seeds: 8 Gold: 0 Harvested: 0

2. Crop Growth Timers

Each crop has a growth timeline: planted, watered, and then advancing through growth stages over multiple days. A crop advances one stage per day only if it was watered that day. Different crops take different numbers of days, creating a planning challenge.

CROP_DATA = {
    "turnip":  {stages: 3, sellPrice: 60,  seedCost: 20},
    "potato":  {stages: 5, sellPrice: 120, seedCost: 40},
    "melon":   {stages: 8, sellPrice: 300, seedCost: 80}
}

function growCrops():
    for each tile in farm.tiles:
        if tile.crop != null:
            if tile.crop.wateredToday:
                tile.crop.currentStage += 1
            tile.crop.wateredToday = false

Why it matters: Crop timers are the genre's signature mechanic. The delay between planting and harvesting creates anticipation, and the requirement to water daily creates a ritual. When a melon finally ripens after eight days, the payoff feels earned.

3. NPC Relationship / Affection System

Each NPC has a friendship level (0-100) that increases when the player gives them gifts or talks to them daily. Different NPCs prefer different gifts. At certain thresholds, new dialogue unlocks and special events trigger.

function giveGift(npc, item):
    if item in NPC_DATA[npc.name].lovedGifts:
        npc.friendship += 20
    else if item in NPC_DATA[npc.name].likedGifts:
        npc.friendship += 10
    else:
        npc.friendship += 2
    npc.friendship = clamp(npc.friendship, 0, 100)
    checkFriendshipMilestones(npc)

Why it matters: The relationship system is what turns a farming game into a life sim. NPCs give the world emotional texture and give the player a reason to care about the world beyond profit. The daily gift-and-talk ritual competes directly with farming time.

4. Daily Time Budget

Each day runs from 6 AM to midnight. Actions consume time: watering one tile takes 10 minutes, giving a gift takes 30 minutes. The player can never do everything they want in one day. This scarcity is the game's core tension.

TIME_COSTS = {
    TILL: 20, WATER: 10, PLANT: 15, HARVEST: 10,
    GIVE_GIFT: 30, TALK: 15, CRAFT: 45, TRAVEL_PER_TILE: 2
}

function performAction(action, tile=null):
    timeCost = TIME_COSTS[action]
    if tile: timeCost += manhattanDistance(player, tile) * TIME_COSTS.TRAVEL_PER_TILE
    if calendar.timeOfDay + timeCost > calendar.MIDNIGHT:
        return "Not enough time today"
    advanceTime(timeCost)
    executeAction(action, tile)

Why it matters: The daily time budget is the invisible hand that shapes every decision. It is what makes "What do I do today?" a meaningful question. Without it, the player optimizes everything simultaneously and the game becomes a checklist.

Interactive: Daily Time Budget

A clock shows hours remaining in the day. Each action costs a different amount of time. Make choices and watch the day run out. Can you fit everything in before midnight?

5. Crafting / Recipe System

The player can combine items to create new items. Recipes are discovered by reaching friendship milestones. Crafting consumes time and ingredients but produces more valuable items.

RECIPES = {
    "scarecrow": {ingredients: {"wood": 5, "fiber": 3}, unlocked: true},
    "sprinkler": {ingredients: {"iron": 2, "stone": 3}, unlocked: false},
    "jam":       {ingredients: {"melon": 1, "sugar": 1}, unlocked: false}
}

function craft(recipeName, inventory):
    recipe = RECIPES[recipeName]
    if not canCraft(recipe, inventory): return null
    for ingredient, count in recipe.ingredients:
        inventory.remove(ingredient, count)
    advanceTime(TIME_COSTS.CRAFT)
    return createItem(recipe.result)

Why it matters: Crafting adds a second economy. That melon is worth 300 gold if you sell it, but it is also the key ingredient in jam (worth 500 gold) and a loved gift for an NPC (+20 friendship). Crafting forces the player to think about multiple competing uses.

6. Seasonal Content

The season determines which crops can be planted, what the shop sells, weather, and which events trigger. The system is designed so swapping seasons means changing a data table, not rewriting code.

SEASONAL_DATA = {
    "spring": {
        availableCrops: ["turnip", "potato"],
        events: {day_5: "flower_festival", day_20: "egg_hunt"},
        shopInventory: ["turnip_seed", "potato_seed", "fertilizer"]
    }
}

function isValidCropForSeason(cropType):
    return cropType in getSeasonData().availableCrops

Why it matters: Seasons give the game a macro-rhythm on top of the daily micro-rhythm. Days create urgency; seasons create strategy. Seasonal content keeps the game fresh.

7. Tool Upgrade Progression

The player starts with basic tools (watering can waters one tile). Upgrades let tools affect more tiles. Upgrades take two in-game days (the tool is unavailable), creating another time-management tradeoff.

TOOL_LEVELS = {
    "watering_can": [
        {level: "basic",  tiles: 1, pattern: [[0,0]]},
        {level: "copper", tiles: 3, pattern: [[0,0],[1,0],[2,0]]},
        {level: "steel",  tiles: 9, pattern: 3x3_grid}
    ]
}

function upgradeTool(toolName, targetLevel):
    cost = UPGRADE_COSTS[targetLevel]
    player.gold -= cost.gold
    player.tools[toolName].readyOnDay = calendar.day + 2

Why it matters: Tool upgrades are the farming sim's answer to the power curve. Early game, watering 20 tiles takes 200 minutes. Late game, the same task takes 30 minutes, freeing time for new activities.


Stretch Goals

MVP Spec

ComponentMinimum Viable Version
Grid12x12 farm plot with interactable tiles
Calendar28-day single season, 6 AM to midnight
Crops3 types with different growth rates and values
Daily ActionsTill, plant, water, harvest, give gift, talk, craft
NPCs2 named characters with schedules and gift preferences
Crafting3 recipes
EconomySell crops for gold, buy seeds and upgrades
End StateSeason ends after 28 days, summary screen

Deliverable

A playable single-season farming sim where the player manages a grid-based farm over 28 in-game days. Each day has a time budget that forces prioritization between farming tasks, NPC relationships, and crafting. The game demonstrates the core tension: there is always more to do than time allows.


Discussion Questions

  1. The Cozy Tension Paradox: Farming sims are marketed as relaxing, but their core mechanic is time pressure. How does Stardew Valley make scarcity feel gentle instead of stressful?
  2. Content Depth vs. Breadth: Your MVP has 3 crops and 2 NPCs. At what point does adding content stop being "more game" and start being "more database"?
  3. The Gift Economy: NPC relationship systems are often criticized as transactional. How could you redesign the system to feel more organic?
  4. Real Time vs. Game Time: Animal Crossing uses real-world time; Stardew Valley uses compressed game time. What are the tradeoffs?