isaacscript-common 48.0.0 → 49.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.
@@ -5,13 +5,14 @@ import { isNumber, isString } from "./types";
5
5
  import { assertDefined, iRange } from "./utils";
6
6
 
7
7
  /**
8
- * TypeScriptToLua will transpile TypeScript enums to Lua tables that have a double mapping. Thus,
9
- * when you iterate over them, you will get both the names of the enums and the values of the enums,
10
- * in a random order. Use this helper function to get the entries of the enum with the reverse
11
- * mappings filtered out.
8
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
9
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
10
+ * enums, in a random order. Use this helper function to get the entries of the enum with the
11
+ * reverse mappings filtered out.
12
12
  *
13
13
  * This function will return the enum values in a sorted order, which may not necessarily be the
14
- * same order as which they were declared in.
14
+ * same order as which they were declared in. (It is impossible to get the declaration order at
15
+ * run-time.)
15
16
  *
16
17
  * This function will work properly for both number enums and string enums. (Reverse mappings are
17
18
  * not created for string enums.)
@@ -45,12 +46,13 @@ export function getEnumEntries<T>(
45
46
  }
46
47
 
47
48
  /**
48
- * TypeScriptToLua will transpile TypeScript enums to Lua tables that have a double mapping. Thus,
49
- * when you iterate over them, you will get both the names of the enums and the values of the enums,
50
- * in a random order. If all you need are the keys of an enum, use this helper function.
49
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
50
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
51
+ * enums, in a random order. If all you need are the keys of an enum, use this helper function.
51
52
  *
52
53
  * This function will return the enum keys in a sorted order, which may not necessarily be the same
53
- * order as which they were declared in.
54
+ * order as which they were declared in. (It is impossible to get the declaration order at
55
+ * run-time.)
54
56
  *
55
57
  * This function will work properly for both number enums and string enums. (Reverse mappings are
56
58
  * not created for string enums.)
@@ -76,12 +78,47 @@ export function getEnumLength(
76
78
  }
77
79
 
78
80
  /**
79
- * TypeScriptToLua will transpile TypeScript enums to Lua tables that have a double mapping. Thus,
80
- * when you iterate over them, you will get both the names of the enums and the values of the enums,
81
- * in a random order. If all you need are the values of an enum, use this helper function.
81
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
82
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
83
+ * enums, in a random order. If all you need are the names of an enum from the reverse mapping, use
84
+ * this helper function.
85
+ *
86
+ * This function will return the enum names in a sorted order, which may not necessarily be the same
87
+ * order as which they were declared in. (It is impossible to get the declaration order at
88
+ * run-time.)
89
+ *
90
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
91
+ * not created for string enums, so their names would be equivalent to what would be returned by the
92
+ * `getEnumKeys` function.)
93
+ *
94
+ * For a more in depth explanation, see:
95
+ * https://isaacscript.github.io/main/gotchas#iterating-over-enums
96
+ */
97
+ export function getEnumNames(
98
+ transpiledEnum: Record<string | number, string | number>,
99
+ ): string[] {
100
+ const enumNames: string[] = [];
101
+
102
+ for (const [key, _value] of pairs(transpiledEnum)) {
103
+ if (isString(key)) {
104
+ enumNames.push(key);
105
+ }
106
+ }
107
+
108
+ // The enum names will be in a random order (because of "pairs"), so sort them.
109
+ enumNames.sort();
110
+
111
+ return enumNames;
112
+ }
113
+
114
+ /**
115
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
116
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
117
+ * enums, in a random order. If all you need are the values of an enum, use this helper function.
82
118
  *
83
119
  * This function will return the enum values in a sorted order, which may not necessarily be the
84
- * same order as which they were declared in.
120
+ * same order as which they were declared in. (It is impossible to get the declaration order at
121
+ * run-time.)
85
122
  *
86
123
  * This function will work properly for both number enums and string enums. (Reverse mappings are
87
124
  * not created for string enums.)
@@ -191,7 +228,7 @@ export function validateCustomEnum(
191
228
  }
192
229
 
193
230
  /**
194
- * Helper function to validate if every value in an enum is contiguous, starting at 0.
231
+ * Helper function to validate if every value in a number enum is contiguous, starting at 0.
195
232
  *
196
233
  * This is useful to automate checking large enums for typos.
197
234
  */
