Farms

Common stats — all farm types

Size
3×3
Cost (Normal)
15 Db  VE 8 · Easy 10 · Normal 15 · Hard 20 · VH 50
Workers (meadow)
10 — own labor pool
Workers (floodplain)
none — supplied by Work Camp
Desirability
−2, fading over 2 tiles
Fire / damage risk
None — farms are fire-proof and damage-proof
Labor category
Food Production
Floodplain farms in various growth stages
Floodplain farms — tiling, seeding, harvest

Farms are Egypt's primary source of food and several important raw materials. There are eight crop types, each available in two variants: a floodplain farm that works only during the growing season and depends on Work Camp labor, and a meadow farm that operates year-round on irrigated meadow land using its own workforce. The two variants produce identical crops from the same building footprint, but differ significantly in how they are managed.

Overview

Egyptian agriculture was inseparable from the Nile. Every year the river flooded, depositing rich dark silt across its banks. When the waters receded, that soil could sustain extraordinary yields — but for one season only. The Egyptians mastered this rhythm over millennia: they timed their planting to the receding flood, harvested before the next inundation, and organized large gangs of peasant laborers to work the fields during the growing season. Beyond the flood plains, patches of green meadow land could be cultivated year-round with the help of irrigation.

The three great Egyptian seasons were akhet (inundation), peret (emergence/growing), and shemu (harvest). Most of the campaign's food comes from floodplain farms in peret and shemu. Industrial crops — barley for beer, flax for linen, henna for paint — also grow on both terrain types and feed the city's workshops.

The Nile flood cycle

The game models the Nile flood through six states that advance each year. Floodplain farms are only active during FARMABLE; they are submerged and locked during all other states.

Flood stateWhat happens on farms
FARMABLEGrowing season — Work Camp laborers walk to farms; progress accumulates
IMMINENTHarvest trigger — farms with progress > 0 and road access spawn a cartpusher to deliver the crop
FLOODINGWater rising — farms are submerged; no activity
INUNDATEDPeak flood — full submersion; floodplain tiles reset fertility
CONTRACTINGWater receding — tiles re-emerging
RESTINGGround drying — farms can be (re)built; no production yet

The exact month of the inundation varies slightly each year. A Temple Complex dedicated to Osiris improves the quality of the flood, which increases farm yields. In years of weak inundation, soil fertility is lower and harvests are smaller.

Floodplain farms

Floodplain farms occupy fertile land along the Nile banks. They have no permanent building on site — structures on the floodplain are swept away by the annual flood. Because of this, they cannot employ workers directly. Instead, they rely entirely on peasant laborers dispatched from a nearby Work Camp.

Nile flood → fertile silt Work Camp laborer Floodplain Farm (grows for ~6 months) Cartpusher (at harvest) Granary or Storage Yard

The farm's progress counter (0–2000) advances while a laborer is present. Progress represents the three farming phases visible on the field — tiling, seeding, and harvesting — which are animated as the counter rises. At the start of the IMMINENT flood state, any farm with progress > 0 dispatches a cartpusher to deliver the harvest, then resets to zero to await the next cycle.

Labor cycle

When a laborer arrives from a Work Camp, the farm gains a num_workers value (2–10) based on how far the Work Camp is from the farm — closer camps grant more effective workers. The laborer works the farm for roughly 96 game days (~6 months). When the farm reaches the halfway point of the laborer's term, it flags itself as needing a new worker — this pre-emptive request allows the Work Camp to send a replacement before the farm goes idle.

Without a Work Camp within walking distance, a floodplain farm will produce nothing regardless of how fertile the soil is.

Meadow farms

Meadow farms sit on the lighter green meadow tiles away from the Nile banks. Unlike floodplain farms, they have a permanent building (farm house) on site, employ their own workers, and are never flooded. They harvest multiple times per year at fixed calendar months.

Meadow Farm (workers on site) Cartpusher (on harvest month) Granary or Storage Yard

Meadow farms need road access and draw workers from the city's labor pool like any other building. They harvest on specific months (see the crop table below) — the cartpusher only appears on day 1–2 of the harvest month. Because meadow land is less fertile than floodplain land, meadow farms yield less per harvest than a well-serviced floodplain farm in a good flood year.

