Exact source used by this build. SHA-256: 9022c500280ba7b9c9a732c33c4744e7c7107263f88e3ab8595baa9ed9c54425.

1 import { z } from "zod";
2 import { AreaSeasonsSchema } from "../seasons/schema";
3 import { MapPoiSchema, WarpSchema } from "../maps/schema";
4 
5 export const AreaConfigSchema = z.object({
6   id: z.string().min(1), name: z.string().min(1).optional(),
7   width: z.number().int().positive(), height: z.number().int().positive(),
8   ground: z.string().min(1), tillable: z.boolean(), outdoor: z.boolean().default(true), locked: z.boolean().default(false),
9   clockRateMsPerGameMinute: z.number().positive().default(700),
10   spawn: z.object({ x: z.number().nonnegative(), y: z.number().nonnegative() }).default({ x: 0, y: 0 }),
11   landmarks: z.array(z.object({
12     id: z.string().min(1), kind: z.enum(["home"]), x: z.number().int().nonnegative(), y: z.number().int().nonnegative(),
13     width: z.number().int().positive(), height: z.number().int().positive(),
14   })).default([]),
15   pois: MapPoiSchema.array().default([]),
16   collision: z.boolean().array().optional(), groundTiles: z.number().int().nonnegative().array().optional(),
17   decorTiles: z.number().int().nonnegative().array().optional(), tillableTiles: z.boolean().array().optional(),
18   warps: WarpSchema.array().optional(), seasons: AreaSeasonsSchema.optional(),
19 });
20 export const FarmConfigSchema = z.object({
21   id: z.string().min(1), areas: z.array(AreaConfigSchema).min(1),
22   starterPlayer: z.object({
23     areaId: z.string().min(1), x: z.number().nonnegative(), y: z.number().nonnegative(),
24     facing: z.enum(["up", "down", "left", "right"]), inventory: z.record(z.string(), z.number().int().nonnegative()),
25   }),
26 });
27 export type FarmConfig = z.infer<typeof FarmConfigSchema>;
28