@netforge/engine 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GAME-DESIGN.md +195 -0
- package/LICENSE +21 -0
- package/NOTICE +30 -0
- package/README.md +100 -2
- package/dist/api/appearance.d.ts +37 -0
- package/dist/api/appearance.js +41 -0
- package/dist/api/cards.d.ts +105 -0
- package/dist/api/cards.js +133 -0
- package/dist/api/collector.d.ts +114 -0
- package/dist/api/collector.js +204 -0
- package/dist/api/dungeon.d.ts +58 -0
- package/dist/api/dungeon.js +216 -0
- package/dist/api/harness.d.ts +149 -0
- package/dist/api/harness.js +549 -0
- package/dist/api/idle.d.ts +71 -0
- package/dist/api/idle.js +104 -0
- package/dist/api/race-harness.d.ts +3 -0
- package/dist/api/race-harness.js +148 -0
- package/dist/api/registry.d.ts +241 -0
- package/dist/api/registry.js +394 -0
- package/dist/api/scheduler.d.ts +56 -0
- package/dist/api/scheduler.js +160 -0
- package/dist/api/schemas.d.ts +958 -0
- package/dist/api/schemas.js +859 -0
- package/dist/api/tower.d.ts +127 -0
- package/dist/api/tower.js +183 -0
- package/dist/game/adapter.d.ts +69 -0
- package/dist/game/adapter.js +341 -0
- package/dist/game/arena-bot.d.ts +66 -0
- package/dist/game/arena-bot.js +188 -0
- package/dist/game/bot.d.ts +95 -0
- package/dist/game/bot.js +285 -0
- package/dist/game/compile.d.ts +97 -0
- package/dist/game/compile.js +476 -0
- package/dist/game/director.d.ts +42 -0
- package/dist/game/director.js +179 -0
- package/dist/game/earn-source.d.ts +122 -0
- package/dist/game/earn-source.js +386 -0
- package/dist/game/earn.d.ts +49 -0
- package/dist/game/earn.js +55 -0
- package/dist/game/index.d.ts +37 -0
- package/dist/game/index.js +25 -0
- package/dist/game/platformer.d.ts +156 -0
- package/dist/game/platformer.js +619 -0
- package/dist/game/profile.d.ts +97 -0
- package/dist/game/profile.js +140 -0
- package/dist/game/race.d.ts +177 -0
- package/dist/game/race.js +386 -0
- package/dist/game/racer.d.ts +98 -0
- package/dist/game/racer.js +379 -0
- package/dist/game/runner.d.ts +286 -0
- package/dist/game/runner.js +824 -0
- package/dist/game/threats.d.ts +23 -0
- package/dist/game/threats.js +49 -0
- package/dist/game/view.d.ts +47 -0
- package/dist/game/view.js +123 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +24 -0
- package/dist/net/bits.d.ts +33 -0
- package/dist/net/bits.js +135 -0
- package/dist/net/client.d.ts +75 -0
- package/dist/net/client.js +151 -0
- package/dist/net/index.d.ts +23 -0
- package/dist/net/index.js +23 -0
- package/dist/net/input.d.ts +49 -0
- package/dist/net/input.js +112 -0
- package/dist/net/interpolation.d.ts +37 -0
- package/dist/net/interpolation.js +97 -0
- package/dist/net/netsim.d.ts +22 -0
- package/dist/net/netsim.js +52 -0
- package/dist/net/prediction.d.ts +31 -0
- package/dist/net/prediction.js +101 -0
- package/dist/net/profile-client.d.ts +75 -0
- package/dist/net/profile-client.js +173 -0
- package/dist/net/protocol.d.ts +215 -0
- package/dist/net/protocol.js +10 -0
- package/dist/net/room-client.d.ts +65 -0
- package/dist/net/room-client.js +156 -0
- package/dist/net/schema.d.ts +78 -0
- package/dist/net/schema.js +121 -0
- package/dist/net/sim-adapter.d.ts +134 -0
- package/dist/net/sim-adapter.js +22 -0
- package/dist/net/snapshot.d.ts +61 -0
- package/dist/net/snapshot.js +301 -0
- package/dist/rules/adapter.d.ts +53 -0
- package/dist/rules/adapter.js +261 -0
- package/dist/rules/cards.d.ts +115 -0
- package/dist/rules/cards.js +547 -0
- package/dist/rules/collector.d.ts +161 -0
- package/dist/rules/collector.js +732 -0
- package/dist/rules/genres.d.ts +13 -0
- package/dist/rules/genres.js +38 -0
- package/dist/rules/harness.d.ts +16 -0
- package/dist/rules/harness.js +127 -0
- package/dist/rules/idle.d.ts +115 -0
- package/dist/rules/idle.js +370 -0
- package/dist/rules/index.d.ts +16 -0
- package/dist/rules/index.js +14 -0
- package/dist/rules/kit.d.ts +171 -0
- package/dist/rules/kit.js +88 -0
- package/dist/rules/tower.d.ts +214 -0
- package/dist/rules/tower.js +655 -0
- package/dist/runtime/arena.d.ts +86 -0
- package/dist/runtime/arena.js +269 -0
- package/dist/runtime/assets.d.ts +26 -0
- package/dist/runtime/assets.js +35 -0
- package/dist/runtime/camera.d.ts +113 -0
- package/dist/runtime/camera.js +247 -0
- package/dist/runtime/crowd.d.ts +18 -0
- package/dist/runtime/crowd.js +62 -0
- package/dist/runtime/feel/audio.d.ts +150 -0
- package/dist/runtime/feel/audio.js +327 -0
- package/dist/runtime/feel/clock.d.ts +52 -0
- package/dist/runtime/feel/clock.js +80 -0
- package/dist/runtime/feel/flash.d.ts +28 -0
- package/dist/runtime/feel/flash.js +60 -0
- package/dist/runtime/feel/index.d.ts +27 -0
- package/dist/runtime/feel/index.js +16 -0
- package/dist/runtime/feel/kit.d.ts +159 -0
- package/dist/runtime/feel/kit.js +226 -0
- package/dist/runtime/feel/knockback.d.ts +41 -0
- package/dist/runtime/feel/knockback.js +70 -0
- package/dist/runtime/feel/noise.d.ts +6 -0
- package/dist/runtime/feel/noise.js +30 -0
- package/dist/runtime/feel/numbers.d.ts +91 -0
- package/dist/runtime/feel/numbers.js +172 -0
- package/dist/runtime/feel/rumble.d.ts +40 -0
- package/dist/runtime/feel/rumble.js +58 -0
- package/dist/runtime/feel/sound.d.ts +96 -0
- package/dist/runtime/feel/sound.js +176 -0
- package/dist/runtime/feel/spring.d.ts +42 -0
- package/dist/runtime/feel/spring.js +95 -0
- package/dist/runtime/feel/trauma.d.ts +48 -0
- package/dist/runtime/feel/trauma.js +76 -0
- package/dist/runtime/feel/tween.d.ts +66 -0
- package/dist/runtime/feel/tween.js +180 -0
- package/dist/runtime/feel/types.d.ts +30 -0
- package/dist/runtime/feel/types.js +5 -0
- package/dist/runtime/index.d.ts +28 -0
- package/dist/runtime/index.js +26 -0
- package/dist/runtime/input.d.ts +38 -0
- package/dist/runtime/input.js +159 -0
- package/dist/runtime/interpolate.d.ts +6 -0
- package/dist/runtime/interpolate.js +13 -0
- package/dist/runtime/render/animation.d.ts +63 -0
- package/dist/runtime/render/animation.js +128 -0
- package/dist/runtime/render/atmosphere.d.ts +32 -0
- package/dist/runtime/render/atmosphere.js +59 -0
- package/dist/runtime/render/crowd-motion.d.ts +68 -0
- package/dist/runtime/render/crowd-motion.js +163 -0
- package/dist/runtime/render/decals.d.ts +64 -0
- package/dist/runtime/render/decals.js +222 -0
- package/dist/runtime/render/highlight.d.ts +29 -0
- package/dist/runtime/render/highlight.js +110 -0
- package/dist/runtime/render/index.d.ts +35 -0
- package/dist/runtime/render/index.js +22 -0
- package/dist/runtime/render/lighting.d.ts +50 -0
- package/dist/runtime/render/lighting.js +142 -0
- package/dist/runtime/render/particles.d.ts +117 -0
- package/dist/runtime/render/particles.js +289 -0
- package/dist/runtime/render/post.d.ts +92 -0
- package/dist/runtime/render/post.js +191 -0
- package/dist/runtime/render/presets.d.ts +57 -0
- package/dist/runtime/render/presets.js +116 -0
- package/dist/runtime/render/quality.d.ts +113 -0
- package/dist/runtime/render/quality.js +180 -0
- package/dist/runtime/render/rig.d.ts +29 -0
- package/dist/runtime/render/rig.js +107 -0
- package/dist/runtime/render/sprite.d.ts +34 -0
- package/dist/runtime/render/sprite.js +58 -0
- package/dist/runtime/render/stack.d.ts +74 -0
- package/dist/runtime/render/stack.js +132 -0
- package/dist/runtime/render/vat.d.ts +78 -0
- package/dist/runtime/render/vat.js +219 -0
- package/dist/runtime/renderer.d.ts +19 -0
- package/dist/runtime/renderer.js +18 -0
- package/dist/runtime/stats.d.ts +11 -0
- package/dist/runtime/stats.js +29 -0
- package/dist/runtime/styles/handdrawn/ground.d.ts +11 -0
- package/dist/runtime/styles/handdrawn/ground.js +282 -0
- package/dist/runtime/styles/handdrawn/index.d.ts +4 -0
- package/dist/runtime/styles/handdrawn/index.js +94 -0
- package/dist/runtime/styles/handdrawn/ink.d.ts +31 -0
- package/dist/runtime/styles/handdrawn/ink.js +68 -0
- package/dist/runtime/styles/handdrawn/looks.d.ts +18 -0
- package/dist/runtime/styles/handdrawn/looks.js +42 -0
- package/dist/runtime/styles/handdrawn/paint.d.ts +59 -0
- package/dist/runtime/styles/handdrawn/paint.js +129 -0
- package/dist/runtime/styles/handdrawn/palette.d.ts +49 -0
- package/dist/runtime/styles/handdrawn/palette.js +70 -0
- package/dist/runtime/styles/handdrawn/textures.d.ts +27 -0
- package/dist/runtime/styles/handdrawn/textures.js +150 -0
- package/dist/runtime/styles/handdrawn/vfx.d.ts +14 -0
- package/dist/runtime/styles/handdrawn/vfx.js +73 -0
- package/dist/runtime/styles/index.d.ts +9 -0
- package/dist/runtime/styles/index.js +32 -0
- package/dist/runtime/styles/kit.d.ts +193 -0
- package/dist/runtime/styles/kit.js +1 -0
- package/dist/runtime/styles/pixel/index.d.ts +46 -0
- package/dist/runtime/styles/pixel/index.js +167 -0
- package/dist/runtime/styles/ps1/index.d.ts +29 -0
- package/dist/runtime/styles/ps1/index.js +41 -0
- package/dist/runtime/styles/ps1/lights.d.ts +47 -0
- package/dist/runtime/styles/ps1/lights.js +146 -0
- package/dist/runtime/styles/ps1/materials.d.ts +62 -0
- package/dist/runtime/styles/ps1/materials.js +285 -0
- package/dist/runtime/styles/ps1/pipeline.d.ts +52 -0
- package/dist/runtime/styles/ps1/pipeline.js +111 -0
- package/dist/runtime/styles/ps1/surfaces.d.ts +44 -0
- package/dist/runtime/styles/ps1/surfaces.js +228 -0
- package/dist/runtime/styles/toon/index.d.ts +5 -0
- package/dist/runtime/styles/toon/index.js +178 -0
- package/dist/runtime/styles/toon/ink.d.ts +39 -0
- package/dist/runtime/styles/toon/ink.js +73 -0
- package/dist/runtime/styles/toon/look.d.ts +10 -0
- package/dist/runtime/styles/toon/look.js +112 -0
- package/dist/runtime/styles/toon/material.d.ts +74 -0
- package/dist/runtime/styles/toon/material.js +208 -0
- package/dist/runtime/styles/toon/normals.d.ts +26 -0
- package/dist/runtime/styles/toon/normals.js +127 -0
- package/dist/runtime/styles/toon/shadows.d.ts +24 -0
- package/dist/runtime/styles/toon/shadows.js +42 -0
- package/dist/runtime/styles/toon/vfx.d.ts +15 -0
- package/dist/runtime/styles/toon/vfx.js +47 -0
- package/dist/runtime/styles/view.d.ts +35 -0
- package/dist/runtime/styles/view.js +34 -0
- package/dist/runtime/styles/voxel/core.d.ts +114 -0
- package/dist/runtime/styles/voxel/core.js +577 -0
- package/dist/runtime/styles/voxel/geometry.d.ts +27 -0
- package/dist/runtime/styles/voxel/geometry.js +40 -0
- package/dist/runtime/styles/voxel/index.d.ts +21 -0
- package/dist/runtime/styles/voxel/index.js +23 -0
- package/dist/runtime/styles/voxel/kit.d.ts +6 -0
- package/dist/runtime/styles/voxel/kit.js +11 -0
- package/dist/runtime/styles/voxel/look.d.ts +10 -0
- package/dist/runtime/styles/voxel/look.js +16 -0
- package/dist/runtime/styles/voxel/props.d.ts +9 -0
- package/dist/runtime/styles/voxel/props.js +52 -0
- package/dist/runtime/styles/voxel/shapes.d.ts +41 -0
- package/dist/runtime/styles/voxel/shapes.js +83 -0
- package/dist/runtime/styles/voxel/world.d.ts +49 -0
- package/dist/runtime/styles/voxel/world.js +422 -0
- package/llms-full.txt +460 -0
- package/llms.txt +183 -0
- package/package.json +104 -3
|
@@ -0,0 +1,958 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schemas for everything a game declares ("Everything
|
|
4
|
+
* is typed with Zod schemas, so a bad prefab fails at build with a message
|
|
5
|
+
* the agent can act on"). Messages are written for the agent that reads them.
|
|
6
|
+
*/
|
|
7
|
+
/** Templates carry the genre machinery; the model adds content and rules. */
|
|
8
|
+
export declare const TEMPLATES: readonly ["survivor", "arena", "dungeon", "racer", "platformer", "tower-defense", "party", "idle", "cards", "collector"];
|
|
9
|
+
/** Art styles of the asset library (§10). */
|
|
10
|
+
export declare const STYLES: readonly ["pixel", "lowpoly", "toon", "voxel", "ps1", "handdrawn"];
|
|
11
|
+
export declare const idSchema: z.ZodString;
|
|
12
|
+
export declare const assetIdSchema: z.ZodString;
|
|
13
|
+
export declare const vec3Schema: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
14
|
+
/** Lighting presets of the engine's render stack (sun, sky, fog and grading together). */
|
|
15
|
+
export declare const LOOK_PRESETS: readonly ["night", "dusk", "day", "studio"];
|
|
16
|
+
/** GPU particle presets the engine draws (one draw call for all of them). */
|
|
17
|
+
export declare const PARTICLE_PRESETS: readonly ["sparks", "burst", "embers", "smoke", "hitSpark", "dust", "magic"];
|
|
18
|
+
/** Ground decals left behind (scorch marks, splats, shock rings). */
|
|
19
|
+
export declare const DECAL_PRESETS: readonly ["none", "scorch", "splat", "ring"];
|
|
20
|
+
/** Procedural sound cues of the feel kit (no audio files needed). */
|
|
21
|
+
export declare const SOUND_CUES: readonly ["none", "hit", "crunch", "boom", "zap", "chime", "thud"];
|
|
22
|
+
/**
|
|
23
|
+
* How the game looks (the engine's render stack):
|
|
24
|
+
* one preset sets lighting, shadows, sky, fog and colour grading; the
|
|
25
|
+
* other fields fine-tune it. Quality tiers still scale everything down on
|
|
26
|
+
* slow devices, so turning things on here never breaks the frame-rate bar.
|
|
27
|
+
*/
|
|
28
|
+
export declare const lookSchema: z.ZodObject<{
|
|
29
|
+
preset: z.ZodDefault<z.ZodEnum<{
|
|
30
|
+
night: "night";
|
|
31
|
+
dusk: "dusk";
|
|
32
|
+
day: "day";
|
|
33
|
+
studio: "studio";
|
|
34
|
+
}>>;
|
|
35
|
+
bloom: z.ZodOptional<z.ZodNumber>;
|
|
36
|
+
shadows: z.ZodOptional<z.ZodBoolean>;
|
|
37
|
+
outline: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
fog: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
exposure: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
saturation: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
contrast: z.ZodOptional<z.ZodNumber>;
|
|
42
|
+
vignette: z.ZodOptional<z.ZodNumber>;
|
|
43
|
+
tint: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, z.core.$strict>;
|
|
45
|
+
/**
|
|
46
|
+
* Game feel for a prefab or a weapon. On a prefab it
|
|
47
|
+
* is what its death and its hits look and sound like; on a weapon, its
|
|
48
|
+
* impacts. Everything is client-side presentation: it never changes the
|
|
49
|
+
* simulation, so it is safe to tune freely.
|
|
50
|
+
*/
|
|
51
|
+
export declare const feelSchema: z.ZodObject<{
|
|
52
|
+
shake: z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
hitStop: z.ZodOptional<z.ZodNumber>;
|
|
54
|
+
particles: z.ZodOptional<z.ZodEnum<{
|
|
55
|
+
sparks: "sparks";
|
|
56
|
+
burst: "burst";
|
|
57
|
+
embers: "embers";
|
|
58
|
+
smoke: "smoke";
|
|
59
|
+
hitSpark: "hitSpark";
|
|
60
|
+
dust: "dust";
|
|
61
|
+
magic: "magic";
|
|
62
|
+
}>>;
|
|
63
|
+
color: z.ZodOptional<z.ZodString>;
|
|
64
|
+
decal: z.ZodOptional<z.ZodEnum<{
|
|
65
|
+
none: "none";
|
|
66
|
+
scorch: "scorch";
|
|
67
|
+
splat: "splat";
|
|
68
|
+
ring: "ring";
|
|
69
|
+
}>>;
|
|
70
|
+
sound: z.ZodOptional<z.ZodEnum<{
|
|
71
|
+
none: "none";
|
|
72
|
+
hit: "hit";
|
|
73
|
+
crunch: "crunch";
|
|
74
|
+
boom: "boom";
|
|
75
|
+
zap: "zap";
|
|
76
|
+
chime: "chime";
|
|
77
|
+
thud: "thud";
|
|
78
|
+
}>>;
|
|
79
|
+
flash: z.ZodOptional<z.ZodBoolean>;
|
|
80
|
+
}, z.core.$strict>;
|
|
81
|
+
export declare const placeSchema: z.ZodObject<{
|
|
82
|
+
chunks: z.ZodString;
|
|
83
|
+
spawn: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
84
|
+
}, z.core.$strict>;
|
|
85
|
+
/**
|
|
86
|
+
* Platformer: one course, side view, in metres. x runs right (start to
|
|
87
|
+
* flag), y runs up. Boxes are [x, y, width, height] with [x, y] the
|
|
88
|
+
* bottom-left corner; ledges are [x, y, width] one-way platforms (stand on
|
|
89
|
+
* top, jump up through, Down + Jump drops through).
|
|
90
|
+
*/
|
|
91
|
+
export declare const platformLevelSchema: z.ZodObject<{
|
|
92
|
+
name: z.ZodOptional<z.ZodString>;
|
|
93
|
+
start: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
94
|
+
flag: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
95
|
+
killY: z.ZodOptional<z.ZodNumber>;
|
|
96
|
+
blocks: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
97
|
+
ledges: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
98
|
+
hazards: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
99
|
+
springs: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
100
|
+
movers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
101
|
+
at: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
102
|
+
to: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
103
|
+
seconds: z.ZodNumber;
|
|
104
|
+
phase: z.ZodDefault<z.ZodNumber>;
|
|
105
|
+
}, z.core.$strict>>>;
|
|
106
|
+
coins: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
107
|
+
checkpoints: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
108
|
+
}, z.core.$strict>;
|
|
109
|
+
/** Platformer feel numbers (the defaults are tuned; change a few at a time). */
|
|
110
|
+
export declare const motorSchema: z.ZodObject<{
|
|
111
|
+
runSpeed: z.ZodOptional<z.ZodNumber>;
|
|
112
|
+
jumpHeight: z.ZodOptional<z.ZodNumber>;
|
|
113
|
+
timeToApex: z.ZodOptional<z.ZodNumber>;
|
|
114
|
+
fallGravity: z.ZodOptional<z.ZodNumber>;
|
|
115
|
+
jumpCut: z.ZodOptional<z.ZodNumber>;
|
|
116
|
+
coyoteSeconds: z.ZodOptional<z.ZodNumber>;
|
|
117
|
+
bufferSeconds: z.ZodOptional<z.ZodNumber>;
|
|
118
|
+
airJumps: z.ZodOptional<z.ZodNumber>;
|
|
119
|
+
dashSpeed: z.ZodOptional<z.ZodNumber>;
|
|
120
|
+
airAccel: z.ZodOptional<z.ZodNumber>;
|
|
121
|
+
groundAccel: z.ZodOptional<z.ZodNumber>;
|
|
122
|
+
}, z.core.$strict>;
|
|
123
|
+
/**
|
|
124
|
+
* Racer: one circuit, on the ground plane, in metres. points is the closed
|
|
125
|
+
* centreline in driving order (a smooth curve runs through them); boosts and
|
|
126
|
+
* coins are [lap fraction 0..1, lateral -1..1 of the half width].
|
|
127
|
+
*/
|
|
128
|
+
export declare const kartTrackSchema: z.ZodObject<{
|
|
129
|
+
name: z.ZodOptional<z.ZodString>;
|
|
130
|
+
points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
131
|
+
width: z.ZodNumber;
|
|
132
|
+
laps: z.ZodNumber;
|
|
133
|
+
verge: z.ZodOptional<z.ZodNumber>;
|
|
134
|
+
boosts: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
135
|
+
coins: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
136
|
+
}, z.core.$strict>;
|
|
137
|
+
/** Racer handling (the defaults are tuned; change a few at a time). */
|
|
138
|
+
export declare const kartTuningSchema: z.ZodObject<{
|
|
139
|
+
topSpeed: z.ZodOptional<z.ZodNumber>;
|
|
140
|
+
accel: z.ZodOptional<z.ZodNumber>;
|
|
141
|
+
turn: z.ZodOptional<z.ZodNumber>;
|
|
142
|
+
grip: z.ZodOptional<z.ZodNumber>;
|
|
143
|
+
driftGrip: z.ZodOptional<z.ZodNumber>;
|
|
144
|
+
grass: z.ZodOptional<z.ZodNumber>;
|
|
145
|
+
boostSpeed: z.ZodOptional<z.ZodNumber>;
|
|
146
|
+
}, z.core.$strict>;
|
|
147
|
+
export declare const gameSchema: z.ZodObject<{
|
|
148
|
+
template: z.ZodEnum<{
|
|
149
|
+
survivor: "survivor";
|
|
150
|
+
arena: "arena";
|
|
151
|
+
dungeon: "dungeon";
|
|
152
|
+
racer: "racer";
|
|
153
|
+
platformer: "platformer";
|
|
154
|
+
"tower-defense": "tower-defense";
|
|
155
|
+
party: "party";
|
|
156
|
+
idle: "idle";
|
|
157
|
+
cards: "cards";
|
|
158
|
+
collector: "collector";
|
|
159
|
+
}>;
|
|
160
|
+
style: z.ZodEnum<{
|
|
161
|
+
pixel: "pixel";
|
|
162
|
+
lowpoly: "lowpoly";
|
|
163
|
+
toon: "toon";
|
|
164
|
+
voxel: "voxel";
|
|
165
|
+
ps1: "ps1";
|
|
166
|
+
handdrawn: "handdrawn";
|
|
167
|
+
}>;
|
|
168
|
+
places: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
169
|
+
chunks: z.ZodString;
|
|
170
|
+
spawn: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
171
|
+
}, z.core.$strict>>;
|
|
172
|
+
players: z.ZodObject<{
|
|
173
|
+
prefab: z.ZodString;
|
|
174
|
+
max: z.ZodNumber;
|
|
175
|
+
weapon: z.ZodOptional<z.ZodString>;
|
|
176
|
+
xp: z.ZodOptional<z.ZodObject<{
|
|
177
|
+
base: z.ZodNumber;
|
|
178
|
+
growth: z.ZodNumber;
|
|
179
|
+
exponent: z.ZodOptional<z.ZodNumber>;
|
|
180
|
+
}, z.core.$strict>>;
|
|
181
|
+
rerolls: z.ZodOptional<z.ZodNumber>;
|
|
182
|
+
magnet: z.ZodOptional<z.ZodNumber>;
|
|
183
|
+
hitIframes: z.ZodOptional<z.ZodNumber>;
|
|
184
|
+
bossHealthPerPlayer: z.ZodOptional<z.ZodNumber>;
|
|
185
|
+
share: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
186
|
+
collector: "collector";
|
|
187
|
+
nearby: "nearby";
|
|
188
|
+
all: "all";
|
|
189
|
+
}>, z.ZodObject<{
|
|
190
|
+
mode: z.ZodEnum<{
|
|
191
|
+
collector: "collector";
|
|
192
|
+
nearby: "nearby";
|
|
193
|
+
all: "all";
|
|
194
|
+
}>;
|
|
195
|
+
fraction: z.ZodDefault<z.ZodNumber>;
|
|
196
|
+
radius: z.ZodDefault<z.ZodNumber>;
|
|
197
|
+
}, z.core.$strict>]>>;
|
|
198
|
+
crit: z.ZodOptional<z.ZodObject<{
|
|
199
|
+
chance: z.ZodNumber;
|
|
200
|
+
multiplier: z.ZodDefault<z.ZodNumber>;
|
|
201
|
+
}, z.core.$strict>>;
|
|
202
|
+
reviveBuff: z.ZodOptional<z.ZodObject<{
|
|
203
|
+
seconds: z.ZodNumber;
|
|
204
|
+
damage: z.ZodDefault<z.ZodNumber>;
|
|
205
|
+
speed: z.ZodDefault<z.ZodNumber>;
|
|
206
|
+
}, z.core.$strict>>;
|
|
207
|
+
downed: z.ZodOptional<z.ZodObject<{
|
|
208
|
+
seconds: z.ZodDefault<z.ZodNumber>;
|
|
209
|
+
crawl: z.ZodDefault<z.ZodNumber>;
|
|
210
|
+
selfRevives: z.ZodDefault<z.ZodNumber>;
|
|
211
|
+
respawn: z.ZodDefault<z.ZodNumber>;
|
|
212
|
+
}, z.core.$strict>>;
|
|
213
|
+
lateJoinBehind: z.ZodOptional<z.ZodNumber>;
|
|
214
|
+
loadout: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
215
|
+
bots: z.ZodOptional<z.ZodNumber>;
|
|
216
|
+
respawn: z.ZodOptional<z.ZodNumber>;
|
|
217
|
+
drop: z.ZodOptional<z.ZodString>;
|
|
218
|
+
appearance: z.ZodOptional<z.ZodObject<{
|
|
219
|
+
tint: z.ZodOptional<z.ZodString>;
|
|
220
|
+
accent: z.ZodOptional<z.ZodString>;
|
|
221
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
222
|
+
parts: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
223
|
+
horns: "horns";
|
|
224
|
+
ears_long: "ears_long";
|
|
225
|
+
ears_round: "ears_round";
|
|
226
|
+
antenna: "antenna";
|
|
227
|
+
crown: "crown";
|
|
228
|
+
hat_cap: "hat_cap";
|
|
229
|
+
hat_top: "hat_top";
|
|
230
|
+
mustache: "mustache";
|
|
231
|
+
tail: "tail";
|
|
232
|
+
tail_bolt: "tail_bolt";
|
|
233
|
+
wings: "wings";
|
|
234
|
+
armor: "armor";
|
|
235
|
+
backpack: "backpack";
|
|
236
|
+
big_wheels: "big_wheels";
|
|
237
|
+
}>>>;
|
|
238
|
+
}, z.core.$strict>>;
|
|
239
|
+
}, z.core.$strict>;
|
|
240
|
+
tickRate: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<30>, z.ZodLiteral<60>]>>;
|
|
241
|
+
arena: z.ZodOptional<z.ZodObject<{
|
|
242
|
+
halfSize: z.ZodNumber;
|
|
243
|
+
pillars: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
244
|
+
spawns: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
245
|
+
}, z.core.$strict>>;
|
|
246
|
+
field: z.ZodOptional<z.ZodObject<{
|
|
247
|
+
halfSize: z.ZodNumber;
|
|
248
|
+
pillars: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
249
|
+
walls: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
250
|
+
floors: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
251
|
+
}, z.core.$strict>>;
|
|
252
|
+
levels: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
253
|
+
name: z.ZodOptional<z.ZodString>;
|
|
254
|
+
start: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
255
|
+
flag: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
256
|
+
killY: z.ZodOptional<z.ZodNumber>;
|
|
257
|
+
blocks: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
258
|
+
ledges: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
259
|
+
hazards: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
260
|
+
springs: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
261
|
+
movers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
262
|
+
at: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
263
|
+
to: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
264
|
+
seconds: z.ZodNumber;
|
|
265
|
+
phase: z.ZodDefault<z.ZodNumber>;
|
|
266
|
+
}, z.core.$strict>>>;
|
|
267
|
+
coins: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
268
|
+
checkpoints: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
269
|
+
}, z.core.$strict>>>;
|
|
270
|
+
motor: z.ZodOptional<z.ZodObject<{
|
|
271
|
+
runSpeed: z.ZodOptional<z.ZodNumber>;
|
|
272
|
+
jumpHeight: z.ZodOptional<z.ZodNumber>;
|
|
273
|
+
timeToApex: z.ZodOptional<z.ZodNumber>;
|
|
274
|
+
fallGravity: z.ZodOptional<z.ZodNumber>;
|
|
275
|
+
jumpCut: z.ZodOptional<z.ZodNumber>;
|
|
276
|
+
coyoteSeconds: z.ZodOptional<z.ZodNumber>;
|
|
277
|
+
bufferSeconds: z.ZodOptional<z.ZodNumber>;
|
|
278
|
+
airJumps: z.ZodOptional<z.ZodNumber>;
|
|
279
|
+
dashSpeed: z.ZodOptional<z.ZodNumber>;
|
|
280
|
+
airAccel: z.ZodOptional<z.ZodNumber>;
|
|
281
|
+
groundAccel: z.ZodOptional<z.ZodNumber>;
|
|
282
|
+
}, z.core.$strict>>;
|
|
283
|
+
tracks: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
284
|
+
name: z.ZodOptional<z.ZodString>;
|
|
285
|
+
points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
286
|
+
width: z.ZodNumber;
|
|
287
|
+
laps: z.ZodNumber;
|
|
288
|
+
verge: z.ZodOptional<z.ZodNumber>;
|
|
289
|
+
boosts: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
290
|
+
coins: z.ZodDefault<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
291
|
+
}, z.core.$strict>>>;
|
|
292
|
+
kart: z.ZodOptional<z.ZodObject<{
|
|
293
|
+
topSpeed: z.ZodOptional<z.ZodNumber>;
|
|
294
|
+
accel: z.ZodOptional<z.ZodNumber>;
|
|
295
|
+
turn: z.ZodOptional<z.ZodNumber>;
|
|
296
|
+
grip: z.ZodOptional<z.ZodNumber>;
|
|
297
|
+
driftGrip: z.ZodOptional<z.ZodNumber>;
|
|
298
|
+
grass: z.ZodOptional<z.ZodNumber>;
|
|
299
|
+
boostSpeed: z.ZodOptional<z.ZodNumber>;
|
|
300
|
+
}, z.core.$strict>>;
|
|
301
|
+
round: z.ZodOptional<z.ZodObject<{
|
|
302
|
+
seconds: z.ZodNumber;
|
|
303
|
+
frags: z.ZodOptional<z.ZodNumber>;
|
|
304
|
+
}, z.core.$strict>>;
|
|
305
|
+
look: z.ZodOptional<z.ZodObject<{
|
|
306
|
+
preset: z.ZodDefault<z.ZodEnum<{
|
|
307
|
+
night: "night";
|
|
308
|
+
dusk: "dusk";
|
|
309
|
+
day: "day";
|
|
310
|
+
studio: "studio";
|
|
311
|
+
}>>;
|
|
312
|
+
bloom: z.ZodOptional<z.ZodNumber>;
|
|
313
|
+
shadows: z.ZodOptional<z.ZodBoolean>;
|
|
314
|
+
outline: z.ZodOptional<z.ZodBoolean>;
|
|
315
|
+
fog: z.ZodOptional<z.ZodNumber>;
|
|
316
|
+
exposure: z.ZodOptional<z.ZodNumber>;
|
|
317
|
+
saturation: z.ZodOptional<z.ZodNumber>;
|
|
318
|
+
contrast: z.ZodOptional<z.ZodNumber>;
|
|
319
|
+
vignette: z.ZodOptional<z.ZodNumber>;
|
|
320
|
+
tint: z.ZodOptional<z.ZodString>;
|
|
321
|
+
}, z.core.$strict>>;
|
|
322
|
+
}, z.core.$strict>;
|
|
323
|
+
/**
|
|
324
|
+
* Enemy behaviours the sim runs (roles). Every big hit is telegraphed with
|
|
325
|
+
* a ground marker that fills before it lands.
|
|
326
|
+
* - chase (default): runs at the nearest player. tank: chase, for slow heavy prefabs (give it mass).
|
|
327
|
+
* - idle / none: stands still.
|
|
328
|
+
* - runner: aims where the player will be in 0.5 s. Fast and fragile.
|
|
329
|
+
* - charger: inside attack.range (6 m) stops, shows a lane for 0.55 s, dashes 3.4x along it for 0.6 s, recovers 1 s.
|
|
330
|
+
* - ranged: keeps ~80% of attack.range (10 m), backs off, shows an aim line 0.3 s, fires a slow shot (attack.speed 7 m/s).
|
|
331
|
+
* - bomber: next to a player stops, arms a 1 s fuse circle (attack.radius 2.5 m), explodes for 1.4x damage; the blast hurts enemies too.
|
|
332
|
+
* - shielder: every 6 s shields the 6 nearest allies for 35% of their health, 8 s.
|
|
333
|
+
* - healer: every 3.5 s heals the 6 nearest allies 7%.
|
|
334
|
+
* - summoner: keeps its distance and calls attack.count (2) attack.summon adds every 7 s, at most 4 alive.
|
|
335
|
+
* - flee: runs from the nearest player. wander: drifts.
|
|
336
|
+
* Anything else is rejected at build time, never silently ignored.
|
|
337
|
+
*/
|
|
338
|
+
export declare const AI_BEHAVIOURS: readonly ["none", "chase", "idle", "tank", "runner", "charger", "ranged", "bomber", "shielder", "healer", "summoner", "flee", "wander"];
|
|
339
|
+
/** Attacks a boss can declare. Each one is telegraphed. */
|
|
340
|
+
export declare const BOSS_ATTACKS: readonly ["slam", "dash", "leap", "rain", "ring", "fan", "summon"];
|
|
341
|
+
/** Numbers for an enemy's role attack (all optional; the role's defaults fill the rest). Seconds and metres. */
|
|
342
|
+
export declare const attackSchema: z.ZodObject<{
|
|
343
|
+
damage: z.ZodOptional<z.ZodNumber>;
|
|
344
|
+
range: z.ZodOptional<z.ZodNumber>;
|
|
345
|
+
windup: z.ZodOptional<z.ZodNumber>;
|
|
346
|
+
cooldown: z.ZodOptional<z.ZodNumber>;
|
|
347
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
348
|
+
radius: z.ZodOptional<z.ZodNumber>;
|
|
349
|
+
summon: z.ZodOptional<z.ZodString>;
|
|
350
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
351
|
+
}, z.core.$strict>;
|
|
352
|
+
/**
|
|
353
|
+
* A boss's patterns: it alternates near and far modes every 4-9 s and picks
|
|
354
|
+
* telegraphed attacks: slam (circle around it, 0.85 s), dash (11 m lane,
|
|
355
|
+
* 0.75 s), leap (lands on a circle at the target, 1.15 s), rain (4 circles
|
|
356
|
+
* near players), ring (14 shots outward), fan (7 shots at the target),
|
|
357
|
+
* summon (adds). Below enrageAt of its health it moves 15% faster, winds up
|
|
358
|
+
* 20% quicker and throws more. A "mini" boss raises "miniboss.killed" when
|
|
359
|
+
* it dies; a "final" boss (default) raises "boss.killed".
|
|
360
|
+
*/
|
|
361
|
+
export declare const bossSchema: z.ZodObject<{
|
|
362
|
+
attacks: z.ZodArray<z.ZodEnum<{
|
|
363
|
+
ring: "ring";
|
|
364
|
+
slam: "slam";
|
|
365
|
+
dash: "dash";
|
|
366
|
+
leap: "leap";
|
|
367
|
+
rain: "rain";
|
|
368
|
+
fan: "fan";
|
|
369
|
+
summon: "summon";
|
|
370
|
+
}>>;
|
|
371
|
+
enrageAt: z.ZodDefault<z.ZodNumber>;
|
|
372
|
+
summon: z.ZodOptional<z.ZodString>;
|
|
373
|
+
rank: z.ZodDefault<z.ZodEnum<{
|
|
374
|
+
final: "final";
|
|
375
|
+
mini: "mini";
|
|
376
|
+
}>>;
|
|
377
|
+
}, z.core.$strict>;
|
|
378
|
+
export declare const prefabSchema: z.ZodObject<{
|
|
379
|
+
model: z.ZodString;
|
|
380
|
+
health: z.ZodNumber;
|
|
381
|
+
speed: z.ZodNumber;
|
|
382
|
+
ai: z.ZodOptional<z.ZodEnum<{
|
|
383
|
+
idle: "idle";
|
|
384
|
+
none: "none";
|
|
385
|
+
chase: "chase";
|
|
386
|
+
tank: "tank";
|
|
387
|
+
runner: "runner";
|
|
388
|
+
charger: "charger";
|
|
389
|
+
ranged: "ranged";
|
|
390
|
+
bomber: "bomber";
|
|
391
|
+
shielder: "shielder";
|
|
392
|
+
healer: "healer";
|
|
393
|
+
summoner: "summoner";
|
|
394
|
+
flee: "flee";
|
|
395
|
+
wander: "wander";
|
|
396
|
+
}>>;
|
|
397
|
+
attack: z.ZodOptional<z.ZodObject<{
|
|
398
|
+
damage: z.ZodOptional<z.ZodNumber>;
|
|
399
|
+
range: z.ZodOptional<z.ZodNumber>;
|
|
400
|
+
windup: z.ZodOptional<z.ZodNumber>;
|
|
401
|
+
cooldown: z.ZodOptional<z.ZodNumber>;
|
|
402
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
403
|
+
radius: z.ZodOptional<z.ZodNumber>;
|
|
404
|
+
summon: z.ZodOptional<z.ZodString>;
|
|
405
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
406
|
+
}, z.core.$strict>>;
|
|
407
|
+
split: z.ZodOptional<z.ZodObject<{
|
|
408
|
+
into: z.ZodString;
|
|
409
|
+
count: z.ZodNumber;
|
|
410
|
+
}, z.core.$strict>>;
|
|
411
|
+
radius: z.ZodOptional<z.ZodNumber>;
|
|
412
|
+
damage: z.ZodOptional<z.ZodNumber>;
|
|
413
|
+
drops: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
414
|
+
id: z.ZodString;
|
|
415
|
+
chance: z.ZodNumber;
|
|
416
|
+
}, z.core.$strict>]>>>;
|
|
417
|
+
pickup: z.ZodOptional<z.ZodObject<{
|
|
418
|
+
effect: z.ZodEnum<{
|
|
419
|
+
heal: "heal";
|
|
420
|
+
vacuum: "vacuum";
|
|
421
|
+
bomb: "bomb";
|
|
422
|
+
chest: "chest";
|
|
423
|
+
}>;
|
|
424
|
+
amount: z.ZodOptional<z.ZodNumber>;
|
|
425
|
+
evolve: z.ZodOptional<z.ZodBoolean>;
|
|
426
|
+
}, z.core.$strict>>;
|
|
427
|
+
prop: z.ZodOptional<z.ZodBoolean>;
|
|
428
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
429
|
+
pickup: "pickup";
|
|
430
|
+
enemy: "enemy";
|
|
431
|
+
}>>;
|
|
432
|
+
value: z.ZodOptional<z.ZodNumber>;
|
|
433
|
+
boss: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
434
|
+
attacks: z.ZodArray<z.ZodEnum<{
|
|
435
|
+
ring: "ring";
|
|
436
|
+
slam: "slam";
|
|
437
|
+
dash: "dash";
|
|
438
|
+
leap: "leap";
|
|
439
|
+
rain: "rain";
|
|
440
|
+
fan: "fan";
|
|
441
|
+
summon: "summon";
|
|
442
|
+
}>>;
|
|
443
|
+
enrageAt: z.ZodDefault<z.ZodNumber>;
|
|
444
|
+
summon: z.ZodOptional<z.ZodString>;
|
|
445
|
+
rank: z.ZodDefault<z.ZodEnum<{
|
|
446
|
+
final: "final";
|
|
447
|
+
mini: "mini";
|
|
448
|
+
}>>;
|
|
449
|
+
}, z.core.$strict>]>>;
|
|
450
|
+
mass: z.ZodOptional<z.ZodNumber>;
|
|
451
|
+
feel: z.ZodOptional<z.ZodObject<{
|
|
452
|
+
shake: z.ZodOptional<z.ZodNumber>;
|
|
453
|
+
hitStop: z.ZodOptional<z.ZodNumber>;
|
|
454
|
+
particles: z.ZodOptional<z.ZodEnum<{
|
|
455
|
+
sparks: "sparks";
|
|
456
|
+
burst: "burst";
|
|
457
|
+
embers: "embers";
|
|
458
|
+
smoke: "smoke";
|
|
459
|
+
hitSpark: "hitSpark";
|
|
460
|
+
dust: "dust";
|
|
461
|
+
magic: "magic";
|
|
462
|
+
}>>;
|
|
463
|
+
color: z.ZodOptional<z.ZodString>;
|
|
464
|
+
decal: z.ZodOptional<z.ZodEnum<{
|
|
465
|
+
none: "none";
|
|
466
|
+
scorch: "scorch";
|
|
467
|
+
splat: "splat";
|
|
468
|
+
ring: "ring";
|
|
469
|
+
}>>;
|
|
470
|
+
sound: z.ZodOptional<z.ZodEnum<{
|
|
471
|
+
none: "none";
|
|
472
|
+
hit: "hit";
|
|
473
|
+
crunch: "crunch";
|
|
474
|
+
boom: "boom";
|
|
475
|
+
zap: "zap";
|
|
476
|
+
chime: "chime";
|
|
477
|
+
thud: "thud";
|
|
478
|
+
}>>;
|
|
479
|
+
flash: z.ZodOptional<z.ZodBoolean>;
|
|
480
|
+
}, z.core.$strict>>;
|
|
481
|
+
appearance: z.ZodOptional<z.ZodObject<{
|
|
482
|
+
tint: z.ZodOptional<z.ZodString>;
|
|
483
|
+
accent: z.ZodOptional<z.ZodString>;
|
|
484
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
485
|
+
parts: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
486
|
+
horns: "horns";
|
|
487
|
+
ears_long: "ears_long";
|
|
488
|
+
ears_round: "ears_round";
|
|
489
|
+
antenna: "antenna";
|
|
490
|
+
crown: "crown";
|
|
491
|
+
hat_cap: "hat_cap";
|
|
492
|
+
hat_top: "hat_top";
|
|
493
|
+
mustache: "mustache";
|
|
494
|
+
tail: "tail";
|
|
495
|
+
tail_bolt: "tail_bolt";
|
|
496
|
+
wings: "wings";
|
|
497
|
+
armor: "armor";
|
|
498
|
+
backpack: "backpack";
|
|
499
|
+
big_wheels: "big_wheels";
|
|
500
|
+
}>>>;
|
|
501
|
+
}, z.core.$strict>>;
|
|
502
|
+
}, z.core.$strict>;
|
|
503
|
+
export declare const WEAPON_KINDS: readonly ["nova", "bolt", "orbit", "blaster", "beam", "cone", "chain", "aura", "meteor", "boomerang"];
|
|
504
|
+
/** Numbers a weapon level can change. */
|
|
505
|
+
export declare const LEVEL_FIELDS: readonly ["damage", "cooldown", "count", "pierce", "range", "speed", "knockback", "spread"];
|
|
506
|
+
export declare const weaponLevelSchema: z.ZodObject<{
|
|
507
|
+
damage: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
508
|
+
cooldown: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
509
|
+
count: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
510
|
+
pierce: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
511
|
+
range: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
512
|
+
speed: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
513
|
+
knockback: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
514
|
+
spread: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
515
|
+
}, z.core.$strict>;
|
|
516
|
+
/**
|
|
517
|
+
* A weapon.
|
|
518
|
+
* Survivor template (fires by itself):
|
|
519
|
+
* - nova: hits every enemy within `range` m, every `cooldown` s, when one is in range;
|
|
520
|
+
* - bolt: shoots `count` projectiles at the nearest enemy within `range` m at `speed` m/s, each passing through `pierce` enemies;
|
|
521
|
+
* - orbit: `count` blades circle at `range` m, `speed` rad/s, hitting what they touch;
|
|
522
|
+
* - cone: sweeps `spread` degrees (360: all around) where the player faces, `range` m deep;
|
|
523
|
+
* - chain: strikes the nearest enemy in `range`, then jumps `count` times to the nearest enemy within `speed` m (default 4);
|
|
524
|
+
* - aura: a field of `range` m around the player, damaging everything inside every `cooldown` s;
|
|
525
|
+
* - meteor: `count` circles of `blast` m land on random enemies within `range` m, 0.6 s after they show;
|
|
526
|
+
* - boomerang: `count` blades fly out `range` m at `speed` m/s and come back, hitting everything both ways.
|
|
527
|
+
* levels: [...] declares each level's change (see weaponLevelSchema); without it each level adds 25%
|
|
528
|
+
* damage, cuts cooldowns 6%, adds a projectile or blade every second level and grows novas and auras 8%.
|
|
529
|
+
* evolve: { into, requires }: at max level, with the passive `requires` taken, the evolution card
|
|
530
|
+
* always shows; the weapon `into` (declared like any weapon, never offered on its own) replaces it.
|
|
531
|
+
* Arena template (fires while the player holds fire, along their aim):
|
|
532
|
+
* - blaster: `count` projectiles fanned over `spread` degrees at `speed` m/s for `range` m;
|
|
533
|
+
* - beam: an instant hit to `range` m, stopped by pillars (lag-compensated on the server);
|
|
534
|
+
* - nova: hits every opponent within `range` m.
|
|
535
|
+
*/
|
|
536
|
+
export declare const weaponSchema: z.ZodObject<{
|
|
537
|
+
model: z.ZodOptional<z.ZodString>;
|
|
538
|
+
kind: z.ZodEnum<{
|
|
539
|
+
nova: "nova";
|
|
540
|
+
bolt: "bolt";
|
|
541
|
+
orbit: "orbit";
|
|
542
|
+
blaster: "blaster";
|
|
543
|
+
beam: "beam";
|
|
544
|
+
cone: "cone";
|
|
545
|
+
chain: "chain";
|
|
546
|
+
aura: "aura";
|
|
547
|
+
meteor: "meteor";
|
|
548
|
+
boomerang: "boomerang";
|
|
549
|
+
}>;
|
|
550
|
+
damage: z.ZodNumber;
|
|
551
|
+
cooldown: z.ZodNumber;
|
|
552
|
+
range: z.ZodNumber;
|
|
553
|
+
count: z.ZodDefault<z.ZodNumber>;
|
|
554
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
555
|
+
pierce: z.ZodDefault<z.ZodNumber>;
|
|
556
|
+
knockback: z.ZodDefault<z.ZodNumber>;
|
|
557
|
+
maxLevel: z.ZodOptional<z.ZodNumber>;
|
|
558
|
+
spread: z.ZodOptional<z.ZodNumber>;
|
|
559
|
+
blast: z.ZodOptional<z.ZodNumber>;
|
|
560
|
+
levels: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
561
|
+
damage: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
562
|
+
cooldown: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
563
|
+
count: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
564
|
+
pierce: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
565
|
+
range: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
566
|
+
speed: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
567
|
+
knockback: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
568
|
+
spread: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
569
|
+
}, z.core.$strict>>>;
|
|
570
|
+
evolve: z.ZodOptional<z.ZodObject<{
|
|
571
|
+
into: z.ZodString;
|
|
572
|
+
requires: z.ZodString;
|
|
573
|
+
}, z.core.$strict>>;
|
|
574
|
+
feel: z.ZodOptional<z.ZodObject<{
|
|
575
|
+
shake: z.ZodOptional<z.ZodNumber>;
|
|
576
|
+
hitStop: z.ZodOptional<z.ZodNumber>;
|
|
577
|
+
particles: z.ZodOptional<z.ZodEnum<{
|
|
578
|
+
sparks: "sparks";
|
|
579
|
+
burst: "burst";
|
|
580
|
+
embers: "embers";
|
|
581
|
+
smoke: "smoke";
|
|
582
|
+
hitSpark: "hitSpark";
|
|
583
|
+
dust: "dust";
|
|
584
|
+
magic: "magic";
|
|
585
|
+
}>>;
|
|
586
|
+
color: z.ZodOptional<z.ZodString>;
|
|
587
|
+
decal: z.ZodOptional<z.ZodEnum<{
|
|
588
|
+
none: "none";
|
|
589
|
+
scorch: "scorch";
|
|
590
|
+
splat: "splat";
|
|
591
|
+
ring: "ring";
|
|
592
|
+
}>>;
|
|
593
|
+
sound: z.ZodOptional<z.ZodEnum<{
|
|
594
|
+
none: "none";
|
|
595
|
+
hit: "hit";
|
|
596
|
+
crunch: "crunch";
|
|
597
|
+
boom: "boom";
|
|
598
|
+
zap: "zap";
|
|
599
|
+
chime: "chime";
|
|
600
|
+
thud: "thud";
|
|
601
|
+
}>>;
|
|
602
|
+
flash: z.ZodOptional<z.ZodBoolean>;
|
|
603
|
+
}, z.core.$strict>>;
|
|
604
|
+
}, z.core.$strict>;
|
|
605
|
+
export declare const STAT_KINDS: readonly ["speed", "maxHealth", "magnet", "might", "haste", "regen", "armor", "area", "amount"];
|
|
606
|
+
/**
|
|
607
|
+
* A passive upgrade offered at level-up. Per level: speed and might
|
|
608
|
+
* multiply by (1 + step x level); haste cuts cooldowns by step x level;
|
|
609
|
+
* maxHealth and magnet (m) add step x level; regen heals step x level per
|
|
610
|
+
* second; armor removes step x level from each hit (floor 1); area grows
|
|
611
|
+
* novas, auras, cones, meteors and orbits by (1 + step x level); amount adds
|
|
612
|
+
* step x level projectiles, blades, jumps or meteors. Up to 8 passives.
|
|
613
|
+
*/
|
|
614
|
+
export declare const upgradeSchema: z.ZodObject<{
|
|
615
|
+
stat: z.ZodEnum<{
|
|
616
|
+
armor: "armor";
|
|
617
|
+
magnet: "magnet";
|
|
618
|
+
speed: "speed";
|
|
619
|
+
amount: "amount";
|
|
620
|
+
maxHealth: "maxHealth";
|
|
621
|
+
might: "might";
|
|
622
|
+
haste: "haste";
|
|
623
|
+
regen: "regen";
|
|
624
|
+
area: "area";
|
|
625
|
+
}>;
|
|
626
|
+
step: z.ZodNumber;
|
|
627
|
+
maxLevel: z.ZodDefault<z.ZodNumber>;
|
|
628
|
+
}, z.core.$strict>;
|
|
629
|
+
/**
|
|
630
|
+
* A value over run time: a constant, or keyframes [[seconds, value], ...]
|
|
631
|
+
* in increasing time, linear between them and held after the last one.
|
|
632
|
+
* "Make it harder" is a matter of raising the values.
|
|
633
|
+
*/
|
|
634
|
+
export declare const curveSchema: z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>]>;
|
|
635
|
+
/** One enemy the director can spawn, and when. */
|
|
636
|
+
export declare const directorEntrySchema: z.ZodObject<{
|
|
637
|
+
prefab: z.ZodString;
|
|
638
|
+
weight: z.ZodDefault<z.ZodNumber>;
|
|
639
|
+
from: z.ZodDefault<z.ZodNumber>;
|
|
640
|
+
until: z.ZodOptional<z.ZodNumber>;
|
|
641
|
+
group: z.ZodDefault<z.ZodUnion<readonly [z.ZodNumber, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>]>>;
|
|
642
|
+
}, z.core.$strict>;
|
|
643
|
+
/**
|
|
644
|
+
* The spawn director: one per game. It replaces "top the crowd up to N"
|
|
645
|
+
* loops. Every tick it spawns enemies from `pool` at `rate` per second,
|
|
646
|
+
* up to `alive` living enemies, just outside each player's screen (never
|
|
647
|
+
* on it), with new enemies' health, damage and XP scaled by the curves.
|
|
648
|
+
* More players raise `alive` and `rate` by `perPlayer` each; a living boss
|
|
649
|
+
* multiplies `rate` by `whileBoss`. At the cap, the bodies it could not
|
|
650
|
+
* spawn become `crowded` multipliers on the next spawns (tougher, not
|
|
651
|
+
* more). Stragglers far off screen are moved back to the edge ahead of a
|
|
652
|
+
* moving player (`recycle`).
|
|
653
|
+
*/
|
|
654
|
+
export declare const directorSchema: z.ZodObject<{
|
|
655
|
+
alive: z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>]>;
|
|
656
|
+
rate: z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>]>;
|
|
657
|
+
health: z.ZodDefault<z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>]>>;
|
|
658
|
+
damage: z.ZodDefault<z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>]>>;
|
|
659
|
+
xp: z.ZodDefault<z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>]>>;
|
|
660
|
+
speed: z.ZodDefault<z.ZodUnion<readonly [z.ZodNumber, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>]>>;
|
|
661
|
+
pool: z.ZodArray<z.ZodObject<{
|
|
662
|
+
prefab: z.ZodString;
|
|
663
|
+
weight: z.ZodDefault<z.ZodNumber>;
|
|
664
|
+
from: z.ZodDefault<z.ZodNumber>;
|
|
665
|
+
until: z.ZodOptional<z.ZodNumber>;
|
|
666
|
+
group: z.ZodDefault<z.ZodUnion<readonly [z.ZodNumber, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>]>>;
|
|
667
|
+
}, z.core.$strict>>;
|
|
668
|
+
fade: z.ZodOptional<z.ZodObject<{
|
|
669
|
+
after: z.ZodNumber;
|
|
670
|
+
weight: z.ZodNumber;
|
|
671
|
+
}, z.core.$strict>>;
|
|
672
|
+
perPlayer: z.ZodDefault<z.ZodNumber>;
|
|
673
|
+
whileBoss: z.ZodDefault<z.ZodNumber>;
|
|
674
|
+
crowded: z.ZodDefault<z.ZodObject<{
|
|
675
|
+
health: z.ZodDefault<z.ZodNumber>;
|
|
676
|
+
damage: z.ZodDefault<z.ZodNumber>;
|
|
677
|
+
xp: z.ZodDefault<z.ZodNumber>;
|
|
678
|
+
}, z.core.$strict>>;
|
|
679
|
+
recycle: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
680
|
+
seconds: z.ZodDefault<z.ZodNumber>;
|
|
681
|
+
margin: z.ZodDefault<z.ZodNumber>;
|
|
682
|
+
}, z.core.$strict>]>>;
|
|
683
|
+
elites: z.ZodOptional<z.ZodObject<{
|
|
684
|
+
from: z.ZodNumber;
|
|
685
|
+
every: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
686
|
+
}, z.core.$strict>>;
|
|
687
|
+
ahead: z.ZodDefault<z.ZodNumber>;
|
|
688
|
+
start: z.ZodDefault<z.ZodNumber>;
|
|
689
|
+
max: z.ZodDefault<z.ZodNumber>;
|
|
690
|
+
}, z.core.$strict>;
|
|
691
|
+
export declare const earnRuleSchema: z.ZodObject<{
|
|
692
|
+
when: z.ZodString;
|
|
693
|
+
n: z.ZodDefault<z.ZodNumber>;
|
|
694
|
+
pay: z.ZodNumber;
|
|
695
|
+
oncePer: z.ZodEnum<{
|
|
696
|
+
day: "day";
|
|
697
|
+
run: "run";
|
|
698
|
+
lifetime: "lifetime";
|
|
699
|
+
}>;
|
|
700
|
+
}, z.core.$strict>;
|
|
701
|
+
/**
|
|
702
|
+
* Buy-in runs, the mandatory sink loop (the sink loop is a
|
|
703
|
+
* stake). Earning above free play needs a
|
|
704
|
+
* stake of the game's coins at run start. The referee fixes the stake when
|
|
705
|
+
* the run starts (server state, never the client). A staked run pays its
|
|
706
|
+
* free earn as usual plus a share of `stake x multiple`: the share is the
|
|
707
|
+
* part of the run's free earn the player actually made (skill decides it).
|
|
708
|
+
* What the run does not win back stays in the RewardVault for other
|
|
709
|
+
* players. Every game declares one, on one line in game.ts:
|
|
710
|
+
* `earn.stake({ min: 20, max: 200, multiple: 2 });`
|
|
711
|
+
*/
|
|
712
|
+
/** PLACEHOLDER: the most a stake's payout ceiling may be, as a multiple of the stake. */
|
|
713
|
+
export declare const STAKE_MAX_MULTIPLE = 2;
|
|
714
|
+
/** Highest stake one run may take, in coins (the source reader's bound too). */
|
|
715
|
+
export declare const STAKE_MAX_COINS = 1000000;
|
|
716
|
+
export declare const earnStakeSchema: z.ZodObject<{
|
|
717
|
+
min: z.ZodNumber;
|
|
718
|
+
max: z.ZodNumber;
|
|
719
|
+
multiple: z.ZodNumber;
|
|
720
|
+
}, z.core.$strict>;
|
|
721
|
+
/**
|
|
722
|
+
* PvP pots (the sink loop), for player-versus-
|
|
723
|
+
* player games (the arena template). Each player who wants in pays the
|
|
724
|
+
* same `entry` in coins before a round; at the round's end the pot, less
|
|
725
|
+
* the `recycle` share that stays in the reward pool, is split by how much
|
|
726
|
+
* of the round's earn each entrant made (the room's verified units, never
|
|
727
|
+
* a draw). A round where no entrant earned recycles the whole pot.
|
|
728
|
+
*/
|
|
729
|
+
export declare const earnPotSchema: z.ZodObject<{
|
|
730
|
+
entry: z.ZodNumber;
|
|
731
|
+
recycle: z.ZodNumber;
|
|
732
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
733
|
+
}, z.core.$strict>;
|
|
734
|
+
/**
|
|
735
|
+
* What buying a SKU gives (the recommended coin model). Leave `grants` out for an in-run consumable: a
|
|
736
|
+
* room command applied once ("revive", or a run upgrade named after a
|
|
737
|
+
* declared passive). `{ cosmetic: n }` is a look the player owns for good
|
|
738
|
+
* (cosmetic id n, drawn by the client). `{ keeper: id }` unlocks a keeper
|
|
739
|
+
* for good: a character, a starting loadout or a sidegrade, never more
|
|
740
|
+
* power than the keepers anyone can earn. Owned grants live in the
|
|
741
|
+
* player's profile on the room server, never in the browser.
|
|
742
|
+
*/
|
|
743
|
+
export declare const skuGrantSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
744
|
+
cosmetic: z.ZodNumber;
|
|
745
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
746
|
+
keeper: z.ZodString;
|
|
747
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
748
|
+
gear: z.ZodString;
|
|
749
|
+
loseBelow: z.ZodNumber;
|
|
750
|
+
}, z.core.$strict>]>;
|
|
751
|
+
/**
|
|
752
|
+
* A store item. Every game has coins (1 coin = 1 game token, shown under
|
|
753
|
+
* the token's own name, symbol and logo): price cosmetics, unlocks and
|
|
754
|
+
* in-run consumables in `coins`. Players spend earned coins first, off
|
|
755
|
+
* chain, then their wallet. `usdg` sells the item for dollars as well.
|
|
756
|
+
* `token` is the old name for `coins` and reads as coins. Permanent stat
|
|
757
|
+
* power is never a SKU: it is a metaUpgrade, opt-in through economy().
|
|
758
|
+
*/
|
|
759
|
+
export declare const skuSchema: z.ZodPipe<z.ZodObject<{
|
|
760
|
+
coins: z.ZodOptional<z.ZodNumber>;
|
|
761
|
+
usdg: z.ZodOptional<z.ZodNumber>;
|
|
762
|
+
token: z.ZodOptional<z.ZodNumber>;
|
|
763
|
+
grants: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
|
|
764
|
+
cosmetic: z.ZodNumber;
|
|
765
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
766
|
+
keeper: z.ZodString;
|
|
767
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
768
|
+
gear: z.ZodString;
|
|
769
|
+
loseBelow: z.ZodNumber;
|
|
770
|
+
}, z.core.$strict>]>>;
|
|
771
|
+
}, z.core.$strict>, z.ZodTransform<{
|
|
772
|
+
grants?: {
|
|
773
|
+
cosmetic: number;
|
|
774
|
+
} | {
|
|
775
|
+
keeper: string;
|
|
776
|
+
} | {
|
|
777
|
+
gear: string;
|
|
778
|
+
loseBelow: number;
|
|
779
|
+
} | undefined;
|
|
780
|
+
usdg?: number | undefined;
|
|
781
|
+
coins?: number | undefined;
|
|
782
|
+
}, {
|
|
783
|
+
coins?: number | undefined;
|
|
784
|
+
usdg?: number | undefined;
|
|
785
|
+
token?: number | undefined;
|
|
786
|
+
grants?: {
|
|
787
|
+
cosmetic: number;
|
|
788
|
+
} | {
|
|
789
|
+
keeper: string;
|
|
790
|
+
} | {
|
|
791
|
+
gear: string;
|
|
792
|
+
loseBelow: number;
|
|
793
|
+
} | undefined;
|
|
794
|
+
}>>;
|
|
795
|
+
/**
|
|
796
|
+
* The game's coin model. The
|
|
797
|
+
* default needs no declaration: coins buy cosmetics, unlocks (keepers,
|
|
798
|
+
* starting loadouts, sidegrades) and in-run consumables (a revive), and
|
|
799
|
+
* never permanent stat power.
|
|
800
|
+
* economy({ store: "cosmetics" }) cosmetics only: no unlocks, no consumables.
|
|
801
|
+
* economy({ metaUpgrades: true }) opt in to metaUpgrade(...): permanent stat
|
|
802
|
+
* upgrades for coins, under the engine's caps.
|
|
803
|
+
*/
|
|
804
|
+
export declare const economySchema: z.ZodObject<{
|
|
805
|
+
store: z.ZodDefault<z.ZodEnum<{
|
|
806
|
+
default: "default";
|
|
807
|
+
cosmetics: "cosmetics";
|
|
808
|
+
}>>;
|
|
809
|
+
metaUpgrades: z.ZodDefault<z.ZodBoolean>;
|
|
810
|
+
}, z.core.$strict>;
|
|
811
|
+
/** Stats a meta upgrade may raise (each a percentage of the base). */
|
|
812
|
+
export declare const META_STATS: readonly ["speed", "maxHealth", "magnet", "might", "haste", "area"];
|
|
813
|
+
/** Hard caps (engine-enforced, not a game setting): +15% to any one stat from meta upgrades, +30% across all of them. */
|
|
814
|
+
export declare const META_MAX_PER_STAT = 0.15;
|
|
815
|
+
export declare const META_MAX_TOTAL = 0.3;
|
|
816
|
+
/** Most levels of one meta upgrade, most meta upgrades per game, and the slowest cost growth (geometric). */
|
|
817
|
+
export declare const META_MAX_LEVELS = 5;
|
|
818
|
+
export declare const META_MAX_UPGRADES = 8;
|
|
819
|
+
export declare const META_MIN_GROWTH = 1.5;
|
|
820
|
+
/**
|
|
821
|
+
* A meta upgrade (opt-in: economy({ metaUpgrades: true })): a permanent,
|
|
822
|
+
* per-player stat bonus bought with coins, one level at a time. Level k
|
|
823
|
+
* costs round(cost x growth^(k-1)) coins and adds `step` (0.05 = +5%) to
|
|
824
|
+
* `stat`. speed, might and area multiply; haste cuts cooldowns; maxHealth
|
|
825
|
+
* and magnet add that share of the base. The engine caps the sum per stat
|
|
826
|
+
* at +15% and across stats at +30%, and the store shows each level's
|
|
827
|
+
* bonus and price.
|
|
828
|
+
*/
|
|
829
|
+
export declare const metaUpgradeSchema: z.ZodObject<{
|
|
830
|
+
stat: z.ZodEnum<{
|
|
831
|
+
magnet: "magnet";
|
|
832
|
+
speed: "speed";
|
|
833
|
+
maxHealth: "maxHealth";
|
|
834
|
+
might: "might";
|
|
835
|
+
haste: "haste";
|
|
836
|
+
area: "area";
|
|
837
|
+
}>;
|
|
838
|
+
step: z.ZodNumber;
|
|
839
|
+
levels: z.ZodNumber;
|
|
840
|
+
cost: z.ZodNumber;
|
|
841
|
+
growth: z.ZodDefault<z.ZodNumber>;
|
|
842
|
+
}, z.core.$strict>;
|
|
843
|
+
/**
|
|
844
|
+
* A keeper (a playable character): its start weapon and one signature
|
|
845
|
+
* passive at level 1. `unlock` names an achievement that unlocks it (no
|
|
846
|
+
* unlock and not sold: available from the start). A keeper declared with
|
|
847
|
+
* no unlock can instead be sold for coins by a store SKU with
|
|
848
|
+
* { grants: { keeper } }; it is earned or bought, never both. The first
|
|
849
|
+
* keeper is everyone's default and is always free.
|
|
850
|
+
*/
|
|
851
|
+
export declare const keeperSchema: z.ZodObject<{
|
|
852
|
+
name: z.ZodString;
|
|
853
|
+
text: z.ZodOptional<z.ZodString>;
|
|
854
|
+
model: z.ZodOptional<z.ZodString>;
|
|
855
|
+
tint: z.ZodOptional<z.ZodString>;
|
|
856
|
+
weapon: z.ZodString;
|
|
857
|
+
passive: z.ZodOptional<z.ZodString>;
|
|
858
|
+
unlock: z.ZodOptional<z.ZodString>;
|
|
859
|
+
}, z.core.$strict>;
|
|
860
|
+
/**
|
|
861
|
+
* An achievement: a player reaches it when their count of `when` reaches
|
|
862
|
+
* `n` in one run ("evolve a weapon": { when: "player.evolved" }). It pays
|
|
863
|
+
* nothing; keepers can unlock with it.
|
|
864
|
+
*/
|
|
865
|
+
export declare const achievementSchema: z.ZodObject<{
|
|
866
|
+
title: z.ZodString;
|
|
867
|
+
text: z.ZodOptional<z.ZodString>;
|
|
868
|
+
when: z.ZodString;
|
|
869
|
+
n: z.ZodDefault<z.ZodNumber>;
|
|
870
|
+
}, z.core.$strict>;
|
|
871
|
+
/**
|
|
872
|
+
* A daily goal ("kill an elite", "survive a Tide"): the HUD shows a few
|
|
873
|
+
* each day, chosen from those declared, with each player's count of `when`
|
|
874
|
+
* in the run. It pays nothing (coin rewards are earn rules).
|
|
875
|
+
*/
|
|
876
|
+
export declare const missionSchema: z.ZodObject<{
|
|
877
|
+
text: z.ZodString;
|
|
878
|
+
when: z.ZodString;
|
|
879
|
+
n: z.ZodDefault<z.ZodNumber>;
|
|
880
|
+
}, z.core.$strict>;
|
|
881
|
+
/** What end-screen titles rank players by. */
|
|
882
|
+
export declare const TITLE_STATS: readonly ["kills", "damage", "revives", "downs", "level", "pickups"];
|
|
883
|
+
/** An end-screen title: who had the most (or the least) of a stat this run ("The Butcher": { most: "kills" }). */
|
|
884
|
+
export declare const titleSchema: z.ZodObject<{
|
|
885
|
+
text: z.ZodString;
|
|
886
|
+
most: z.ZodOptional<z.ZodEnum<{
|
|
887
|
+
damage: "damage";
|
|
888
|
+
kills: "kills";
|
|
889
|
+
revives: "revives";
|
|
890
|
+
downs: "downs";
|
|
891
|
+
level: "level";
|
|
892
|
+
pickups: "pickups";
|
|
893
|
+
}>>;
|
|
894
|
+
least: z.ZodOptional<z.ZodEnum<{
|
|
895
|
+
damage: "damage";
|
|
896
|
+
kills: "kills";
|
|
897
|
+
revives: "revives";
|
|
898
|
+
downs: "downs";
|
|
899
|
+
level: "level";
|
|
900
|
+
pickups: "pickups";
|
|
901
|
+
}>>;
|
|
902
|
+
}, z.core.$strict>;
|
|
903
|
+
export type SkuGrant = z.output<typeof skuGrantSchema>;
|
|
904
|
+
export type EconomyInput = z.input<typeof economySchema>;
|
|
905
|
+
export type EconomyDef = z.output<typeof economySchema>;
|
|
906
|
+
export type MetaUpgradeInput = z.input<typeof metaUpgradeSchema>;
|
|
907
|
+
export type MetaUpgradeDef = z.output<typeof metaUpgradeSchema>;
|
|
908
|
+
export type MetaStat = (typeof META_STATS)[number];
|
|
909
|
+
export type KeeperInput = z.input<typeof keeperSchema>;
|
|
910
|
+
export type KeeperDef = z.output<typeof keeperSchema>;
|
|
911
|
+
export type AchievementInput = z.input<typeof achievementSchema>;
|
|
912
|
+
export type AchievementDef = z.output<typeof achievementSchema>;
|
|
913
|
+
export type MissionInput = z.input<typeof missionSchema>;
|
|
914
|
+
export type MissionDef = z.output<typeof missionSchema>;
|
|
915
|
+
export type TitleInput = z.input<typeof titleSchema>;
|
|
916
|
+
export type TitleDef = z.output<typeof titleSchema>;
|
|
917
|
+
export type TitleStat = (typeof TITLE_STATS)[number];
|
|
918
|
+
export type CurveInput = z.input<typeof curveSchema>;
|
|
919
|
+
export type Curve = z.output<typeof curveSchema>;
|
|
920
|
+
export type DirectorInput = z.input<typeof directorSchema>;
|
|
921
|
+
export type DirectorDef = z.output<typeof directorSchema>;
|
|
922
|
+
export type LookInput = z.input<typeof lookSchema>;
|
|
923
|
+
export type LookDef = z.output<typeof lookSchema>;
|
|
924
|
+
export type FeelDef = z.output<typeof feelSchema>;
|
|
925
|
+
export type LookPreset = (typeof LOOK_PRESETS)[number];
|
|
926
|
+
export type ParticlePreset = (typeof PARTICLE_PRESETS)[number];
|
|
927
|
+
export type DecalPreset = (typeof DECAL_PRESETS)[number];
|
|
928
|
+
export type SoundCue = (typeof SOUND_CUES)[number];
|
|
929
|
+
export type GameInput = z.input<typeof gameSchema>;
|
|
930
|
+
export type GameDef = z.output<typeof gameSchema>;
|
|
931
|
+
export type PrefabInput = z.input<typeof prefabSchema>;
|
|
932
|
+
export type PrefabDef = z.output<typeof prefabSchema>;
|
|
933
|
+
export type EarnRuleInput = z.input<typeof earnRuleSchema>;
|
|
934
|
+
export type EarnRuleDef = z.output<typeof earnRuleSchema>;
|
|
935
|
+
export type EarnStakeInput = z.input<typeof earnStakeSchema>;
|
|
936
|
+
export type EarnStakeDef = z.output<typeof earnStakeSchema>;
|
|
937
|
+
export type EarnPotInput = z.input<typeof earnPotSchema>;
|
|
938
|
+
export type EarnPotDef = z.output<typeof earnPotSchema>;
|
|
939
|
+
export type SkuInput = z.input<typeof skuSchema>;
|
|
940
|
+
export type WeaponInput = z.input<typeof weaponSchema>;
|
|
941
|
+
export type WeaponDef = z.output<typeof weaponSchema>;
|
|
942
|
+
export type UpgradeInput = z.input<typeof upgradeSchema>;
|
|
943
|
+
export type UpgradeDef = z.output<typeof upgradeSchema>;
|
|
944
|
+
export type SkuDef = z.output<typeof skuSchema>;
|
|
945
|
+
export type AssetId = string;
|
|
946
|
+
export type Template = (typeof TEMPLATES)[number];
|
|
947
|
+
export type Style = (typeof STYLES)[number];
|
|
948
|
+
/** Thrown for any invalid declaration; `issues` are agent-readable lines. */
|
|
949
|
+
export declare class GameDefinitionError extends Error {
|
|
950
|
+
readonly issues: readonly string[];
|
|
951
|
+
constructor(where: string, issues: readonly string[]);
|
|
952
|
+
}
|
|
953
|
+
export declare function parseOrThrow<S extends z.ZodType>(schema: S, value: unknown, where: string): z.output<S>;
|
|
954
|
+
export type PlatformLevelInput = z.input<typeof platformLevelSchema>;
|
|
955
|
+
export type PlatformLevelDef = z.output<typeof platformLevelSchema>;
|
|
956
|
+
export type MotorDef = z.output<typeof motorSchema>;
|
|
957
|
+
export type KartTrackInput = z.input<typeof kartTrackSchema>;
|
|
958
|
+
export type KartTrackDefSchema = z.output<typeof kartTrackSchema>;
|