@@ -45,8 +45,8 @@ export function getNextStage(): LevelStage {
45
45
  }
46
46
 
47
47
  // -9
48
- case GridRoom.THE_VOID: {
49
- return LevelStage.THE_VOID;
48
+ case GridRoom.VOID: {
49
+ return LevelStage.VOID;
50
50
  }
51
51
 
52
52
  // -10
@@ -103,9 +103,9 @@ export function getNextStage(): LevelStage {
103
103
  }
104
104
 
105
105
  // 12
106
- if (stage === LevelStage.THE_VOID) {
106
+ if (stage === LevelStage.VOID) {
107
107
  // The Void goes to The Void.
108
- return LevelStage.THE_VOID;
108
+ return LevelStage.VOID;
109
109
  }
110
110
 
111
111
  // By default, go to the next floor.
@@ -192,7 +192,7 @@ export function getNextStageType(upwards = false): StageType {
192
192
  }
193
193
 
194
194
  // 12
195
- if (nextStage === LevelStage.THE_VOID) {
195
+ if (nextStage === LevelStage.VOID) {
196
196
  // The Void does not have any alternate floors.
197
197
  return StageType.ORIGINAL;
198
198
  }
@@ -199,7 +199,7 @@ export function goToStage(stage: LevelStage, stageType: StageType): void {
199
199
  export function isFinalFloor(stage: LevelStage, stageType: StageType): boolean {
200
200
  return (
201
201
  stage === LevelStage.DARK_ROOM_CHEST ||
202
- stage === LevelStage.THE_VOID ||
202
+ stage === LevelStage.VOID ||
203
203
  stage === LevelStage.HOME ||
204
204
  (stage === LevelStage.WOMB_2 && isRepentanceStage(stageType)) // Corpse 2
205
205
  );
@@ -244,7 +244,7 @@ export function isStageWithNaturalDevilRoom(
244
244
  * Rooms will drop random boss collectibles.
245
245
  */
246
246
  export function isStageWithRandomBossCollectible(stage: LevelStage): boolean {
247
- return !isStageWithStoryBoss(stage) || stage === LevelStage.THE_VOID;
247
+ return !isStageWithStoryBoss(stage) || stage === LevelStage.VOID;
248
248
  }
249
249
 
250
250
  /**
@@ -26,20 +26,20 @@ export const BOSS_NAME_PNG_FILE_NAMES = {
26
26
  [BossID.STEVEN]: "bossname_79.1_steven.png", // 20
27
27
  [BossID.CHAD]: "bossname_28.1_chad.png", // 21
28
28
  [BossID.HEADLESS_HORSEMAN]: "bossname_82.0_headlesshorseman.png", // 22
29
- [BossID.THE_FALLEN]: "bossname_81.0_thefallen.png", // 23
29
+ [BossID.FALLEN]: "bossname_81.0_thefallen.png", // 23
30
30
  [BossID.SATAN]: "bossname_84.0_satan.png", // 24
31
31
  [BossID.IT_LIVES]: "bossname_78.1_itlives.png", // 25
32
- [BossID.THE_HOLLOW]: "bossname_19.1_thehollow.png", // 26
33
- [BossID.THE_CARRION_QUEEN]: "bossname_28.2_carrionqueen.png", // 27
32
+ [BossID.HOLLOW]: "bossname_19.1_thehollow.png", // 26
33
+ [BossID.CARRION_QUEEN]: "bossname_28.2_carrionqueen.png", // 27
34
34
  [BossID.GURDY_JR]: "bossname_99.0_gurdyjr.png", // 28
35
- [BossID.THE_HUSK]: "bossname_67.1_thehusk.png", // 29
36
- [BossID.THE_BLOAT]: "bossname_68.1_bloat.png", // 30
35
+ [BossID.HUSK]: "bossname_67.1_thehusk.png", // 29
36
+ [BossID.BLOAT]: "bossname_68.1_bloat.png", // 30
37
37
  [BossID.LOKII]: "bossname_69.1_lokii.png", // 31
38
- [BossID.THE_BLIGHTED_OVUM]: "bossname_79.2_blightedovum.png", // 32
38
+ [BossID.BLIGHTED_OVUM]: "bossname_79.2_blightedovum.png", // 32
39
39
  [BossID.TERATOMA]: "bossname_71.1_teratoma.png", // 33
40
- [BossID.THE_WIDOW]: "bossname_100.0_widow.png", // 34
40
+ [BossID.WIDOW]: "bossname_100.0_widow.png", // 34
41
41
  [BossID.MASK_OF_INFAMY]: "bossname_97.0_maskofinfamy.png", // 35
42
- [BossID.THE_WRETCHED]: "bossname_100.1_thewretched.png", // 36
42
+ [BossID.WRETCHED]: "bossname_100.1_thewretched.png", // 36
43
43
  [BossID.PIN]: "bossname_62.0_pin.png", // 37
44
44
  [BossID.CONQUEST]: "bossname_65.1_conquest.png", // 38
45
45
  // There is no dedicated "bossname_" PNG file for Isaac.
@@ -47,49 +47,49 @@ export const BOSS_NAME_PNG_FILE_NAMES = {
47
47
  [BossID.BLUE_BABY]: "bossname_102.1_bluebaby.png", // 40
48
48
  [BossID.DADDY_LONG_LEGS]: "bossname_101.0_daddylonglegs.png", // 41
49
49
  [BossID.TRIACHNID]: "bossname_101.1_triachnid.png", // 42
50
- [BossID.THE_HAUNT]: "bossname_260.0_thehaunt.png", // 43
50
+ [BossID.HAUNT]: "bossname_260.0_thehaunt.png", // 43
51
51
  [BossID.DINGLE]: "bossname_261.0_dingle.png", // 44
52
52
  [BossID.MEGA_MAW]: "bossname_262.0_megamaw.png", // 45
53
- [BossID.THE_GATE]: "bossname_263.0_megamaw2.png", // 46
53
+ [BossID.GATE]: "bossname_263.0_megamaw2.png", // 46
54
54
  [BossID.MEGA_FATTY]: "bossname_264.0_megafatty.png", // 47
55
- [BossID.THE_CAGE]: "bossname_265.0_fatty2.png", // 48
55
+ [BossID.CAGE]: "bossname_265.0_fatty2.png", // 48
56
56
  [BossID.MAMA_GURDY]: "bossname_266.0_mamagurdy.png", // 49
57
57
  [BossID.DARK_ONE]: "bossname_267.0_darkone.png", // 50
58
- [BossID.THE_ADVERSARY]: "bossname_268.0_darkone2.png", // 51
58
+ [BossID.ADVERSARY]: "bossname_268.0_darkone2.png", // 51
59
59
  [BossID.POLYCEPHALUS]: "bossname_269.0_polycephalus.png", // 52
60
60
  [BossID.MR_FRED]: "bossname_270.0_megafred.png", // 53
61
- [BossID.THE_LAMB]: "bossname_273.0_thelamb.png", // 54
61
+ [BossID.LAMB]: "bossname_273.0_thelamb.png", // 54
62
62
  [BossID.MEGA_SATAN]: "bossname_274.0_megasatan.png", // 55
63
63
  [BossID.GURGLINGS]: "bossname_276.0_gurglings.png", // 56
64
- [BossID.THE_STAIN]: "bossname_401.0_thestain.png", // 57
64
+ [BossID.STAIN]: "bossname_401.0_thestain.png", // 57
65
65
  [BossID.BROWNIE]: "bossname_402.0_brownie.png", // 58
66
- [BossID.THE_FORSAKEN]: "bossname_403.0_theforsaken.png", // 59
66
+ [BossID.FORSAKEN]: "bossname_403.0_theforsaken.png", // 59
67
67
  [BossID.LITTLE_HORN]: "bossname_404.0_littlehorn.png", // 60
68
68
  [BossID.RAG_MAN]: "bossname_405.0_ragman.png", // 61
69
69
  [BossID.ULTRA_GREED]: "bossname_406.0_ultragreed.png", // 62
70
70
  [BossID.HUSH]: "bossname_407.0_hush.png", // 63
71
71
  [BossID.DANGLE]: "bossname_dangle.png", // 64
72
72
  [BossID.TURDLING]: "bossname_turdlings.png", // 65
73
- [BossID.THE_FRAIL]: "bossname_thefrail.png", // 66
73
+ [BossID.FRAIL]: "bossname_thefrail.png", // 66
74
74
  [BossID.RAG_MEGA]: "bossname_ragmega.png", // 67
75
75
  [BossID.SISTERS_VIS]: "bossname_sisterssvis.png", // 68
76
76
  [BossID.BIG_HORN]: "bossname_bighorn.png", // 69
77
77
  [BossID.DELIRIUM]: "bossname_delirium.png", // 70
78
78
  // There is no `BossID` with a value of 71.
79
- [BossID.THE_MATRIARCH]: "bossname_matriarch.png", // 72
80
- [BossID.THE_PILE]: "bossname_polycephalus2.png", // 73
79
+ [BossID.MATRIARCH]: "bossname_matriarch.png", // 72
80
+ [BossID.PILE]: "bossname_polycephalus2.png", // 73
81
81
  [BossID.REAP_CREEP]: "bossname_reapcreep.png", // 74
82
82
  [BossID.LIL_BLUB]: "bossname_beelzeblub.png", // 75
83
83
  [BossID.WORMWOOD]: "bossname_wormwood.png", // 76
84
84
  [BossID.RAINMAKER]: "bossname_rainmaker.png", // 77
85
- [BossID.THE_VISAGE]: "bossname_visage.png", // 78
86
- [BossID.THE_SIREN]: "bossname_siren.png", // 79
85
+ [BossID.VISAGE]: "bossname_visage.png", // 78
86
+ [BossID.SIREN]: "bossname_siren.png", // 79
87
87
  [BossID.TUFF_TWINS]: "bossname_tufftwins.png", // 80
88
- [BossID.THE_HERETIC]: "bossname_heretic.png", // 81
88
+ [BossID.HERETIC]: "bossname_heretic.png", // 81
89
89
  [BossID.HORNFEL]: "bossname_hornfel.png", // 82
90
90
  [BossID.GREAT_GIDEON]: "bossname_gideon.png", // 83
91
91
  [BossID.BABY_PLUM]: "bossname_babyplum.png", // 84
92
- [BossID.THE_SCOURGE]: "bossname_scourge.png", // 85
92
+ [BossID.SCOURGE]: "bossname_scourge.png", // 85
93
93
  [BossID.CHIMERA]: "bossname_chimera.png", // 86
94
94
  [BossID.ROTGUT]: "bossname_rotgut.png", // 87
95
95
  [BossID.MOTHER]: "bossname_mother.png", // 88
@@ -102,12 +102,12 @@ export const BOSS_NAME_PNG_FILE_NAMES = {
102
102
  [BossID.SINGE]: "bossname_singe.png", // 93
103
103
  [BossID.BUMBINO]: "bossname_bumbino.png", // 94
104
104
  [BossID.COLOSTOMIA]: "bossname_colostomia.png", // 95
105
- [BossID.THE_SHELL]: "bossname_shell.png", // 96
105
+ [BossID.SHELL]: "bossname_shell.png", // 96
106
106
  [BossID.TURDLET]: "bossname_turdlet.png", // 97
107
107
  [BossID.RAGLICH]: "bossname_raglich.png", // 98
108
108
  [BossID.DOGMA]: "bossname_dogma.png", // 99
109
109
  // There is no versus-screen for The Beast, so use Dogma instead.
110
- [BossID.THE_BEAST]: "bossname_dogma.png", // 100
110
+ [BossID.BEAST]: "bossname_dogma.png", // 100
111
111
  [BossID.HORNY_BOYS]: "bossname_hornyboys.png", // 101
112
112
  [BossID.CLUTCH]: "bossname_clutch.png", // 102
113
113
  } as const satisfies Record<BossID, string>;
@@ -26,71 +26,71 @@ export const BOSS_PORTRAIT_PNG_FILE_NAMES = {
26
26
  [BossID.STEVEN]: "portrait_79.1_steven.png", // 20
27
27
  [BossID.CHAD]: "portrait_28.1_chad.png", // 21
28
28
  [BossID.HEADLESS_HORSEMAN]: "portrait_82.0_headlesshorseman.png", // 22
29
- [BossID.THE_FALLEN]: "portrait_81.0_thefallen.png", // 23
29
+ [BossID.FALLEN]: "portrait_81.0_thefallen.png", // 23
30
30
  [BossID.SATAN]: "portrait_84.0_satan.png", // 24
31
31
  [BossID.IT_LIVES]: "portrait_78.1_itlives.png", // 25
32
- [BossID.THE_HOLLOW]: "portrait_19.1_thehollow.png", // 26
33
- [BossID.THE_CARRION_QUEEN]: "portrait_28.2_carrionqueen.png", // 27
32
+ [BossID.HOLLOW]: "portrait_19.1_thehollow.png", // 26
33
+ [BossID.CARRION_QUEEN]: "portrait_28.2_carrionqueen.png", // 27
34
34
  [BossID.GURDY_JR]: "portrait_99.0_gurdyjr.png", // 28
35
- [BossID.THE_HUSK]: "portrait_67.1_thehusk.png", // 29
36
- [BossID.THE_BLOAT]: "portrait_68.1_bloat.png", // 30
35
+ [BossID.HUSK]: "portrait_67.1_thehusk.png", // 29
36
+ [BossID.BLOAT]: "portrait_68.1_bloat.png", // 30
37
37
  [BossID.LOKII]: "portrait_69.1_lokii.png", // 31
38
- [BossID.THE_BLIGHTED_OVUM]: "portrait_79.2_blightedovum.png", // 32
38
+ [BossID.BLIGHTED_OVUM]: "portrait_79.2_blightedovum.png", // 32
39
39
  [BossID.TERATOMA]: "portrait_71.1_teratoma.png", // 33
40
- [BossID.THE_WIDOW]: "portrait_100.0_widow.png", // 34
40
+ [BossID.WIDOW]: "portrait_100.0_widow.png", // 34
41
41
  [BossID.MASK_OF_INFAMY]: "portrait_97.0_maskofinfamy.png", // 35
42
- [BossID.THE_WRETCHED]: "portrait_100.1_thewretched.png", // 36
42
+ [BossID.WRETCHED]: "portrait_100.1_thewretched.png", // 36
43
43
  [BossID.PIN]: "portrait_62.0_pin.png", // 37
44
44
  [BossID.CONQUEST]: "portrait_65.1_conquest.png", // 38
45
45
  [BossID.ISAAC]: "portrait_102.0_isaac.png", // 39
46
46
  [BossID.BLUE_BABY]: "portrait_102.1_bluebaby.png", // 40
47
47
  [BossID.DADDY_LONG_LEGS]: "portrait_101.0_daddylonglegs.png", // 41
48
48
  [BossID.TRIACHNID]: "portrait_101.1_triachnid.png", // 42
49
- [BossID.THE_HAUNT]: "portrait_260.0_thehaunt.png", // 43
49
+ [BossID.HAUNT]: "portrait_260.0_thehaunt.png", // 43
50
50
  [BossID.DINGLE]: "portrait_261.0_dingle.png", // 44
51
51
  [BossID.MEGA_MAW]: "portrait_262.0_megamaw.png", // 45
52
- [BossID.THE_GATE]: "portrait_263.0_megamaw2.png", // 46
52
+ [BossID.GATE]: "portrait_263.0_megamaw2.png", // 46
53
53
  [BossID.MEGA_FATTY]: "portrait_264.0_megafatty.png", // 47
54
- [BossID.THE_CAGE]: "portrait_265.0_fatty2.png", // 48
54
+ [BossID.CAGE]: "portrait_265.0_fatty2.png", // 48
55
55
  [BossID.MAMA_GURDY]: "portrait_266.0_mamagurdy.png", // 49
56
56
  [BossID.DARK_ONE]: "portrait_267.0_darkone.png", // 50
57
- [BossID.THE_ADVERSARY]: "portrait_268.0_darkone2.png", // 51
57
+ [BossID.ADVERSARY]: "portrait_268.0_darkone2.png", // 51
58
58
  [BossID.POLYCEPHALUS]: "portrait_269.0_polycephalus.png", // 52
59
59
  [BossID.MR_FRED]: "portrait_270.0_megafred.png", // 53
60
- [BossID.THE_LAMB]: "portrait_273.0_thelamb.png", // 54
60
+ [BossID.LAMB]: "portrait_273.0_thelamb.png", // 54
61
61
  [BossID.MEGA_SATAN]: "portrait_274.0_megasatan.png", // 55
62
62
  [BossID.GURGLINGS]: "portrait_276.0_gurglings.png", // 56
63
- [BossID.THE_STAIN]: "portrait_401.0_thestain.png", // 57
63
+ [BossID.STAIN]: "portrait_401.0_thestain.png", // 57
64
64
  [BossID.BROWNIE]: "portrait_402.0_brownie.png", // 58
65
- [BossID.THE_FORSAKEN]: "portrait_403.0_theforsaken.png", // 59
65
+ [BossID.FORSAKEN]: "portrait_403.0_theforsaken.png", // 59
66
66
  [BossID.LITTLE_HORN]: "portrait_404.0_littlehorn.png", // 60
67
67
  [BossID.RAG_MAN]: "portrait_405.0_ragman.png", // 61
68
68
  [BossID.ULTRA_GREED]: "portrait_406.0_ultragreed.png", // 62
69
69
  [BossID.HUSH]: "portrait_407.0_hush.png", // 63
70
70
  [BossID.DANGLE]: "portrait_dangle.png", // 64
71
71
  [BossID.TURDLING]: "portrait_turdlings.png", // 65
72
- [BossID.THE_FRAIL]: "portrait_thefrail.png", // 66
72
+ [BossID.FRAIL]: "portrait_thefrail.png", // 66
73
73
  [BossID.RAG_MEGA]: "portrait_ragmega.png", // 67
74
74
  [BossID.SISTERS_VIS]: "portrait_sistersvis.png", // 68
75
75
  [BossID.BIG_HORN]: "portrait_bighorn.png", // 69
76
76
  [BossID.DELIRIUM]: "portrait_delirium.png", // 70
77
77
  // There is no `BossID` with a value of 71.
78
- [BossID.THE_MATRIARCH]: "portrait_matriarch.png", // 72
79
- [BossID.THE_PILE]: "portrait_269.1_polycephalus2.png", // 73
78
+ [BossID.MATRIARCH]: "portrait_matriarch.png", // 72
79
+ [BossID.PILE]: "portrait_269.1_polycephalus2.png", // 73
80
80
  [BossID.REAP_CREEP]: "portrait_900.0_reapcreep.png", // 74
81
81
  [BossID.LIL_BLUB]: "portrait_901.0_beelzeblub.png", // 75
82
82
  // There is also a "portrait_901.0_beelzeblub_dross.png" file.
83
83
  [BossID.WORMWOOD]: "portrait_902.0_wormwood.png", // 76
84
84
  // There is also a "portrait_902.0_wormwood_dross.png" file.
85
85
  [BossID.RAINMAKER]: "portrait_902.0_rainmaker.png", // 77
86
- [BossID.THE_VISAGE]: "portrait_903.0_visage.png", // 78
87
- [BossID.THE_SIREN]: "portrait_904.0_siren.png", // 79
86
+ [BossID.VISAGE]: "portrait_903.0_visage.png", // 78
87
+ [BossID.SIREN]: "portrait_904.0_siren.png", // 79
88
88
  [BossID.TUFF_TWINS]: "portrait_19.100_tufftwins.png", // 80
89
- [BossID.THE_HERETIC]: "portrait_905.0_heretic.png", // 81
89
+ [BossID.HERETIC]: "portrait_905.0_heretic.png", // 81
90
90
  [BossID.HORNFEL]: "portrait_906.0_hornfel.png", // 82
91
91
  [BossID.GREAT_GIDEON]: "portrait_907.0_gideon.png", // 83
92
92
  [BossID.BABY_PLUM]: "portrait_908.0_babyplum.png", // 84
93
- [BossID.THE_SCOURGE]: "portrait_909.0_scourge.png", // 85
93
+ [BossID.SCOURGE]: "portrait_909.0_scourge.png", // 85
94
94
  [BossID.CHIMERA]: "portrait_910.0_chimera.png", // 86
95
95
  [BossID.ROTGUT]: "portrait_911.0_rotgut.png", // 87
96
96
  [BossID.MOTHER]: "portrait_mother.png", // 88
@@ -105,12 +105,12 @@ export const BOSS_PORTRAIT_PNG_FILE_NAMES = {
105
105
  [BossID.SINGE]: "portrait_singe.png", // 93
106
106
  [BossID.BUMBINO]: "portrait_bumbino.png", // 94
107
107
  [BossID.COLOSTOMIA]: "portrait_colostomia.png", // 95
108
- [BossID.THE_SHELL]: "portrait_shell.png", // 96
108
+ [BossID.SHELL]: "portrait_shell.png", // 96
109
109
  [BossID.TURDLET]: "portrait_turdlet.png", // 97
110
110
  [BossID.RAGLICH]: "portrait_raglich.png", // 98
111
111
  [BossID.DOGMA]: "portrait_dogma.png", // 99
112
112
  // There is no versus-screen for The Beast, so use Dogma instead.
113
- [BossID.THE_BEAST]: "portrait_dogma.png", // 100
113
+ [BossID.BEAST]: "portrait_dogma.png", // 100
114
114
  [BossID.HORNY_BOYS]: "portrait_hornyboys.png", // 101
115
115
  [BossID.CLUTCH]: "portrait_clutch.png", // 102
116
116
  } as const satisfies Record<BossID, string>;
@@ -120,7 +120,7 @@ export const LEVEL_NAMES = {
120
120
  },
121
121
 
122
122
  // 12
123
- [LevelStage.THE_VOID]: {
123
+ [LevelStage.VOID]: {
124
124
  [StageType.ORIGINAL]: "The Void",
125
125
  [StageType.WRATH_OF_THE_LAMB]: "The Void",
126
126
  [StageType.AFTERBIRTH]: "The Void",
@@ -93,6 +93,6 @@ export const STAGE_TO_MUSIC = {
93
93
  [LevelStage.BLUE_WOMB]: BLUE_WOMB_TO_MUSIC, // 9
94
94
  [LevelStage.SHEOL_CATHEDRAL]: SHEOL_CATHEDRAL_TO_MUSIC, // 10
95
95
  [LevelStage.DARK_ROOM_CHEST]: DARK_ROOM_CHEST_TO_MUSIC, // 11
96
- [LevelStage.THE_VOID]: VOID_TO_MUSIC, // 12
96
+ [LevelStage.VOID]: VOID_TO_MUSIC, // 12
97
97
  [LevelStage.HOME]: HOME_TO_MUSIC, // 13
98
98
  } as const satisfies Record<LevelStage, Record<StageType, Music>>;
@@ -93,6 +93,6 @@ export const STAGE_TO_STAGE_ID = {
93
93
  [LevelStage.BLUE_WOMB]: BLUE_WOMB_TO_STAGE_ID, // 9
94
94
  [LevelStage.SHEOL_CATHEDRAL]: SHEOL_CATHEDRAL_TO_STAGE_ID, // 10
95
95
  [LevelStage.DARK_ROOM_CHEST]: DARK_ROOM_CHEST_TO_STAGE_ID, // 11
96
- [LevelStage.THE_VOID]: VOID_TO_STAGE_ID, // 12
96
+ [LevelStage.VOID]: VOID_TO_STAGE_ID, // 12
97
97
  [LevelStage.HOME]: HOME_TO_STAGE_ID, // 13
98
98
  } as const satisfies Record<LevelStage, unknown>;
@@ -70,7 +70,7 @@ const CELLAR_BOSSES_SET = new ReadonlySet<string>([
70
70
  `${EntityType.FALLEN}.${FallenVariant.FALLEN}`, // 81.0
71
71
  `${EntityType.HEADLESS_HORSEMAN}.0`, // 82.0
72
72
  `${EntityType.WIDOW}.${WidowVariant.WIDOW}`, // 100.0
73
- `${EntityType.THE_HAUNT}.${HauntVariant.HAUNT}`, // 260.0
73
+ `${EntityType.HAUNT}.${HauntVariant.HAUNT}`, // 260.0
74
74
  `${EntityType.LITTLE_HORN}.0`, // 404.0
75
75
  `${EntityType.RAG_MAN}.${RagManVariant.RAG_MAN}`, // 405.0
76
76
  `${EntityType.BABY_PLUM}.0`, // 908.0
@@ -153,16 +153,16 @@ const CAVES_BOSSES_SET = new ReadonlySet<string>([
153
153
 
154
154
  /** Contains just the bosses in Catacombs (not e.g. Flooded Caves). */
155
155
  const CATACOMBS_BOSSES_SET = new ReadonlySet<string>([
156
- `${EntityType.LARRY_JR}.${LarryJrVariant.THE_HOLLOW}`, // 19.1
156
+ `${EntityType.LARRY_JR}.${LarryJrVariant.HOLLOW}`, // 19.1
157
157
  `${EntityType.CHUB}.${ChubVariant.CARRION_QUEEN}`, // 28.2
158
158
  `${EntityType.PIN}.${PinVariant.FRAIL}`, // 62.2
159
159
  `${EntityType.PESTILENCE}.0`, // 64.0
160
- `${EntityType.DUKE_OF_FLIES}.${DukeOfFliesVariant.THE_HUSK}`, // 67.1
160
+ `${EntityType.DUKE_OF_FLIES}.${DukeOfFliesVariant.HUSK}`, // 67.1
161
161
  `${EntityType.PEEP}.${PeepVariant.PEEP}`, // 68.0
162
162
  `${EntityType.FALLEN}.${FallenVariant.FALLEN}`, // 81.0
163
163
  `${EntityType.HEADLESS_HORSEMAN}.0`, // 82.0
164
164
  `${EntityType.GURDY_JR}.0`, // 99.0
165
- `${EntityType.WIDOW}.${WidowVariant.THE_WRETCHED}`, // 100.1
165
+ `${EntityType.WIDOW}.${WidowVariant.WRETCHED}`, // 100.1
166
166
  `${EntityType.DARK_ONE}.0`, // 267.0
167
167
  `${EntityType.POLYCEPHALUS}.${PolycephalusVariant.POLYCEPHALUS}`, // 269.0
168
168
  `${EntityType.FORSAKEN}.0`, // 403.0
@@ -202,8 +202,8 @@ const MINES_BOSSES_SET = new ReadonlySet<string>([
202
202
 
203
203
  /** Contains just the bosses in Ashpit (not e.g. Flooded Caves). */
204
204
  const ASHPIT_BOSSES_SET = new ReadonlySet<string>([
205
- `${EntityType.LARRY_JR}.${LarryJrVariant.THE_SHELL}`, // 19.3
206
- `${EntityType.POLYCEPHALUS}.${PolycephalusVariant.THE_PILE}`, // 269.1
205
+ `${EntityType.LARRY_JR}.${LarryJrVariant.SHELL}`, // 19.3
206
+ `${EntityType.POLYCEPHALUS}.${PolycephalusVariant.PILE}`, // 269.1
207
207
  `${EntityType.GREAT_GIDEON}.0`, // 907.0
208
208
  `${EntityType.SINGE}.0`, // 915.0
209
209
  `${EntityType.CLUTCH}.0`, // 921.0
@@ -255,7 +255,7 @@ const NECROPOLIS_BOSSES_SET = new ReadonlySet<string>([
255
255
  `${EntityType.HEADLESS_HORSEMAN}.0`, // 82.0
256
256
  `${EntityType.MASK_OF_INFAMY}.0`, // 97.0
257
257
  `${EntityType.ADVERSARY}.0`, // 268.0
258
- `${EntityType.POLYCEPHALUS}.${PolycephalusVariant.THE_PILE}`, // 269.1
258
+ `${EntityType.POLYCEPHALUS}.${PolycephalusVariant.PILE}`, // 269.1
259
259
  `${EntityType.BROWNIE}.0`, // 402.0
260
260
  `${EntityType.SISTERS_VIS}.0`, // 410.0
261
261
  ]);
@@ -415,7 +415,7 @@ const STAGE_10_STAGE_TYPE_TO_BOSS_SET_MAP = new ReadonlyMap<
415
415
  ]);
416
416
 
417
417
  const DARK_ROOM_BOSSES_SET = new ReadonlySet<string>([
418
- `${EntityType.THE_LAMB}.${LambVariant.LAMB}`, // 273.0
418
+ `${EntityType.LAMB}.${LambVariant.LAMB}`, // 273.0
419
419
  `${EntityType.MEGA_SATAN}.0`, // 274.0
420
420
  ]);
421
421
 
@@ -6,7 +6,7 @@ export const STORY_BOSSES_SET = new ReadonlySet<EntityType>([
6
6
  EntityType.MOMS_HEART, // 78
7
7
  EntityType.SATAN, // 84
8
8
  EntityType.ISAAC, // 102
9
- EntityType.THE_LAMB, // 273
9
+ EntityType.LAMB, // 273
10
10
  EntityType.MEGA_SATAN, // 274
11
11
  EntityType.MEGA_SATAN_2, // 275
12
12
  EntityType.ULTRA_GREED, // 406