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