data/claims/harvest-moon-64.yamlHarvest Moon 64 (harvestwhisperer/hm64-decomp, US build)
Game: Harvest Moon 64.
In the US release, a crop is a run of tile numbers in groundObjectsInfo, each growth stage a dry tile followed by its watered twin. The watering can turns a waterable tile into the next number (dry soil into watered soil). Each night, updateGroundObjectsOvernight reads a flag byte per tile: a watered stage moves on to the next stage's dry tile, watered soil and a watered ripe crop go back to dry, and a dry stage stays where it is. So a crop grows one stage per watered day and a dry day doesn't count. Worked out from the table (computed), the watered days from sowing to ripe are: turnip 4, potato 6, strawberry 6, moondrop flower 6, cabbage 7, eggplant 7, pink cat mint 8, tomato 9, corn 13. Grass's stages aren't waterable and advance every night: 9 nights from seed. harvest-moon-64/crop-days
About: Harvest Moon 64 Crop growth
Value
{
"turnip": 4,
"potato": 6,
"strawberry": 6,
"moondrop": 6,
"cabbage": 7,
"eggplant": 7,
"pinkCatMint": 8,
"tomato": 9,
"corn": 13,
"grass": 9
}src/game/groundObjects.h#L231-L237u8 playerInteractionFlags;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.c#L46-L56{ 0x07, 0x00, 0x00, GROUND_OBJECT_TILLABLE, 0x09 },hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.c#L1236-L1251currentGroundObject++;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/items.c#L3089-L3099temp2 = currentGroundObjectIndex + 1;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.c#L171-L181{ 0x06, 0x00, 0x00, GROUND_OBJECT_TILLABLE, 0x09 },Checked by claude, 2026-10-22 — read the GroundObjectInfo struct (the fifth byte is playerInteractionFlags), the turnip rows 8 to 18 (dry stages 0x08 or 0x00, watered stages 0x09 or 0x01, watered ripe 0x02), and the overnight loop (bit 1 adds one, bit 2 subtracts one, bit 4 subtracts seven); then stepped every crop from its PLANTED_STAGE_1 to its _RIPE define in a script over the table, watering each day; grass rows 133 to 141 carry 0x09 and no waterable flagThe table's index is the tile number, so row n sits on line 38 + n. The greenhouse loop (lines 1384 onward) applies the same flags. The blue mist flower, on its own plot by the pond, follows a separate branch and isn't counted here. The seed stages' flag bytes also carry 0x08 (0x08 dry, 0x09 watered, against 0x00 and 0x01 for later stages); the overnight update doesn't read that bit.
Cited by: Crop growth, Harvest Moon 64
In the US release, picking a ripe tomato, ear of corn, or eggplant puts back an earlier stage (tile 0x5F, TOMATO_PLANT_STAGE_1; 0x7A, CORN_PLANT_STAGE_1; 0x2A, EGGPLANT_STALK_STAGE_1) under a comment reading "replace with stalks", so the plant ripens again after 3, 4, and 3 more watered days (computed from the table). Any other crop picked leaves soil (dry or watered, as the ripe tile was) or a bare tile. harvest-moon-64/crop-regrowth
About: Harvest Moon 64 Crop growth
Value
{
"tomato": 3,
"corn": 4,
"eggplant": 3
}src/game/items.c#L4137-L4160addGroundObjectToMapFromPlayerPosition(0x5F, 1.0f, 8);hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.h#L61#define EGGPLANT_STALK_STAGE_1 42hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.h#L114#define TOMATO_PLANT_STAGE_1 95hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.h#L141#define CORN_PLANT_STAGE_1 122Checked by claude, 2026-10-22 — read handlePickUpGroundItem's switch: the three ripe ranges put back 0x5F, 0x7A, and 0x2A; the default case reads the tile's mapAdditionIndex (4 gives TILLED, 5 TILLED_WATERED, else BASE_TILE); matched the three numbers to the header defines and stepped each to its _RIPE define with the same script as crop-daysIn the US release, the farm's overnight update has a rule for the night that starts a season (the day of the month is 1 by then). Summer turns sprouted-or-older turnips, potatoes, and cabbages into dead plants and their seed stages back into tilled soil. Autumn does the same to tomatoes, corn, moondrop flowers, and pink cat mint, and sends any spring seed stages to tilled soil. Winter clears dry tilled soil, weeds, eggplants at every stage, the dead plants, and the remaining seed stages to the bare tile. Spring turns grass back to cut grass and returns tilled soil to the bare tile when getRandomNumberInRange(0, 5) >= 3. Strawberries, whose seeds sow only in the greenhouse, appear in none of the lists, and the greenhouse loop has no season rule. harvest-moon-64/season-change
About: Harvest Moon 64 Crop growth
Codehm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) ·src/game/groundObjects.c#L1253-L1300case TURNIP_SPROUT_STAGE_1 ... TURNIP_RIPE_WATERED:hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.c#L1306-L1338case TOMATO_SPROUT_STAGE_1 ... TOMATO_RIPE_WATERED:hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.c#L1342-L1366case POTATO_DEAD ... EGGPLANT_RIPE_WATERED:hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.c#L1384-L1409// greenhouse
for (i = 0; i < FIELD_HEIGHT; i++) {
…
currentGroundObject = greenhouseFieldTiles[i][j];
…
greenhouseFieldTiles[i][j] = currentGroundObject;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/items.c#L3486groundObjectIndex = (gBaseMapIndex == GREENHOUSE) ? STRAWBERRY_PLANTED_STAGE_1 : INVALID_GROUND_OBJECT;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/transition.c#L700updateGroundObjectsOvernight();hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/game.c#L2541-L2545setClockNewDay(); Checked by claude, 2026-10-22 — read the gDayOfMonth == 1 switch on gSeason case by case against the header's tile numbers (strawberry tiles 68 to 82 fall in no range); read that startNewDay calls the update and that the bed path calls setClockNewDay before startNewDay; read the greenhouse loop and the strawberry sowing lineThe season check runs after the night's growth step, so a crop watered on the last day of a season still dies. Winter's list names dry tilled soil (TILLED) but not watered soil. The Japanese build's winter list differs by one range (#ifdef _JP, lines 1357 to 1361): only the US one also clears dead moondrop flowers there. Tiles 0xD7 and 0xD8, unnamed in the decompilation, go to tilled soil in spring, summer, and autumn and to the bare tile in winter.
Cited by: Crop growth, Harvest Moon 64
In the US release, each night the new day's weather is set before the crops update; then, if it is rain, updateCropsIfRain turns every waterable tile on the farm into its watered twin, as the watering can would, so a rainy day counts as watered. The greenhouse isn't touched. harvest-moon-64/rain-waters
About: Harvest Moon 64 Crop growth
Codehm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) ·src/game/transition.c#L691-L703gWeather = gForecast;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/groundObjects.c#L1451-L1476setFieldTile(FARM, groundObjectIndex + 1, j, i);Checked by claude, 2026-10-22 — read startNewDay's order (gWeather from the forecast, then updateGroundObjectsOvernight, then updateCropsIfRain) and the rain function's loop over farmFieldTiles onlyThe same function also waters the pond's blue mist flower plot.
Cited by: Crop growth, Harvest Moon 64
In the US release, updateClock adds a day to the date and the day of the week when the hour rolls over to 6:00, and going to bed sets the clock to 6:00 and adds the day itself. Day 31 becomes day 1 of the next season, and the fifth season is spring of the next year: four seasons of 30 days, with the year capped at 99. harvest-moon-64/calendar
About: Harvest Moon 64 Calendar
Value
{
"daysPerSeason": 30,
"seasonsPerYear": 4,
"dayStartsAt": "6:00",
"maxYear": 99
}src/game/time.c#L115-L146if (gDayOfMonth >= 31) {hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/time.c#L221-L233gHour = 6;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/time.h#L6-L9#define WINTER 4Checked by claude, 2026-10-22 — read updateClock (the gHour == 6 increment, the >= 31 and >= 5 wraps, the gYear cap) and setClockNewDay (6:00:00, then the day and weekday incremented and updateClock(FALSE) run for the wraps)Cited by: Calendar
In the US release, each step of the gameplay loop adds 10 to the clock's seconds, as long as the map's LEVEL_TIME_FLOWS flag is set, no animation has suspended time, and the player entity passes checkEntityMapSpaceDependent and isn't paused; 60 seconds make a minute. So a game minute is 6 steps and a game hour 360. The main loop steps at most once per video retrace (mainLoopUpdateInterval is 1), and the retrace callback counts 60 calls as its cycle. Assuming 60 retraces a second (NTSC's rate is about 59.94), the clock runs at most 10 game minutes per real second, an hour in 6 real seconds (computed under that assumption). The real rate depends on how many steps the game finishes each second, which the atlas hasn't measured. harvest-moon-64/clock-rate
About: Harvest Moon 64 Time of day
Value
{
"gameSecondsPerStep": 10,
"stepsPerGameMinute": 6,
"maxGameMinutesPerRealSecond": 10
}src/game/time.c#L46-L50if ((getLevelFlags(gBaseMapIndex) & LEVEL_TIME_FLOWS) && !checkDailyEventBit(SUSPEND_TIME_DURING_ANIMATION)) {hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/time.c#L104-L113gSeconds += 10;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/transition.c#L50-L59handleTimeUpdates();hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/mainproc.c#L164-L165mainLoopUpdateInterval = 1;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/mainLoop.c#L305-L325if ((vblankCounter % mainLoopUpdateInterval) == 0) {Checked by claude, 2026-10-22 — read handleTimeUpdates and updateClock; mainGameLoopCallback calls handleTimeUpdates once per call when the player entity isn't paused; mainLoop runs the current callback once per stepMainLoop, which updateMainLoopTimer sets from the retrace callback every mainLoopUpdateInterval retraces and only if the last step has finishedThe retrace callback counts 60 calls as one cycle (vblankCounter > 59, mainLoop.c line 241). A step that runs long makes the loop miss retraces, which slows the clock. The Nintendo fandom wiki's article puts an hour at about 15 real seconds, a lead toward a measurement, not evidence.
Cited by: Time of day
In the US release, toolToFatigueScore gives each tool a stamina cost per charge level: the sickle and hoe 2, 4, and 6; the ax and hammer 1, 2, and 3; the watering can 1, 2, and 6; the milker, bell, brush, clippers, the seed bags, and grass seeds 1; the rest 0. Releasing B subtracts the cost from stamina. If it is raining or snowing, or the hour is before 6:00 or from 18:00, and the player isn't in the greenhouse, the same cost is added to fatigue (out of 100), or half of it once a life-event flag the decompilers name KAPPA_POWER_NUT_GIFT is set. Holding B raises the charge level each time a hold counter reaches 16, up to the tool's upgrade level, while stamina covers the next level's cost. harvest-moon-64/tool-cost
About: Harvest Moon 64 Stamina
Value
{
"sickle": [
2,
4,
6
],
"hoe": [
2,
4,
6
],
"ax": [
1,
2,
3
],
"hammer": [
1,
2,
3
],
"wateringCan": [
1,
2,
6
]
}src/game/player.c#L289-L318{ 2, 4, 6 },hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/items.h#L57-L85#define WATERING_CAN 5hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/player.c#L1629-L1660if (((SUNNY < gWeather && gWeather < 4) || !(5 < gHour && gHour < 18)) && gBaseMapIndex != GREENHOUSE) {hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/weather.h#L6-L8#define SNOW 3Checked by claude, 2026-10-22 — read the table rows against the tool defines (rows 1 to 5 the five tools, rows 6 to 19 milker through blue mist seeds at 1, row 27 grass seeds at 1) and handleToolAction's release branch, fatigue condition, and charge branch (toolHeldCounter >= 16, currentToolLevel < getToolLevel)The hold counter counts calls of handleToolAction in which the player's animation state has changed, so the atlas doesn't give it in frames. The table declares MAX_TOOLS (30) rows but lists 32. Using a tool whose cost exceeds the remaining stamina triggers the exhaustion action (checkStaminaExhaustionLevel returns 4); the atlas hasn't read what that action does.
Cited by: Harvest Moon 64, Stamina
In the US release, going to bed refills stamina to its maximum and, unless fatigue is at 100, takes 2 points of fatigue off for each hour of sleep before 6:00, 3 with the cushion (life event HAVE_CUSHION): the hour taken is the bedtime, plus 24 if before 6:00, subtracted from 30. Staying up until 6:00 runs the next day's update by another path that doesn't touch stamina or fatigue. Food and drink add the item's stamina value and take off its fatigue value. harvest-moon-64/rest
About: Harvest Moon 64 Stamina
Value
{
"fatiguePerHourSlept": 2,
"withCushion": 3,
"fatigueMax": 100
}src/game/game.c#L2520-L2543gPlayer.fatigueCounter += adjustValue(gPlayer.fatigueCounter, -((30 - tempTime) * 2), 100);hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/player.c#L3252-L3254handleExitLevel(8, END_OF_DAY_1); hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/time.c#L56-L61handleExitLevel(1, END_OF_DAY_2);hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/game.c#L2559-L2610startNewDay();hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/player.c#L1788-L1793gPlayer.currentStamina += adjustValue(gPlayer.currentStamina, getItemStaminaIncreaseValue(gPlayer.heldItem), gMaximumStamina);Checked by claude, 2026-10-22 — read endOfDayCallback1 (reached from the sleeping action) through its stamina reset, endOfDayCallback2 (reached from the 6:00 check in handleTimeUpdates) end to end, and handleEatAction's first frame; handleDrinkAction (player.c line 2628) does the same as eatingMaximum stamina starts at 100 (initialize.c line 319) and some events raise it by 15, up to MAX_STAMINA (250). checkFatigueLevel returns 3 only at exactly 100.
Cited by: Harvest Moon 64, Stamina
In the US release, a cow's milk size comes from its affection (0 to 255): small at 150 or less, medium from 151 to 220, large from 221, and golden for a cow whose milkType is 0, whatever its affection. harvest-moon-64/milk-affection
About: Harvest Moon 64 Affection
Value
{
"small": [
0,
150
],
"medium": [
151,
220
],
"large": [
221,
255
]
}src/game/animals.c#L410-L434if (gFarmAnimals[animalIndex].affection >= 221) {hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/game.h#L19#define MAX_AFFECTION 255Checked by claude, 2026-10-22 — read getMilkHeldItemIndex's four branchesThe atlas hasn't read what sets milkType to 0.
Cited by: Affection, Harvest Moon 64
In the US release, adjustFarmAnimalAffection scales a change by an adult cow's condition: a happy cow's gains are doubled and a mad or sick cow's halved. Its loss branch negates the scaled amount, -(amount * 2) for mad and sick and -(amount / 2) for happy, and since the amount is already negative, the result is positive: a loss raises a mad, sick, or happy cow's affection, by twice or half the loss (computed). Leaving an adult cow outdoors on a rainy day can trigger this: updateFarmStatusRain makes it mad when getRandomNumberInRange(0, 3) returns 0 and then applies −20, or sick when getRandomNumberInRange(0, 7) returns 0 and then applies −30, and a cow already sick gets −20. harvest-moon-64/cow-mood-sign
About: Harvest Moon 64 Affection
Value
{
"madOrSickLossMultiplier": -2,
"happyLossMultiplier": -0.5
}src/game/animals.c#L344-L362adjusted = (amount >= 0) ? (amount / 2) : -(amount * 2);hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/animals.c#L402gFarmAnimals[animalIndex].affection += adjustValue(gFarmAnimals[animalIndex].affection, adjusted, MAX_AFFECTION);hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/animals.c#L238-L276gFarmAnimals[index].condition = condition;hm64-decomp: a decompilation of Harvest Moon 64 (harvestwhisperer/hm64-decomp) · src/game/gameStatus.c#L298-L342setAnimalState(2, i, 0xFF, COW_MAD, 0);Checked by claude, 2026-10-22 — read the ADULT_COW cases (amount is s8, so -20 gives -(-40) = 40 for mad or sick and -(-10) = 10 for happy), then adjustValue's add; setAnimalState writes the condition at once, before updateFarmStatusRain's adjust callsThe decompilation matches the ROM, so the C's arithmetic is the game's. The atlas hasn't seen this in play or found it described elsewhere; it may be a known quirk among players. Baby cows, calves, and pregnant cows take the change as given. Whether getRandomNumberInRange includes its upper bound isn't read here, so the odds aren't given.
Cited by: Affection, Harvest Moon 64