@dreadwood-types/types 0.1.385 → 0.1.387
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/dist/bossSignatures.d.ts +1 -1
- package/dist/bossSignatures.d.ts.map +1 -1
- package/dist/bossSignatures.js +8 -0
- package/dist/bossSignatures.js.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -1
- package/dist/dailyHooks.d.ts +2 -0
- package/dist/dailyHooks.d.ts.map +1 -1
- package/dist/dailyHooks.js +2 -0
- package/dist/dailyHooks.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/messages.d.ts +6 -0
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js.map +1 -1
- package/dist/skillingGiants.d.ts +355 -0
- package/dist/skillingGiants.d.ts.map +1 -0
- package/dist/skillingGiants.js +597 -0
- package/dist/skillingGiants.js.map +1 -0
- package/dist/worldBossRing.d.ts +80 -5
- package/dist/worldBossRing.d.ts.map +1 -1
- package/dist/worldBossRing.js +112 -0
- package/dist/worldBossRing.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skilling Giants (James, 2026-10-28: "an equivalent of the stone bosses in a new design for skilling ... a new random spawn each time
|
|
3
|
+
* the user isn't expecting ... a HUGE tree spawning which doesn't attack, but must have its health reduced to 0 by all the players over
|
|
4
|
+
* a 5-10 minute window ... every interval it might give a bunch of xp, some logs in a loot box ... when it dies, loot boxes appear on the
|
|
5
|
+
* floor ... afkable ... but with some sort of click needed every now and then").
|
|
6
|
+
*
|
|
7
|
+
* A Giant is one enormous skilling node with a health bar, one per gathering skill: the Great Tree (Woodwork), the Great Shoal (Fishing),
|
|
8
|
+
* the Fallen Star (Mining), the Great Bloom (Foraging), the Great Cauldron (Potion Making). It appears without warning somewhere in a
|
|
9
|
+
* level band and never attacks. Every hit takes health and gives nothing; every PULSE (each tenth of its health, or every minute) pays
|
|
10
|
+
* every worker a lump of XP and drops one crate; every minute or two a CHORE lands on each worker (a sapling, a snagged line, a loose
|
|
11
|
+
* rock, a bramble, a boil-over) and their hits do nothing until they clear it; at 0 health it dies: crates and satchels scatter for a
|
|
12
|
+
* race, and everyone who really worked gets a satchel straight to the bag.
|
|
13
|
+
*
|
|
14
|
+
* Spec with the reasons: `dreadwoods-backend/SKILLING_GIANTS_SPEC.md`. This file is the pure half (bands, kinds, the pool rule, pulses,
|
|
15
|
+
* chores, scatter, satchels, chat lines, the view, the save), the way `windfall.ts` is for Windfall; the backend's `skillingGiantEvent.ts`
|
|
16
|
+
* runs it. Every number is a placeholder until the balance pass; the shapes (random spawn, nothing per hit, the chore rule, the caps)
|
|
17
|
+
* are what the tests pin.
|
|
18
|
+
*/
|
|
19
|
+
export type GiantKind = 'tree' | 'shoal' | 'star' | 'bloom' | 'cauldron';
|
|
20
|
+
export declare const GIANT_KINDS: readonly GiantKind[];
|
|
21
|
+
export declare function isGiantKind(k: unknown): k is GiantKind;
|
|
22
|
+
export type GiantBandId = 1 | 2 | 3 | 4;
|
|
23
|
+
export declare const GIANT_BAND_IDS: readonly GiantBandId[];
|
|
24
|
+
export type GiantSkill = 'woodwork' | 'fishing' | 'mining' | 'foraging' | 'potionmaking';
|
|
25
|
+
/** The chore each Giant lands on a worker (spec section 2). */
|
|
26
|
+
export type GiantChoreKind = 'sapling' | 'snag' | 'rock' | 'bramble' | 'boilover';
|
|
27
|
+
export type GiantKindInfo = {
|
|
28
|
+
kind: GiantKind;
|
|
29
|
+
/** "the Great Tree". */
|
|
30
|
+
title: string;
|
|
31
|
+
skill: GiantSkill;
|
|
32
|
+
skillName: string;
|
|
33
|
+
/** What the panel says to bring: "a hatchet". */
|
|
34
|
+
tool: string;
|
|
35
|
+
chore: GiantChoreKind;
|
|
36
|
+
/** The chore's name and the one-click fix, for the panel and the notice. */
|
|
37
|
+
choreName: string;
|
|
38
|
+
choreFix: string;
|
|
39
|
+
/** The world-chat verbs: "has risen", "shudders", "has fallen", "has withered". */
|
|
40
|
+
lands: string;
|
|
41
|
+
pulse: string;
|
|
42
|
+
dies: string;
|
|
43
|
+
withers: string;
|
|
44
|
+
/** How long one hit takes (the swing, the cast, the pick, the pull, the stir). */
|
|
45
|
+
hitMs: number;
|
|
46
|
+
/** Footprint radius in tiles (the node blocks a (2r+1) square on land; a shoal blocks nothing, it is water). */
|
|
47
|
+
footprint: number;
|
|
48
|
+
/** The scale the stand-in entity is drawn at. */
|
|
49
|
+
scale: number;
|
|
50
|
+
};
|
|
51
|
+
export declare const GIANT_KIND_INFO: Record<GiantKind, GiantKindInfo>;
|
|
52
|
+
export type GiantBand = {
|
|
53
|
+
id: GiantBandId;
|
|
54
|
+
/** "levels 1-10". */
|
|
55
|
+
band: string;
|
|
56
|
+
/** The skill level to work a Giant of this band. */
|
|
57
|
+
gate: number;
|
|
58
|
+
/** ChatGPT's names (2026-10-28), one per kind. */
|
|
59
|
+
names: Record<GiantKind, string>;
|
|
60
|
+
/** What the crates, the satchels and the scatter hold, per kind, and one normal success's XP at this band (the XP unit). */
|
|
61
|
+
resource: Record<GiantKind, {
|
|
62
|
+
kind: string;
|
|
63
|
+
unitXp: number;
|
|
64
|
+
rare: string;
|
|
65
|
+
}>;
|
|
66
|
+
/** The look of the stand-in entity per kind (a tree style, an ore style). */
|
|
67
|
+
styles: Record<GiantKind, string>;
|
|
68
|
+
};
|
|
69
|
+
export declare const GIANT_BANDS: Record<GiantBandId, GiantBand>;
|
|
70
|
+
export declare function giantBand(id: number): GiantBand;
|
|
71
|
+
/** "Elderbough, the Great Tree". */
|
|
72
|
+
export declare function giantName(kind: GiantKind, band: GiantBandId): string;
|
|
73
|
+
/** The skill level a Giant asks. Null when `level` may work it, else the line the player reads. */
|
|
74
|
+
export declare function giantGate(band: GiantBandId): number;
|
|
75
|
+
/** The first band is open to everyone; the others ask the band's level. */
|
|
76
|
+
export declare function giantCanWork(band: GiantBandId, level: number): boolean;
|
|
77
|
+
export declare function giantGateLine(kind: GiantKind, band: GiantBandId, level: number): string | null;
|
|
78
|
+
/** A Giant lands this long after the last one ended (uniform between the two): no clock to learn. */
|
|
79
|
+
export declare const GIANT_SPAWN_MIN_MS: number;
|
|
80
|
+
export declare const GIANT_SPAWN_MAX_MS: number;
|
|
81
|
+
/** The hard cap from landing: then it withers and only what was paid stands. */
|
|
82
|
+
export declare const GIANT_CAP_MS: number;
|
|
83
|
+
/** With five workers at the band's level it dies in about this long. */
|
|
84
|
+
export declare const GIANT_TARGET_MS: number;
|
|
85
|
+
/** After the death (or the withering) the remains stay and the view says so this long. */
|
|
86
|
+
export declare const GIANT_SPENT_MS: number;
|
|
87
|
+
/** The world-timer key the backend saves under. */
|
|
88
|
+
export declare const GIANT_TIMER_KEY = "giants";
|
|
89
|
+
/** The one world entity id of the live Giant; a chore entity is `giant-chore-<character key>`. */
|
|
90
|
+
export declare const GIANT_NODE_ID = "giant-node";
|
|
91
|
+
export declare const GIANT_CHORE_PREFIX = "giant-chore-";
|
|
92
|
+
export declare function giantChoreId(characterKey: string): string;
|
|
93
|
+
export declare function isGiantEntityId(id: string): boolean;
|
|
94
|
+
/** The world entity kinds: the Giant itself (style `giantNodeStyle`) and a worker's chore (style the chore kind). */
|
|
95
|
+
export declare const GIANT_NODE_KIND = "skillinggiant";
|
|
96
|
+
export declare const GIANT_CHORE_KIND = "giantchore";
|
|
97
|
+
/** The Giant entity's style, `tree:1`: what it is and its band, so the client draws the right look without the view. */
|
|
98
|
+
export declare function giantNodeStyle(kind: GiantKind, band: GiantBandId): string;
|
|
99
|
+
export declare function parseGiantNodeStyle(style: string | undefined | null): {
|
|
100
|
+
kind: GiantKind;
|
|
101
|
+
band: GiantBandId;
|
|
102
|
+
} | null;
|
|
103
|
+
/** The hover and menu name of a Giant entity: "Elderbough, the Great Tree" (or the plain title for a style it cannot read). */
|
|
104
|
+
export declare function giantEntityName(style: string | undefined | null): string;
|
|
105
|
+
/** The hover name of a chore: "a sapling". */
|
|
106
|
+
export declare function giantChoreEntityName(style: string | undefined | null): string;
|
|
107
|
+
/** How far the Giant has been worked, as a look: 0 whole, 1 a quarter gone, 2 half, 3 three quarters (the node is drawn a little smaller each step). */
|
|
108
|
+
export declare function giantNodeLook(progress: number): number;
|
|
109
|
+
/** Pick the next landing time after `endedAt`. */
|
|
110
|
+
export declare function giantNextSpawnAt(endedAt: number, random?: () => number): number;
|
|
111
|
+
/** A worker is active with a hit inside this window (the pulse pays them; the pool sizes by them). */
|
|
112
|
+
export declare const GIANT_ACTIVE_WINDOW_MS: number;
|
|
113
|
+
/** The pool is sized for at least this many workers (a lone worker reaches about 40 percent before the cap). */
|
|
114
|
+
export declare const GIANT_MIN_ACTIVE = 3;
|
|
115
|
+
export declare const GIANT_ACTIVE_CAP = 30;
|
|
116
|
+
/** How the crowd scales the health: twice the workers, 2^0.7 times the hits (so each head's share falls, and a crowd is faster). */
|
|
117
|
+
export declare const GIANT_CROWD_EXPONENT = 0.7;
|
|
118
|
+
/** The crowd the target time is set for. */
|
|
119
|
+
export declare const GIANT_REF_WORKERS = 5;
|
|
120
|
+
/** Hits a minute a steady worker lands on this kind. */
|
|
121
|
+
export declare function giantRefRate(kind: GiantKind): number;
|
|
122
|
+
/** The hits that kill a Giant of this kind with `active` workers. */
|
|
123
|
+
export declare function giantHitsToKill(kind: GiantKind, active: number): number;
|
|
124
|
+
/** How much health one hit takes with `active` workers (0 to 1). */
|
|
125
|
+
export declare function giantStep(kind: GiantKind, active: number): number;
|
|
126
|
+
export type GiantWorker = {
|
|
127
|
+
key: string;
|
|
128
|
+
account?: string;
|
|
129
|
+
hits: number;
|
|
130
|
+
lastAt: number;
|
|
131
|
+
firstAt: number;
|
|
132
|
+
};
|
|
133
|
+
export type GiantEnd = null | {
|
|
134
|
+
at: number;
|
|
135
|
+
how: 'killed' | 'withered';
|
|
136
|
+
};
|
|
137
|
+
/** The live Giant (saved under GIANT_TIMER_KEY so a restart rebuilds it). */
|
|
138
|
+
export type GiantNode = {
|
|
139
|
+
v: 1;
|
|
140
|
+
/** A fresh id per landing (`${landedAt}-${seq}`): the satchel keys and the crate tags use it. */
|
|
141
|
+
id: string;
|
|
142
|
+
kind: GiantKind;
|
|
143
|
+
band: GiantBandId;
|
|
144
|
+
site: string;
|
|
145
|
+
landedAt: number;
|
|
146
|
+
/** 0 (whole) to 1 (dead). */
|
|
147
|
+
progress: number;
|
|
148
|
+
/** Pulses fired so far and when the last one was. */
|
|
149
|
+
pulses: number;
|
|
150
|
+
lastPulseAt: number;
|
|
151
|
+
workers: GiantWorker[];
|
|
152
|
+
end: GiantEnd;
|
|
153
|
+
};
|
|
154
|
+
export declare function giantActiveCount(node: GiantNode, now: number): number;
|
|
155
|
+
export type GiantHit = {
|
|
156
|
+
node: GiantNode;
|
|
157
|
+
/** The hit moved the health (false once it has ended). */
|
|
158
|
+
counted: boolean;
|
|
159
|
+
/** A pulse fired because of this hit (a tenth crossed). */
|
|
160
|
+
pulse: boolean;
|
|
161
|
+
/** Set the first time health reaches 0. */
|
|
162
|
+
killed: boolean;
|
|
163
|
+
};
|
|
164
|
+
/** A pulse fires at each of these shares of the health, and at least every GIANT_PULSE_EVERY_MS while anyone works. */
|
|
165
|
+
export declare const GIANT_PULSE_SHARES = 10;
|
|
166
|
+
export declare const GIANT_PULSE_EVERY_MS: number;
|
|
167
|
+
/**
|
|
168
|
+
* A worker's hit at `now` (the chore rule is the backend's: it does not call this while the worker's chore stands). Pure: returns the
|
|
169
|
+
* next node. The first hit also counts the worker as active for this very step.
|
|
170
|
+
*/
|
|
171
|
+
export declare function giantApplyHit(node: GiantNode, who: {
|
|
172
|
+
key: string;
|
|
173
|
+
account?: string;
|
|
174
|
+
}, now: number): GiantHit;
|
|
175
|
+
/** Is a timed pulse due (a minute since the last, someone active, and the Giant standing)? */
|
|
176
|
+
export declare function giantTimedPulseDue(node: GiantNode, now: number): boolean;
|
|
177
|
+
export declare function giantMarkTimedPulse(node: GiantNode, now: number): GiantNode;
|
|
178
|
+
/** The hard cap: a Giant still standing GIANT_CAP_MS after it landed withers. Idempotent. */
|
|
179
|
+
export declare function giantExpire(node: GiantNode, now: number): {
|
|
180
|
+
node: GiantNode;
|
|
181
|
+
withered: boolean;
|
|
182
|
+
};
|
|
183
|
+
/** A worker's first chore lands no sooner than this after their first hit; later ones this long after the last was cleared. */
|
|
184
|
+
export declare const GIANT_CHORE_FIRST_MS: number;
|
|
185
|
+
export declare const GIANT_CHORE_MIN_MS: number;
|
|
186
|
+
export declare const GIANT_CHORE_MAX_MS: number;
|
|
187
|
+
/** A chore nobody clears is taken away with the Giant; a cleared one goes at once. */
|
|
188
|
+
export declare const GIANT_CHORE_LINE = "Your hits do nothing until it is cleared.";
|
|
189
|
+
export declare function giantNextChoreDelay(first: boolean, random?: () => number): number;
|
|
190
|
+
/** How the chore's stand-in is drawn: an entity kind, a style and a scale (the Blender props come later: upgrades.json). */
|
|
191
|
+
export declare function giantChoreLook(chore: GiantChoreKind): {
|
|
192
|
+
kind: string;
|
|
193
|
+
style?: string;
|
|
194
|
+
scale: number;
|
|
195
|
+
};
|
|
196
|
+
/** What the player reads when the chore lands and when it is cleared. */
|
|
197
|
+
export declare function giantChoreLandLine(kind: GiantKind): string;
|
|
198
|
+
export declare function giantChoreClearLine(kind: GiantKind): string;
|
|
199
|
+
/** What a hit on the Giant says while the chore stands. */
|
|
200
|
+
export declare function giantChoreBlockLine(kind: GiantKind): string;
|
|
201
|
+
/** A pulse pays each active worker this many XP units; the death this many to a real worker (half to a light one). */
|
|
202
|
+
export declare const GIANT_PULSE_XP_UNITS = 4;
|
|
203
|
+
export declare const GIANT_FINAL_XP_UNITS = 40;
|
|
204
|
+
/** A real worker (the full death XP and a small satchel) landed this many hits; a large satchel from this many. */
|
|
205
|
+
export declare const GIANT_REAL_HITS = 20;
|
|
206
|
+
export declare const GIANT_LIGHT_HITS = 5;
|
|
207
|
+
export declare const GIANT_LARGE_SATCHEL_HITS = 60;
|
|
208
|
+
export declare function giantPulseXp(kind: GiantKind, band: GiantBandId): number;
|
|
209
|
+
export declare function giantFinalXp(kind: GiantKind, band: GiantBandId, hits: number): number;
|
|
210
|
+
/** The full death XP also asks the hits be spread over this long (spec section 6: a late rush of hits gets the light share). */
|
|
211
|
+
export declare const GIANT_REAL_SPAN_MS: number;
|
|
212
|
+
/** The death XP one worker gets: the full share for GIANT_REAL_HITS over GIANT_REAL_SPAN_MS, half for a lighter hand, nothing under GIANT_LIGHT_HITS. */
|
|
213
|
+
export declare function giantDeathXp(kind: GiantKind, band: GiantBandId, worker: Pick<GiantWorker, 'hits' | 'firstAt' | 'lastAt'>): number;
|
|
214
|
+
export declare function giantContribution(hits: number): 'none' | 'small' | 'large';
|
|
215
|
+
export declare function giantEntitlements(node: GiantNode): Array<{
|
|
216
|
+
key: string;
|
|
217
|
+
large: boolean;
|
|
218
|
+
}>;
|
|
219
|
+
/** A pulse crate holds this many of the resource; it lies this long; one each a pulse. */
|
|
220
|
+
export declare const GIANT_CRATE_MIN = 5;
|
|
221
|
+
export declare const GIANT_CRATE_MAX = 15;
|
|
222
|
+
export declare const GIANT_CRATE_MS: number;
|
|
223
|
+
export declare const GIANT_PULSE_PICKUP_CAP = 1;
|
|
224
|
+
/** The death scatter lies this long; a character takes at most this many pieces of it. */
|
|
225
|
+
export declare const GIANT_SCATTER_MS: number;
|
|
226
|
+
export declare const GIANT_SCATTER_PICKUP_CAP = 3;
|
|
227
|
+
/** Pieces land this far from the footprint edge; the work ring is this far. */
|
|
228
|
+
export declare const GIANT_SCATTER_MIN = 2;
|
|
229
|
+
export declare const GIANT_SCATTER_MAX = 6;
|
|
230
|
+
export declare const GIANT_WORK_RANGE = 2;
|
|
231
|
+
export declare function giantReach(kind: GiantKind): number;
|
|
232
|
+
/** The panel shows within this many tiles of the Giant; the pulse line is told within it too. */
|
|
233
|
+
export declare const GIANT_PANEL_RANGE = 40;
|
|
234
|
+
export type GiantScatter = {
|
|
235
|
+
crates: number;
|
|
236
|
+
smallSatchels: number;
|
|
237
|
+
largeSatchels: number;
|
|
238
|
+
rare: number;
|
|
239
|
+
};
|
|
240
|
+
/** What the death throws for `active` workers at that moment (Windfall's fall table). A withering throws nothing. */
|
|
241
|
+
export declare function giantScatterCounts(active: number): GiantScatter;
|
|
242
|
+
export declare function giantCrateQty(random?: () => number): number;
|
|
243
|
+
/** A satchel's coins by band: [small min, small max, large min, large max] (Windfall's table). */
|
|
244
|
+
export declare const GIANT_SATCHEL_COINS: Record<GiantBandId, readonly [number, number, number, number]>;
|
|
245
|
+
/** What opening a satchel gives: coins, the Giant's resource, and (large) its rare piece. No food, no shop goods. */
|
|
246
|
+
export declare function giantSatchelContents(kind: GiantKind, band: GiantBandId, large: boolean, random?: () => number): Array<{
|
|
247
|
+
kind: string;
|
|
248
|
+
qty: number;
|
|
249
|
+
}>;
|
|
250
|
+
export type GiantSite = {
|
|
251
|
+
id: string;
|
|
252
|
+
kind: GiantKind;
|
|
253
|
+
band: GiantBandId;
|
|
254
|
+
/** What the chat says: "in Hopewood Common". */
|
|
255
|
+
where: string;
|
|
256
|
+
/** An anchor, not a walked tile: the backend's finder picks the clear tile within `searchRadius` (a water tile for a shoal). */
|
|
257
|
+
anchor: {
|
|
258
|
+
x: number;
|
|
259
|
+
z: number;
|
|
260
|
+
};
|
|
261
|
+
searchRadius: number;
|
|
262
|
+
};
|
|
263
|
+
/** The first site list (spec section 3: four to six a band come with the balance pass; these are the anchors the data gives). */
|
|
264
|
+
export declare const GIANT_SITES: readonly GiantSite[];
|
|
265
|
+
export declare function giantSiteById(id: string): GiantSite | undefined;
|
|
266
|
+
/**
|
|
267
|
+
* Pick the next Giant: a random band, then a random kind of that band's sites, never the site that just ran. The bands are weighted so
|
|
268
|
+
* the starter band sees the most (a newcomer meets one soon).
|
|
269
|
+
*/
|
|
270
|
+
export declare const GIANT_BAND_WEIGHTS: Record<GiantBandId, number>;
|
|
271
|
+
export declare function giantPickSite(lastSite: string | null, random?: () => number, sites?: readonly GiantSite[]): GiantSite | null;
|
|
272
|
+
export type GiantLineKind = 'lands' | 'pulse' | 'dies' | 'withers';
|
|
273
|
+
/** The world-chat lines (one place, so the backend and the tests read the same words). */
|
|
274
|
+
export declare function giantLine(kind: GiantLineKind, node: {
|
|
275
|
+
kind: GiantKind;
|
|
276
|
+
band: GiantBandId;
|
|
277
|
+
}, where: string): string;
|
|
278
|
+
/** One line for the "Today in Dreadwoods" panel and the login while a Giant stands (none otherwise: it is never announced ahead). */
|
|
279
|
+
export declare function giantTodayLine(node: GiantNode | null, where: string | null): string | null;
|
|
280
|
+
export type GiantView = {
|
|
281
|
+
id: string;
|
|
282
|
+
kind: GiantKind;
|
|
283
|
+
band: GiantBandId;
|
|
284
|
+
/** "Elderbough". */
|
|
285
|
+
name: string;
|
|
286
|
+
/** "the Great Tree". */
|
|
287
|
+
title: string;
|
|
288
|
+
skill: string;
|
|
289
|
+
gate: number;
|
|
290
|
+
where: string;
|
|
291
|
+
/** The node's tile. */
|
|
292
|
+
x: number;
|
|
293
|
+
z: number;
|
|
294
|
+
/** 1 (whole) to 0 (dead). */
|
|
295
|
+
health: number;
|
|
296
|
+
/** Time left to the cap (0 once ended). */
|
|
297
|
+
msToCap: number;
|
|
298
|
+
pulses: number;
|
|
299
|
+
active: number;
|
|
300
|
+
ended: null | 'killed' | 'withered';
|
|
301
|
+
/** Time since the end, for the spent phase (0 while it stands). */
|
|
302
|
+
msSinceEnd: number;
|
|
303
|
+
/** This player's own tally and chore (null before they have worked it). */
|
|
304
|
+
you: {
|
|
305
|
+
hits: number;
|
|
306
|
+
satchel: 'none' | 'small' | 'large';
|
|
307
|
+
chore: {
|
|
308
|
+
name: string;
|
|
309
|
+
fix: string;
|
|
310
|
+
} | null;
|
|
311
|
+
} | null;
|
|
312
|
+
canWork: boolean;
|
|
313
|
+
tool: string;
|
|
314
|
+
};
|
|
315
|
+
export declare function giantView(input: {
|
|
316
|
+
node: GiantNode;
|
|
317
|
+
where: string;
|
|
318
|
+
tile: {
|
|
319
|
+
x: number;
|
|
320
|
+
z: number;
|
|
321
|
+
};
|
|
322
|
+
now: number;
|
|
323
|
+
you: {
|
|
324
|
+
key: string;
|
|
325
|
+
level: number;
|
|
326
|
+
choreStanding: boolean;
|
|
327
|
+
} | null;
|
|
328
|
+
}): GiantView;
|
|
329
|
+
/** The paper map marks a Giant from the moment it lands until its remains are gone. */
|
|
330
|
+
export declare function giantOnMap(view: GiantView | null): boolean;
|
|
331
|
+
export type GiantPending = {
|
|
332
|
+
id: string;
|
|
333
|
+
kind: GiantKind;
|
|
334
|
+
band: GiantBandId;
|
|
335
|
+
large: boolean;
|
|
336
|
+
};
|
|
337
|
+
export type GiantSave = {
|
|
338
|
+
v: 1;
|
|
339
|
+
node: GiantNode | null;
|
|
340
|
+
/** When the next one lands (null until the first roll). */
|
|
341
|
+
nextAt: number | null;
|
|
342
|
+
lastSite: string | null;
|
|
343
|
+
collected: string[];
|
|
344
|
+
pending: Record<string, GiantPending[]>;
|
|
345
|
+
};
|
|
346
|
+
export declare const GIANT_PENDING_PER_CHARACTER = 8;
|
|
347
|
+
export declare const GIANT_PENDING_CHARACTERS = 5000;
|
|
348
|
+
export declare const GIANT_COLLECTED_MAX = 600;
|
|
349
|
+
export declare function emptyGiantSave(): GiantSave;
|
|
350
|
+
export declare function parseGiantNode(raw: unknown): GiantNode | null;
|
|
351
|
+
/** Defensive parse of the saved state (a corrupt save is an empty one, never a crash). */
|
|
352
|
+
export declare function parseGiantSave(raw: unknown): GiantSave;
|
|
353
|
+
/** The key a collected contribution satchel is saved under: one per character per Giant. */
|
|
354
|
+
export declare function giantCollectedKey(id: string, characterKey: string): string;
|
|
355
|
+
//# sourceMappingURL=skillingGiants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillingGiants.d.ts","sourceRoot":"","sources":["../src/skillingGiants.ts"],"names":[],"mappings":"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"}
|