/** * The South Fields' purpose (James, 2026-10-08: "this area needs quests and purpose"; plan * .cursor/task-plans/2026-10-08-south-fields-rework.md, ChatGPT's ten changes folded in): a six-quest line through the * working farm, each opening the next, and the things the place keeps doing once the line is done. * * 1. The New Gate (Clark): reap three wheat, take them to Miller Hettie. * 2. Hettie's Sails (Hettie): fit the new sail stock and canvas, then the bread lesson (wheat, flour, a loaf). * 3. Geese in the Wheat (Hettie): see off three angry geese, mend the gap in the plot fence, two feathers for a quill. * 4. Nye's Strays (Nye): mend the fold's rotten hurdle, lead two stray ewes home, shear four fleeces. * 5. Wren's Honey (Wren): smoke the hives, take two combs, have Wren spin them, bake a honey bread. * 6. The Harvest Supper (Clark): lay bread, honey bread, wool and apples on the long table; Joss's cart opens. * * The quests themselves are data in storyQuests.ts; this file holds what they and the world share: the new items, * the props' places (built from the layout in southExpansion.ts, so a moved hive moves its prop), the hive cooldown, the * stray ewes, and Farmhand Joss's daily cart orders. The backend's southFieldsQuests.ts runs it all. * * World frame: x east, z south (the /tp frame), as in southExpansion.ts. */ import { type SouthPoint } from './southExpansion.js'; /** Lifted from a hive in Wren's meadow (smoked first); Wren spins it into honey. */ export declare const HONEYCOMB_KIND = "honeycomb"; /** A pot of honey, spun from the comb by Beekeeper Wren. Bakes with flour into honey bread. */ export declare const HONEY_KIND = "honey"; /** Flour and honey baked together (cooking.ts): a better heal than bread. */ export declare const HONEY_BREAD_KIND = "honeybread"; /** Off an angry goose (a small chance, and every goose while Geese in the Wheat wants them). */ export declare const GOOSE_FEATHER_KIND = "goosefeather"; export declare const SOUTH_FIELDS_ITEM_KINDS: readonly string[]; /** What a shop pays (the universal sell price) for each. Bread sells for 8, flour 3, wool 7. */ export declare const HONEYCOMB_PRICE = 6; export declare const HONEY_PRICE = 9; export declare const HONEY_BREAD_PRICE = 14; export declare const GOOSE_FEATHER_PRICE = 2; /** A goose's ordinary feather drop (drops.ts); while Geese in the Wheat wants feathers every goose drops one. */ export declare const GOOSE_FEATHER_DROP_CHANCE = 0.15; /** Hettie's quill wants this many (the third quest's hand-in). */ export declare const GOOSE_FEATHERS_NEEDED = 2; /** The prop names; storyQuests.ts questPropModel draws each with its Blender model. */ export declare const SOUTH_PROP: { /** The gap in the plot fence the geese come through (questbrokenfence; mended it draws a wattle hurdle). */ readonly fieldBreach: "fieldbreach"; /** The rotten hurdle in the fold's south fence the strays pushed through (questbrokenfence, then a wattle). */ readonly hurdleBreach: "hurdlebreach"; /** The two places on the mill where Hettie's new sail stock and canvas go (plankstack stand-ins). */ readonly millRepair: "millrepair"; /** Wren's smoker (the smoker model, in place of the layout's dreadmodel). */ readonly smoker: "hivesmoker"; /** The three hives (the beehive model, in place of the layout's dreadmodels): click to lift a comb. */ readonly hive: "honeyhive"; /** The hamper at the long table's west end, where the Harvest Supper is laid (a crate of produce, stand-in). */ readonly hamper: "supperhamper"; }; export type SouthPropPlace = { id: string; x: number; z: number; style: string; }; /** The plot fence's breach: the east fence of the south-east wheat plot, on the side the pond geese come from. */ export declare const FIELD_BREACH: SouthPropPlace; /** The fold's rotten hurdle: its south fence, east of the dog's gap. */ export declare const HURDLE_BREACH: SouthPropPlace; /** * Hettie's two repair points, on the mill's east side under the sails (clear of the track along its west side): the * sail stock (two poplar planks) to the north, the canvas (a bolt of linen) to the south. */ export declare const MILL_REPAIRS: readonly SouthPropPlace[]; /** Wren's smoker, where the layout stands it. */ export declare const HIVE_SMOKER: SouthPropPlace; /** The three hives, where the layout stands them, mouths south. */ export declare const HONEY_HIVES: readonly SouthPropPlace[]; /** What the Harvest Supper's hamper takes (the sixth quest's hand-in, all at once). */ export declare const HARVEST_SUPPER_NEEDS: readonly { kind: string; qty: number; label: string; }[]; /** The supper hamper, one tile off the long table's west end (the table is 5 across, its anchor the middle). */ export declare const SUPPER_HAMPER: SouthPropPlace; /** * The clay oven by the fold is a cooking range anyone may use (no quest): a `stove` entity drawn with the oven's * Blender model (the frontend draws a stove styled `clayoven-*` with that model), 2 x 2 like the dreadmodel it * replaces. Its blocked tiles are the model's (types constants.ts CAPITAL_BUILDING_MODELS.clayoven). */ export declare const CLAY_OVEN: { readonly id: "fields-quest-clay-oven"; readonly x: 156; readonly z: 934; readonly style: "clayoven-s"; }; export declare const CLAY_OVEN_BLOCKED: readonly SouthPoint[]; export declare function isClayOvenStyle(style: string | undefined): boolean; /** Every prop this file places, for the smoke and the placement. */ export declare const SOUTH_FIELDS_QUEST_PROPS: readonly SouthPropPlace[]; /** A mended fence (the geese's gap, the fold's hurdle) draws as a wattle hurdle for the player who mended it. */ export declare function southPropDoneModel(style: string | undefined): string | null; /** A hive fills again this long after a player lifts its comb (per player and per hive, saved, so a relog waits too). */ export declare const HIVE_REFILL_MS: number; export declare const HONEYCOMB_FORAGING_XP = 15; /** Wren's npc_action: spin every comb in the bag into honey, one for one, free (as Hettie grinds wheat). */ export declare const SPIN_HONEY_ACTION = "spinhoney"; /** Two ewes out of the fold, one by the pond track and one on the pond's north bank. Each is a sheep NPC with this name. */ export declare const STRAY_EWE_NAME = "Stray ewe"; export declare const STRAY_EWES: readonly SouthPoint[]; /** The npc_action on a stray: it follows you (as a companion) until it is in the fold. */ export declare const LEAD_STRAY_ACTION = "leadstray"; /** Where a led ewe counts as home: inside the fold's grazing, through the west gate or the dog's gap. */ export declare const FOLD_HOME: { readonly x: number; readonly z: number; readonly radius: 4; readonly label: "the fold"; }; /** A ewe taken home leaves its spot for this long (another wanders out for the next player). */ export declare const STRAY_RESPAWN_MS = 45000; export type HarvestCartSkill = 'foraging' | 'cooking' | 'woodwork' | 'fishing'; export type HarvestCartOrder = { id: string; /** What the order slate says, e.g. "10 sheaves of wheat". */ label: string; kind: string; qty: number; coins: number; skill: HarvestCartSkill; xp: number; }; /** * What the cart takes to market, paid a little over the counter price (as Joe's odd jobs are): the fields' own produce. * Three a day for everyone, once each per player per day. Open once The Harvest Supper is done. */ export declare const HARVEST_CART_ORDERS: readonly HarvestCartOrder[]; export declare const HARVEST_CART_ORDERS_PER_DAY = 3; export declare const HARVEST_CART_DAY_MS: number; /** The npc_action ids on Joss: read the slate, or hand in one order. */ export declare const HARVEST_CART_ACTION = "harvestcart"; export declare const HARVEST_CART_ORDER_PREFIX = "harvestcart:"; /** The day a moment falls in (UTC); the slate changes at midnight. */ export declare function harvestCartDay(nowMs: number): number; /** The day's three orders, the same for everyone, at least one of them raw produce a beginner can gather. */ export declare function harvestCartOrdersForDay(day: number): HarvestCartOrder[]; /** The South Fields' saved state per character: hive refill times by prop id, and the cart's day and orders done. */ export type SouthFieldsState = { hives: Record; cartDay: number; cartDone: string[]; }; export declare function emptySouthFieldsState(): SouthFieldsState; export declare function normalizeSouthFieldsState(raw: unknown): SouthFieldsState; /** The three resident farmers and Clark's hand, told apart by name (storyQuests.ts npcMatches). */ export declare const SOUTH_FIELDS_HETTIE_NAME = "Miller Hettie"; export declare const SOUTH_FIELDS_NYE_NAME = "Shepherd Nye"; export declare const SOUTH_FIELDS_WREN_NAME = "Beekeeper Wren"; export declare const SOUTH_FIELDS_JOSS_NAME = "Farmhand Joss"; /** Where one of the fields' people stands (the layout's SOUTH_FIELDS_PEOPLE), for the quest helper's places. */ export declare function southFieldsPersonAt(name: string): { x: number; z: number; }; //# sourceMappingURL=southFieldsQuests.d.ts.map