Irrigation

Meadow tiles farther from the Nile are drier and less fertile. Building Irrigation Ditches across meadow terrain, fed by a Water Lift at the riverbank, increases those tiles' fertility and raises farm output. The denser the yellow vegetation tufts on a tile, the more fertile it is — always check the terrain before placing a meadow farm.

All crop types

Food crops

CropOutputFloodplain harvestsMeadow harvestsDownstream use
Grain grain + straw (1:10) January, May January, May grain → Granary → food; straw → Cattle Ranch, Brickworks, Zoo
Lettuce lettuce April April Food variety for housing evolution
Chickpeas chickpeas April April Food variety for housing evolution
Pomegranates pomegranates June, November June, November Food variety; two harvests per year
Figs figs September September Food variety for housing evolution

Industrial crops raw material

CropOutputFloodplain harvestsMeadow harvestsDownstream use
Barley barley February, August February, August Brewery → beer (for housing, Senet House, festivals)
Flax flax December December Weaver → linen (for Mortuary, housing evolution)
Henna henna December December Paint Workshop → paint (for Royal Burial Tombs)

Industrial crops deliver to workshops rather than Granaries. A cartpusher from a Barley Farm will walk to the nearest Brewery; a Flax Farm sends flax to the nearest Weaver. If no workshop can accept the goods, they go to a Storage Yard. Industrial crops do not satisfy hunger — they cannot be stored in Granaries and are not distributed by Bazaars as food.

Fertility and yield

Floodplain tiles have an inherent fertility value (0–100) based on their proximity to the Nile and the quality of the most recent flood. The farm tile's visual darkness reflects this — dark brown silt = high fertility, pale tan = low fertility. Eight visual levels are rendered based on the fertility index.

At harvest, the yield formula is:

yield = (progress / 2.5) × modifier
// modifier = 1 + produce_multiplier/100 (Osiris blessing doubles yield: modifier = 2)
// floodplain: ready_production = progress × fertility / 100

A farm at 100% progress (2000) on 100% fertile soil with no blessings delivers the theoretical maximum. In practice, partial harvests are common — a farm whose laborer arrived late in the growing season will have lower progress and deliver less.

Soil depletion

Every harvest depletes the soil: tile fertility drops significantly after a crop is taken. The next flood naturally restores fertility — so floodplain farms that experience a strong inundation start the next season with good fertility regardless of the previous harvest. Conversely, if the flood is weak, tiles may still be depleted from the prior year, and yields will be lower. Osiris worship is the primary tool for ensuring strong floods.

Osiris blessing

An active Osiris blessing (from a Temple Complex of Osiris) doubles the harvest modifier. This is the single largest yield multiplier in the game. Even a partially-progressed farm under an Osiris blessing can outperform a full-progress farm without one.

Placement

Placement allows a farm as long as at least 4 of the 9 tiles (3×3 footprint) sit on valid terrain (floodplain or meadow). The remaining tiles may be on non-farmable ground — the ghost preview highlights invalid tiles in red so you can see exactly what you are getting.

For floodplain farms, position matters in two ways:

For meadow farms, place them on the darkest, most dense meadow tiles visible. Connect them to a road — without road access, the cartpusher cannot leave. Irrigation Ditches running from a Water Lift along the river can increase fertility of tiles that are far from water.

All farms are fire-proof and damage-proof — no Firehouse or Architect's Post coverage is needed.

Tips

In the original game

Screenshots from Cleopatra: Queen of the Nile (Impressions Games, 2000).

Floodplain farm right-click info window from the original game
Floodplain farm — right-click panel showing flood status, progress, and fertility
Meadow farm right-click info window from the original game
Meadow farm — right-click panel showing worker status, progress, and fertility

Developer reference

All paths relative to the repository root.

Building config — src/scripts/building/farm.js

All 16 farm variants are defined in src/scripts/building/farm.js. Each entry follows the same structure; here is the floodplain grain farm as a representative example:

