isaacscript-common 82.0.1 → 83.0.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/dist/functions/bosses.d.ts +25 -22
- package/dist/functions/bosses.d.ts.map +1 -1
- package/dist/functions/bosses.lua +36 -36
- package/dist/index.rollup.d.ts +28 -24
- package/dist/isaacscript-common.lua +235 -154
- package/dist/sets/bossSets.d.ts +3 -3
- package/dist/sets/bossSets.d.ts.map +1 -1
- package/dist/sets/bossSets.lua +195 -117
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +2 -2
- package/src/functions/bosses.ts +42 -38
- package/src/sets/bossSets.ts +141 -134
package/src/sets/bossSets.ts
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { BossID, LevelStage, StageID } from "isaac-typescript-definitions";
|
|
2
2
|
import { BOSS_ID_VALUES } from "../arrays/cachedEnumValues";
|
|
3
|
-
import { combineSets } from "../functions/set";
|
|
4
3
|
import { isStoryBossID } from "../functions/storyBosses";
|
|
5
4
|
import { ReadonlyMap } from "../types/ReadonlyMap";
|
|
6
5
|
import { ReadonlySet } from "../types/ReadonlySet";
|
|
7
6
|
|
|
8
|
-
// The "bosspools.xml" file does not actually correspond to the real boss pools, so these
|
|
9
|
-
// determined through experimentation on v1.7.8a.
|
|
7
|
+
// The "bosspools.xml" file does not actually correspond to the real boss pools, so these data
|
|
8
|
+
// structures were determined through experimentation on v1.7.8a.
|
|
10
9
|
|
|
11
10
|
// We use sets of strings instead of tuples for these data structures because TypeScript/Lua does
|
|
12
11
|
// not have real tuples. If we store bosses as tuples, then we cannot do a set lookup in O(1).
|
|
13
12
|
|
|
14
13
|
/** For `StageID.BASEMENT` (1). */
|
|
15
|
-
const
|
|
14
|
+
const BASEMENT_BOSSES = [
|
|
16
15
|
BossID.MONSTRO, // 1
|
|
17
16
|
BossID.LARRY_JR, // 2
|
|
18
17
|
BossID.FAMINE, // 9
|
|
@@ -28,10 +27,10 @@ const BASEMENT_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
28
27
|
BossID.DANGLE, // 64
|
|
29
28
|
BossID.TURDLING, // 65
|
|
30
29
|
BossID.BABY_PLUM, // 84 (added in Repentance)
|
|
31
|
-
]
|
|
30
|
+
] as const;
|
|
32
31
|
|
|
33
32
|
/** For `StageID.CELLAR` (2). */
|
|
34
|
-
const
|
|
33
|
+
const CELLAR_BOSSES = [
|
|
35
34
|
BossID.FAMINE, // 9
|
|
36
35
|
BossID.DUKE_OF_FLIES, // 13
|
|
37
36
|
// - `BossID.FISTULA` (18) was removed in Repentance.
|
|
@@ -44,10 +43,10 @@ const CELLAR_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
44
43
|
BossID.LITTLE_HORN, // 60
|
|
45
44
|
BossID.RAG_MAN, // 61
|
|
46
45
|
BossID.BABY_PLUM, // 84 (added in Repentance)
|
|
47
|
-
]
|
|
46
|
+
] as const;
|
|
48
47
|
|
|
49
48
|
/** For `StageID.BURNING_BASEMENT` (3). */
|
|
50
|
-
const
|
|
49
|
+
const BURNING_BASEMENT_BOSSES = [
|
|
51
50
|
BossID.MONSTRO, // 1
|
|
52
51
|
BossID.LARRY_JR, // 2
|
|
53
52
|
BossID.FAMINE, // 9
|
|
@@ -64,36 +63,36 @@ const BURNING_BASEMENT_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
64
63
|
BossID.DANGLE, // 64 (added in Repentance)
|
|
65
64
|
BossID.TURDLING, // 65 (added in Repentance)
|
|
66
65
|
BossID.BABY_PLUM, // 84 (added in Repentance)
|
|
67
|
-
]
|
|
66
|
+
] as const;
|
|
68
67
|
|
|
69
68
|
/** For `StageID.DOWNPOUR` (27). */
|
|
70
|
-
const
|
|
69
|
+
const DOWNPOUR_BOSSES = [
|
|
71
70
|
BossID.LIL_BLUB, // 75
|
|
72
71
|
BossID.WORMWOOD, // 76
|
|
73
72
|
BossID.RAINMAKER, // 77
|
|
74
73
|
BossID.MIN_MIN, // 91
|
|
75
|
-
]
|
|
74
|
+
] as const;
|
|
76
75
|
|
|
77
76
|
/** For `StageID.DROSS` (28). */
|
|
78
|
-
const
|
|
77
|
+
const DROSS_BOSSES = [
|
|
79
78
|
BossID.LIL_BLUB, // 75
|
|
80
79
|
BossID.WORMWOOD, // 76
|
|
81
80
|
BossID.CLOG, // 92
|
|
82
81
|
BossID.COLOSTOMIA, // 95
|
|
83
82
|
BossID.TURDLET, // 97
|
|
84
|
-
]
|
|
83
|
+
] as const;
|
|
85
84
|
|
|
86
85
|
/** The set of unique bosses for Basement, Cellar, Burning Basement, Downpour, and Dross. */
|
|
87
|
-
const ALL_BASEMENT_BOSSES_SET
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
);
|
|
86
|
+
const ALL_BASEMENT_BOSSES_SET = new ReadonlySet<BossID>([
|
|
87
|
+
...BASEMENT_BOSSES,
|
|
88
|
+
...CELLAR_BOSSES,
|
|
89
|
+
...BURNING_BASEMENT_BOSSES,
|
|
90
|
+
...DOWNPOUR_BOSSES,
|
|
91
|
+
...DROSS_BOSSES,
|
|
92
|
+
]);
|
|
94
93
|
|
|
95
94
|
/** For `StageID.CAVES` (4). */
|
|
96
|
-
const
|
|
95
|
+
const CAVES_BOSSES = [
|
|
97
96
|
BossID.CHUB, // 3
|
|
98
97
|
BossID.GURDY, // 4
|
|
99
98
|
BossID.PESTILENCE, // 10
|
|
@@ -112,10 +111,10 @@ const CAVES_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
112
111
|
BossID.RAG_MEGA, // 67
|
|
113
112
|
BossID.BIG_HORN, // 69
|
|
114
113
|
BossID.BUMBINO, // 94 (added in Repentance)
|
|
115
|
-
]
|
|
114
|
+
] as const;
|
|
116
115
|
|
|
117
116
|
/** For `StageID.CATACOMBS` (5). */
|
|
118
|
-
const
|
|
117
|
+
const CATACOMBS_BOSSES = [
|
|
119
118
|
BossID.PESTILENCE, // 10
|
|
120
119
|
BossID.PEEP, // 14
|
|
121
120
|
BossID.HEADLESS_HORSEMAN, // 22
|
|
@@ -133,10 +132,10 @@ const CATACOMBS_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
133
132
|
BossID.RAG_MEGA, // 67
|
|
134
133
|
BossID.BIG_HORN, // 69
|
|
135
134
|
BossID.BUMBINO, // 94 (added in Repentance)
|
|
136
|
-
]
|
|
135
|
+
] as const;
|
|
137
136
|
|
|
138
137
|
/** For `StageID.FLOODED_CAVES` (6). */
|
|
139
|
-
const
|
|
138
|
+
const FLOODED_CAVES_BOSSES = [
|
|
140
139
|
BossID.CHUB, // 3
|
|
141
140
|
BossID.GURDY, // 4
|
|
142
141
|
BossID.PESTILENCE, // 10
|
|
@@ -156,40 +155,40 @@ const FLOODED_CAVES_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
156
155
|
BossID.RAG_MEGA, // 67
|
|
157
156
|
BossID.BIG_HORN, // 69
|
|
158
157
|
BossID.BUMBINO, // 94 (added in Repentance)
|
|
159
|
-
]
|
|
158
|
+
] as const;
|
|
160
159
|
|
|
161
160
|
/** For `StageID.MINES` (29). */
|
|
162
|
-
const
|
|
161
|
+
const MINES_BOSSES = [
|
|
163
162
|
BossID.REAP_CREEP, // 74
|
|
164
163
|
BossID.TUFF_TWINS, // 80
|
|
165
164
|
BossID.HORNFEL, // 82
|
|
166
165
|
BossID.GREAT_GIDEON, // 83
|
|
167
|
-
]
|
|
166
|
+
] as const;
|
|
168
167
|
|
|
169
168
|
/** For `StageID.ASHPIT` (30). */
|
|
170
|
-
const
|
|
169
|
+
const ASHPIT_BOSSES = [
|
|
171
170
|
BossID.PILE, // 73
|
|
172
171
|
BossID.GREAT_GIDEON, // 83
|
|
173
172
|
BossID.SINGE, // 93
|
|
174
173
|
BossID.SHELL, // 96
|
|
175
174
|
BossID.CLUTCH, // 102
|
|
176
|
-
]
|
|
175
|
+
] as const;
|
|
177
176
|
|
|
178
177
|
/** The set of unique bosses for Caves, Catacombs, Flooded Caves, Mines, and Ashpit. */
|
|
179
|
-
const ALL_CAVES_BOSSES_SET
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
);
|
|
178
|
+
const ALL_CAVES_BOSSES_SET = new ReadonlySet<BossID>([
|
|
179
|
+
...CAVES_BOSSES,
|
|
180
|
+
...CATACOMBS_BOSSES,
|
|
181
|
+
...FLOODED_CAVES_BOSSES,
|
|
182
|
+
...MINES_BOSSES,
|
|
183
|
+
...ASHPIT_BOSSES,
|
|
184
|
+
]);
|
|
186
185
|
|
|
187
186
|
/**
|
|
188
187
|
* For `StageID.DEPTHS` (7).
|
|
189
188
|
*
|
|
190
189
|
* Note that this set includes Mom, even though they are not technically in the boss pool.
|
|
191
190
|
*/
|
|
192
|
-
const
|
|
191
|
+
const DEPTHS_BOSSES = [
|
|
193
192
|
BossID.MONSTRO_2, // 5
|
|
194
193
|
BossID.MOM, // 6
|
|
195
194
|
BossID.WAR, // 11
|
|
@@ -203,14 +202,14 @@ const DEPTHS_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
203
202
|
BossID.BROWNIE, // 58
|
|
204
203
|
BossID.SISTERS_VIS, // 68
|
|
205
204
|
BossID.REAP_CREEP, // 74 (added in Repentance)
|
|
206
|
-
]
|
|
205
|
+
] as const;
|
|
207
206
|
|
|
208
207
|
/**
|
|
209
208
|
* For `StageID.NECROPOLIS` (8).
|
|
210
209
|
*
|
|
211
210
|
* Note that this set includes Mom, even though they are not technically in the boss pool.
|
|
212
211
|
*/
|
|
213
|
-
const
|
|
212
|
+
const NECROPOLIS_BOSSES = [
|
|
214
213
|
BossID.MOM, // 6
|
|
215
214
|
BossID.WAR, // 11
|
|
216
215
|
BossID.LOKI, // 15
|
|
@@ -223,14 +222,14 @@ const NECROPOLIS_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
223
222
|
BossID.BROWNIE, // 58
|
|
224
223
|
BossID.SISTERS_VIS, // 68
|
|
225
224
|
BossID.PILE, // 73 (added in Repentance)
|
|
226
|
-
]
|
|
225
|
+
] as const;
|
|
227
226
|
|
|
228
227
|
/**
|
|
229
228
|
* For `StageID.DANK_DEPTHS` (9).
|
|
230
229
|
*
|
|
231
230
|
* Note that this set includes Mom, even though they are not technically in the boss pool.
|
|
232
231
|
*/
|
|
233
|
-
const
|
|
232
|
+
const DANK_DEPTHS_BOSSES = [
|
|
234
233
|
BossID.MONSTRO_2, // 5
|
|
235
234
|
BossID.MOM, // 6
|
|
236
235
|
BossID.WAR, // 11
|
|
@@ -244,38 +243,38 @@ const DANK_DEPTHS_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
244
243
|
BossID.BROWNIE, // 58
|
|
245
244
|
BossID.SISTERS_VIS, // 68
|
|
246
245
|
BossID.REAP_CREEP, // 74 (added in Repentance)
|
|
247
|
-
]
|
|
246
|
+
] as const;
|
|
248
247
|
|
|
249
248
|
/**
|
|
250
249
|
* For `StageID.MAUSOLEUM` (31).
|
|
251
250
|
*
|
|
252
251
|
* Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
|
|
253
252
|
*/
|
|
254
|
-
const
|
|
253
|
+
const MAUSOLEUM_BOSSES = [
|
|
255
254
|
BossID.SIREN, // 79
|
|
256
255
|
BossID.HERETIC, // 81
|
|
257
256
|
BossID.MAUSOLEUM_MOM, // 89
|
|
258
|
-
]
|
|
257
|
+
] as const;
|
|
259
258
|
|
|
260
259
|
/**
|
|
261
260
|
* For `StageID.GEHENNA` (32).
|
|
262
261
|
*
|
|
263
262
|
* Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
|
|
264
263
|
*/
|
|
265
|
-
const
|
|
264
|
+
const GEHENNA_BOSSES = [
|
|
266
265
|
BossID.VISAGE, // 78
|
|
267
266
|
BossID.MAUSOLEUM_MOM, // 89
|
|
268
267
|
BossID.HORNY_BOYS, // 101
|
|
269
|
-
]
|
|
268
|
+
] as const;
|
|
270
269
|
|
|
271
270
|
/** The set of unique bosses for Depths, Necropolis, Dank Depths, Mausoleum, and Gehenna. */
|
|
272
|
-
const ALL_DEPTHS_BOSSES_SET
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
);
|
|
271
|
+
const ALL_DEPTHS_BOSSES_SET = new ReadonlySet<BossID>([
|
|
272
|
+
...DEPTHS_BOSSES,
|
|
273
|
+
...NECROPOLIS_BOSSES,
|
|
274
|
+
...DANK_DEPTHS_BOSSES,
|
|
275
|
+
...MAUSOLEUM_BOSSES,
|
|
276
|
+
...GEHENNA_BOSSES,
|
|
277
|
+
]);
|
|
279
278
|
|
|
280
279
|
/**
|
|
281
280
|
* For `StageID.WOMB` (10).
|
|
@@ -283,7 +282,7 @@ const ALL_DEPTHS_BOSSES_SET: ReadonlySet<BossID> = combineSets(
|
|
|
283
282
|
* Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
|
|
284
283
|
* boss pool.
|
|
285
284
|
*/
|
|
286
|
-
const
|
|
285
|
+
const WOMB_BOSSES = [
|
|
287
286
|
BossID.SCOLEX, // 7
|
|
288
287
|
BossID.MOMS_HEART, // 8
|
|
289
288
|
BossID.DEATH, // 12
|
|
@@ -301,7 +300,7 @@ const WOMB_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
301
300
|
BossID.MR_FRED, // 53
|
|
302
301
|
// - `BossID.SISTERS_VIS` (68) was removed in Repentance.
|
|
303
302
|
BossID.MATRIARCH, // 72
|
|
304
|
-
]
|
|
303
|
+
] as const;
|
|
305
304
|
|
|
306
305
|
/**
|
|
307
306
|
* For `StageID.UTERO` (11).
|
|
@@ -309,7 +308,7 @@ const WOMB_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
309
308
|
* Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
|
|
310
309
|
* boss pool.
|
|
311
310
|
*/
|
|
312
|
-
const
|
|
311
|
+
const UTERO_BOSSES = [
|
|
313
312
|
BossID.MOMS_HEART, // 8
|
|
314
313
|
BossID.DEATH, // 12
|
|
315
314
|
// - `BossID.BLASTOCYST` (16) was removed in Repentance.
|
|
@@ -326,7 +325,7 @@ const UTERO_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
326
325
|
// - `BossID.MR_FRED` (52) was removed in Repentance.
|
|
327
326
|
// - `BossID.SISTERS_VIS` (68) was removed in Repentance.
|
|
328
327
|
// - `BossID.MATRIARCH` (72) was removed in Repentance.
|
|
329
|
-
]
|
|
328
|
+
] as const;
|
|
330
329
|
|
|
331
330
|
/**
|
|
332
331
|
* For `StageID.SCARRED_WOMB` (12).
|
|
@@ -334,7 +333,7 @@ const UTERO_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
334
333
|
* Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
|
|
335
334
|
* boss pool.
|
|
336
335
|
*/
|
|
337
|
-
const
|
|
336
|
+
const SCARRED_WOMB_BOSSES = [
|
|
338
337
|
BossID.SCOLEX, // 7
|
|
339
338
|
BossID.MOMS_HEART, // 8
|
|
340
339
|
BossID.DEATH, // 12
|
|
@@ -352,111 +351,119 @@ const SCARRED_WOMB_BOSSES_SET = new ReadonlySet<BossID>([
|
|
|
352
351
|
BossID.MR_FRED, // 53 (added in Repentance)
|
|
353
352
|
// - `BossID.SISTERS_VIS` (68) was removed in Repentance.
|
|
354
353
|
BossID.MATRIARCH, // 72
|
|
355
|
-
]
|
|
354
|
+
] as const;
|
|
356
355
|
|
|
357
356
|
/**
|
|
358
357
|
* For `StageID.CORPSE` (33).
|
|
359
358
|
*
|
|
360
359
|
* Note that this set includes Mother, even though she is not technically in the boss pool.
|
|
361
360
|
*/
|
|
362
|
-
const
|
|
361
|
+
const CORPSE_BOSSES = [
|
|
363
362
|
BossID.SCOURGE, // 85
|
|
364
363
|
BossID.CHIMERA, // 86
|
|
365
364
|
BossID.ROTGUT, // 87
|
|
366
365
|
BossID.MOTHER, // 88
|
|
367
|
-
]
|
|
366
|
+
] as const;
|
|
368
367
|
|
|
369
368
|
/** The set of unique bosses for Womb, Utero, Scarred Womb, and Corpse. */
|
|
370
|
-
const ALL_WOMB_BOSSES_SET
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
);
|
|
369
|
+
const ALL_WOMB_BOSSES_SET = new ReadonlySet([
|
|
370
|
+
...WOMB_BOSSES,
|
|
371
|
+
...UTERO_BOSSES,
|
|
372
|
+
...SCARRED_WOMB_BOSSES,
|
|
373
|
+
...CORPSE_BOSSES,
|
|
374
|
+
]);
|
|
376
375
|
|
|
377
|
-
const
|
|
376
|
+
const BLUE_WOMB_BOSSES = [
|
|
378
377
|
BossID.HUSH, // 63
|
|
379
|
-
]
|
|
378
|
+
] as const;
|
|
380
379
|
|
|
381
|
-
const
|
|
380
|
+
const ALL_BLUE_WOMB_BOSSES_SET = new ReadonlySet<BossID>([...BLUE_WOMB_BOSSES]);
|
|
381
|
+
|
|
382
|
+
const SHEOL_BOSSES = [
|
|
382
383
|
BossID.SATAN, // 24
|
|
383
|
-
]
|
|
384
|
+
] as const;
|
|
384
385
|
|
|
385
|
-
const
|
|
386
|
+
const CATHEDRAL_BOSSES = [
|
|
386
387
|
BossID.ISAAC, // 39
|
|
387
|
-
]
|
|
388
|
+
] as const;
|
|
388
389
|
|
|
389
|
-
const ALL_STAGE_10_BOSSES_SET
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
);
|
|
390
|
+
const ALL_STAGE_10_BOSSES_SET = new ReadonlySet<BossID>([
|
|
391
|
+
...SHEOL_BOSSES,
|
|
392
|
+
...CATHEDRAL_BOSSES,
|
|
393
|
+
]);
|
|
393
394
|
|
|
394
395
|
/**
|
|
395
396
|
* Note that this set includes Mega Satan, even though they are not technically in the boss pool.
|
|
396
397
|
*/
|
|
397
|
-
const
|
|
398
|
+
const DARK_ROOM_BOSSES = [
|
|
398
399
|
BossID.LAMB, // 54
|
|
399
400
|
BossID.MEGA_SATAN, // 55
|
|
400
|
-
]
|
|
401
|
+
] as const;
|
|
401
402
|
|
|
402
403
|
/**
|
|
403
404
|
* Note that this set includes Mega Satan, even though they are not technically in the boss pool.
|
|
404
405
|
*/
|
|
405
|
-
const
|
|
406
|
+
const CHEST_BOSSES = [
|
|
406
407
|
BossID.BLUE_BABY, // 40
|
|
407
408
|
BossID.MEGA_SATAN, // 55
|
|
408
|
-
]
|
|
409
|
+
] as const;
|
|
409
410
|
|
|
410
|
-
const ALL_STAGE_11_BOSSES_SET
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
);
|
|
411
|
+
const ALL_STAGE_11_BOSSES_SET = new ReadonlySet<BossID>([
|
|
412
|
+
...DARK_ROOM_BOSSES,
|
|
413
|
+
...CHEST_BOSSES,
|
|
414
|
+
]);
|
|
414
415
|
|
|
415
|
-
const
|
|
416
|
+
const VOID_BOSSES = [
|
|
416
417
|
BossID.DELIRIUM, // 70
|
|
417
|
-
]
|
|
418
|
+
] as const;
|
|
419
|
+
|
|
420
|
+
const ALL_VOID_BOSSES_SET = new ReadonlySet<BossID>([...VOID_BOSSES]);
|
|
418
421
|
|
|
419
422
|
/**
|
|
420
423
|
* Includes Dogma and The Beast. Does not include Ultra Famine, Ultra Pestilence, Ultra War, and
|
|
421
424
|
* Ultra Death (since they do not have boss IDs).
|
|
422
425
|
*/
|
|
423
|
-
const
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
>([
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
[
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
]
|
|
426
|
+
const HOME_BOSSES = [
|
|
427
|
+
BossID.DOGMA, // 99
|
|
428
|
+
BossID.BEAST, // 100
|
|
429
|
+
] as const;
|
|
430
|
+
|
|
431
|
+
const ALL_HOME_BOSSES_SET = new ReadonlySet<BossID>([...HOME_BOSSES]);
|
|
432
|
+
|
|
433
|
+
export const STAGE_ID_TO_BOSS_IDS = new ReadonlyMap<StageID, readonly BossID[]>(
|
|
434
|
+
[
|
|
435
|
+
[StageID.BASEMENT, BASEMENT_BOSSES], // 1
|
|
436
|
+
[StageID.CELLAR, CELLAR_BOSSES], // 2
|
|
437
|
+
[StageID.BURNING_BASEMENT, BURNING_BASEMENT_BOSSES], // 3
|
|
438
|
+
[StageID.DOWNPOUR, DOWNPOUR_BOSSES], // 27
|
|
439
|
+
[StageID.DROSS, DROSS_BOSSES], // 28
|
|
440
|
+
|
|
441
|
+
[StageID.CAVES, CAVES_BOSSES], // 4
|
|
442
|
+
[StageID.CATACOMBS, CATACOMBS_BOSSES], // 5
|
|
443
|
+
[StageID.FLOODED_CAVES, FLOODED_CAVES_BOSSES], // 6
|
|
444
|
+
[StageID.MINES, MINES_BOSSES], // 29
|
|
445
|
+
[StageID.ASHPIT, ASHPIT_BOSSES], // 30
|
|
446
|
+
|
|
447
|
+
[StageID.DEPTHS, DEPTHS_BOSSES], // 7
|
|
448
|
+
[StageID.NECROPOLIS, NECROPOLIS_BOSSES], // 8
|
|
449
|
+
[StageID.DANK_DEPTHS, DANK_DEPTHS_BOSSES], // 9
|
|
450
|
+
[StageID.MAUSOLEUM, MAUSOLEUM_BOSSES], // 31
|
|
451
|
+
[StageID.GEHENNA, GEHENNA_BOSSES], // 32
|
|
452
|
+
|
|
453
|
+
[StageID.WOMB, WOMB_BOSSES], // 10
|
|
454
|
+
[StageID.UTERO, UTERO_BOSSES], // 11
|
|
455
|
+
[StageID.SCARRED_WOMB, SCARRED_WOMB_BOSSES], // 12
|
|
456
|
+
[StageID.CORPSE, CORPSE_BOSSES], // 33
|
|
457
|
+
|
|
458
|
+
[StageID.BLUE_WOMB, BLUE_WOMB_BOSSES], // 13
|
|
459
|
+
[StageID.SHEOL, SHEOL_BOSSES], // 14
|
|
460
|
+
[StageID.CATHEDRAL, CATHEDRAL_BOSSES], // 15
|
|
461
|
+
[StageID.DARK_ROOM, DARK_ROOM_BOSSES], // 16
|
|
462
|
+
[StageID.CHEST, CHEST_BOSSES], // 17
|
|
463
|
+
[StageID.VOID, VOID_BOSSES], // 26
|
|
464
|
+
[StageID.HOME, HOME_BOSSES], // 35
|
|
465
|
+
],
|
|
466
|
+
);
|
|
460
467
|
|
|
461
468
|
export const STAGE_TO_COMBINED_BOSS_SET_MAP = new ReadonlyMap<
|
|
462
469
|
LevelStage,
|
|
@@ -470,19 +477,19 @@ export const STAGE_TO_COMBINED_BOSS_SET_MAP = new ReadonlyMap<
|
|
|
470
477
|
[LevelStage.DEPTHS_2, ALL_DEPTHS_BOSSES_SET], // 6
|
|
471
478
|
[LevelStage.WOMB_1, ALL_WOMB_BOSSES_SET], // 7
|
|
472
479
|
[LevelStage.WOMB_2, ALL_WOMB_BOSSES_SET], // 8
|
|
473
|
-
[LevelStage.BLUE_WOMB,
|
|
480
|
+
[LevelStage.BLUE_WOMB, ALL_BLUE_WOMB_BOSSES_SET], // 9
|
|
474
481
|
[LevelStage.SHEOL_CATHEDRAL, ALL_STAGE_10_BOSSES_SET], // 10
|
|
475
482
|
[LevelStage.DARK_ROOM_CHEST, ALL_STAGE_11_BOSSES_SET], // 11
|
|
476
|
-
[LevelStage.VOID,
|
|
477
|
-
[LevelStage.HOME,
|
|
483
|
+
[LevelStage.VOID, ALL_VOID_BOSSES_SET], // 12
|
|
484
|
+
[LevelStage.HOME, ALL_HOME_BOSSES_SET], // 13
|
|
478
485
|
]);
|
|
479
486
|
|
|
480
|
-
export const
|
|
481
|
-
|
|
487
|
+
export const ALL_BOSSES: readonly BossID[] = BOSS_ID_VALUES.filter(
|
|
488
|
+
(bossID) => bossID !== BossID.RAGLICH,
|
|
482
489
|
);
|
|
483
490
|
|
|
484
|
-
export const
|
|
485
|
-
|
|
491
|
+
export const NON_STORY_BOSSES: readonly BossID[] = ALL_BOSSES.filter(
|
|
492
|
+
(bossID) => !isStoryBossID(bossID),
|
|
486
493
|
);
|
|
487
494
|
|
|
488
495
|
export const BOSS_ID_TO_STAGE_IDS = (() => {
|
|
@@ -490,8 +497,8 @@ export const BOSS_ID_TO_STAGE_IDS = (() => {
|
|
|
490
497
|
|
|
491
498
|
for (const bossID of BOSS_ID_VALUES) {
|
|
492
499
|
const stageIDs = new Set<StageID>();
|
|
493
|
-
for (const [stageID,
|
|
494
|
-
if (
|
|
500
|
+
for (const [stageID, bossIDs] of STAGE_ID_TO_BOSS_IDS) {
|
|
501
|
+
if (bossIDs.includes(bossID)) {
|
|
495
502
|
stageIDs.add(stageID);
|
|
496
503
|
}
|
|
497
504
|
}
|