building_farm_grain {
  output  { resource: RESOURCE_GRAIN, resource_second: RESOURCE_STRAW }
  output_resource_second_rate : 10   // 1 straw per 10 grain

  building_size  : 3
  month_harvest  : [MONTH_JANUARY, MONTH_MAY]
  progress_max   : 2000
  fire_proof     : true
  damage_proof   : true
  labor_category : LABOR_CATEGORY_FOOD_PRODUCTION

  cost          [ 8, 10, 15, 20, 50 ]  // VeryEasy … VeryHard
  desirability  { value:[-2], step:[1], step_size:[1], range:[2] }
  laborers[10],  fire_risk[0],  damage_risk[0]
  meta { help_id:89, text_id:112 }
  tile_offsets : building_floodplain_farm_tile_offsets
}

Meadow variants use building_meadow_farm_tile_offsets (5-tile layout) instead of the 9-tile floodplain layout. The month_harvest array controls when meadow farms dispatch their cartpusher — the check fires on day 1–2 of each listed month.

Harvest month reference (both variants):

CropHarvest monthsHarvests/year
GrainJanuary, May2
LettuceApril1
ChickpeasApril1
PomegranatesJune, November2
FigsSeptember1
BarleyFebruary, August2
FlaxDecember1
HennaDecember1

Note: for floodplain farms the month_harvest values are not the trigger — harvest is triggered by FLOOD_STATE_IMMINENT regardless of month. The month_harvest field is only used by meadow farms.

Farm C++ class — src/building/building_farm.cpp

All farm types share the building_farm base class in src/building/building_farm.cpp. Key methods:

// Yield calculation at harvest (floodplain):
int farm_fertility = map_get_fertility_for_farm(tile());   // 0–100
d.ready_production = d.progress * farm_fertility / 100;
int yield = expected_produce();
// expected_produce() = (progress / 2.5) * modifier
// modifier = 1 + produce_multiplier/100  (or 2.0 under Osiris blessing)

// Placement rule: 4 of 9 tiles must be TERRAIN_FLOODPLAIN | TERRAIN_MEADOW

// Soil depletion after harvest:
void building_farm::deplete_soil() {
    // reduces each tile's fertility malus proportional to progress
    int new_fert = map_get_fertility(offset, FERT_WITH_MALUS) * 0.2f;
    int malus = new_fert - map_get_fertility(offset, FERT_NO_MALUS);
    map_soil_set_depletion(offset, malus);
}

The fertility tile image is chosen from 8 frames based on clamp(fert_average / 12, 0, 7) — so a fertility of 96+ shows the darkest, most fertile tile, and 0–11 shows the palest.

Worker animation — src/scripts/building/farm.js

The JS update handler in src/scripts/building/farm.js maps progress to a visual farm worker position. For floodplain farms (progress 0–2000):

Progress rangeWorker actionPosition
0 – 399hidden
400 – 999tilingmoves across 6 tiles
1000 – 1199seeding3 tiles
1200 – 2000harvesting8 tiles progressively

Meadow farms use a simpler 5-step layout with coarser progress thresholds (0/100/400/800/1200/1600).

Flood states — src/city/city_floods.h

The flood state enum is defined in src/city/city_floods.h:

enum e_flood_state {
    FLOOD_STATE_IMMINENT    = 1,  // harvest trigger for floodplain farms
    FLOOD_STATE_FLOODING    = 2,
    FLOOD_STATE_INUNDATED   = 3,  // full flood; fertility restored by Nile
    FLOOD_STATE_CONTRACTING = 4,
    FLOOD_STATE_RESTING     = 5,
    FLOOD_STATE_FARMABLE    = 6,  // Work Camp laborers dispatched; progress grows
};

g_floods.state_is(FLOOD_STATE_FARMABLE) is checked in src/building/building_work_camp.cpp before dispatching a laborer. FLOOD_STATE_IMMINENT is checked in building_farm::time_to_deliver() to trigger the cartpusher.

In-game help messages — src/scripts/game_messages_en.js
KeyIDCovers
message_building_grain_farm89Grain Farm — straw byproduct, Cattle Ranch and Brickworks supply
message_building_fruit_vegetables_farm90All food fruit/veg farms — lettuce, chickpeas, pomegranates, figs
message_building_barley_flax_henna_farm91Industrial farms — barley, flax, henna; downstream workshops
message_farming150History — akhet/peret/shemu seasons, corvée labor, field of reeds