isaacscript-common 82.0.2 → 83.1.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.
Files changed (35) hide show
  1. package/dist/functions/bosses.d.ts +25 -22
  2. package/dist/functions/bosses.d.ts.map +1 -1
  3. package/dist/functions/bosses.lua +36 -36
  4. package/dist/functions/stage.d.ts +17 -5
  5. package/dist/functions/stage.d.ts.map +1 -1
  6. package/dist/functions/stage.lua +70 -23
  7. package/dist/index.rollup.d.ts +46 -28
  8. package/dist/isaacscript-common.lua +397 -332
  9. package/dist/objects/stageIDNames.d.ts +40 -0
  10. package/dist/objects/stageIDNames.d.ts.map +1 -0
  11. package/dist/objects/stageIDNames.lua +41 -0
  12. package/dist/objects/stageToStageID.d.ts +2 -1
  13. package/dist/objects/stageToStageID.d.ts.map +1 -1
  14. package/dist/objects/stageToStageID.lua +29 -0
  15. package/dist/objects/versusScreenBackgroundColors.d.ts +0 -6
  16. package/dist/objects/versusScreenBackgroundColors.d.ts.map +1 -1
  17. package/dist/objects/versusScreenBackgroundColors.lua +2 -8
  18. package/dist/objects/versusScreenDirtSpotColors.d.ts +0 -6
  19. package/dist/objects/versusScreenDirtSpotColors.d.ts.map +1 -1
  20. package/dist/objects/versusScreenDirtSpotColors.lua +2 -8
  21. package/dist/sets/bossSets.d.ts +3 -3
  22. package/dist/sets/bossSets.d.ts.map +1 -1
  23. package/dist/sets/bossSets.lua +197 -119
  24. package/package.json +2 -2
  25. package/src/functions/bosses.ts +42 -38
  26. package/src/functions/stage.ts +62 -8
  27. package/src/objects/stageIDNames.ts +41 -0
  28. package/src/objects/stageToStageID.ts +33 -1
  29. package/src/objects/versusScreenBackgroundColors.ts +2 -8
  30. package/src/objects/versusScreenDirtSpotColors.ts +2 -8
  31. package/src/sets/bossSets.ts +143 -136
  32. package/dist/objects/levelNames.d.ts +0 -115
  33. package/dist/objects/levelNames.d.ts.map +0 -1
  34. package/dist/objects/levelNames.lua +0 -117
  35. package/src/objects/levelNames.ts +0 -141
@@ -1,14 +1,17 @@
1
- import type { StageID } from "isaac-typescript-definitions";
2
1
  import {
3
2
  GameStateFlag,
4
3
  LevelStage,
5
4
  RoomType,
5
+ StageID,
6
6
  StageType,
7
7
  } from "isaac-typescript-definitions";
8
8
  import { game } from "../core/cachedClasses";
9
- import { LEVEL_NAMES } from "../objects/levelNames";
10
9
  import { ROOM_TYPE_SPECIAL_GOTO_PREFIXES } from "../objects/roomTypeSpecialGotoPrefixes";
11
- import { STAGE_TO_STAGE_ID } from "../objects/stageToStageID";
10
+ import { STAGE_ID_NAMES } from "../objects/stageIDNames";
11
+ import {
12
+ STAGE_TO_STAGE_ID,
13
+ STAGE_TO_STAGE_ID_GREED_MODE,
14
+ } from "../objects/stageToStageID";
12
15
  import { STAGE_TYPE_SUFFIXES } from "../objects/stageTypeSuffixes";
13
16
  import { log } from "./log";
14
17
  import { asLevelStage } from "./types";
@@ -138,8 +141,34 @@ export function getLevelName(
138
141
  stageType = level.GetStageType();
139
142
  }
140
143
 
141
- const stageNames = LEVEL_NAMES[stage];
142
- return stageNames[stageType];
144
+ const stageID = getStageID(stage, stageType);
145
+ const stageIDName = getStageIDName(stageID);
146
+
147
+ let suffix: string;
148
+ switch (stage) {
149
+ case LevelStage.BASEMENT_1:
150
+ case LevelStage.CAVES_1:
151
+ case LevelStage.DEPTHS_1:
152
+ case LevelStage.WOMB_1: {
153
+ suffix = " 1";
154
+ break;
155
+ }
156
+
157
+ case LevelStage.BASEMENT_2:
158
+ case LevelStage.CAVES_2:
159
+ case LevelStage.DEPTHS_2:
160
+ case LevelStage.WOMB_2: {
161
+ suffix = " 2";
162
+ break;
163
+ }
164
+
165
+ default: {
166
+ suffix = "";
167
+ break;
168
+ }
169
+ }
170
+
171
+ return stageIDName + suffix;
143
172
  }
144
173
 
145
174
  /** Alias for the `Level.GetStage` method. */
@@ -150,9 +179,13 @@ export function getStage(): LevelStage {
150
179
  }
151
180
 
152
181
  /**
153
- * Helper function to get the stage ID that corresponds to a particular floor. It does this by
154
- * manually converting `LevelStage` and `StageType` into `StageID`. This is useful because
155
- * `getRoomStageID` will not correctly return the `StageID` if the player is in a special room.
182
+ * Helper function to get the stage ID that corresponds to a particular stage and stage type.
183
+ *
184
+ * This is useful because `getRoomStageID` will not correctly return the `StageID` if the player is
185
+ * in a special room.
186
+ *
187
+ * This correctly handles the case of Greed Mode. In Greed Mode, if an undefined stage and stage
188
+ * type combination are passed, `StageID.SPECIAL_ROOMS` (0) will be returned.
156
189
  *
157
190
  * @param stage Optional. If not specified, the stage corresponding to the current floor will be
158
191
  * used.
@@ -170,10 +203,31 @@ export function getStageID(stage?: LevelStage, stageType?: StageType): StageID {
170
203
  stageType = level.GetStageType();
171
204
  }
172
205
 
206
+ if (game.IsGreedMode()) {
207
+ const stageTypeToStageID = STAGE_TO_STAGE_ID_GREED_MODE.get(stage);
208
+ if (stageTypeToStageID === undefined) {
209
+ return StageID.SPECIAL_ROOMS;
210
+ }
211
+
212
+ return stageTypeToStageID[stageType];
213
+ }
214
+
173
215
  const stageTypeToStageID = STAGE_TO_STAGE_ID[stage];
174
216
  return stageTypeToStageID[stageType];
175
217
  }
176
218
 
219
+ /**
220
+ * Helper function to get the English name corresponding to a stage ID. For example, "Caves".
221
+ *
222
+ * This is derived from the data in the "stages.xml" file.
223
+ *
224
+ * Note that unlike "stages.xml", Blue Womb is specified with a name of "Blue Womb" instead of
225
+ * "???".
226
+ */
227
+ export function getStageIDName(stageID: StageID): string {
228
+ return STAGE_ID_NAMES[stageID];
229
+ }
230
+
177
231
  /** Alias for the `Level.GetStageType` method. */
178
232
  export function getStageType(): StageType {
179
233
  const level = game.GetLevel();
@@ -0,0 +1,41 @@
1
+ import { StageID } from "isaac-typescript-definitions";
2
+
3
+ /**
4
+ * Derived from "stages.xml". Note that unlike "stages.xml":
5
+ *
6
+ * - `StageID.BLUE_WOMB` (13) is specified with a name of "Blue Womb" instead of "???".
7
+ * - `StageID.StageID.BACKWARDS` (36) is specified with a name of "The Ascent" instead of "???".
8
+ */
9
+ export const STAGE_ID_NAMES = {
10
+ [StageID.SPECIAL_ROOMS]: "Special Rooms", // 0
11
+ [StageID.BASEMENT]: "Basement", // 1
12
+ [StageID.CELLAR]: "Cellar", // 2
13
+ [StageID.BURNING_BASEMENT]: "Burning Basement", // 3
14
+ [StageID.CAVES]: "Caves", // 4
15
+ [StageID.CATACOMBS]: "Catacombs", // 5
16
+ [StageID.FLOODED_CAVES]: "Flooded Caves", // 6
17
+ [StageID.DEPTHS]: "Depths", // 7
18
+ [StageID.NECROPOLIS]: "Necropolis", // 8
19
+ [StageID.DANK_DEPTHS]: "Dank Depths", // 9
20
+ [StageID.WOMB]: "Womb", // 10
21
+ [StageID.UTERO]: "Utero", // 11
22
+ [StageID.SCARRED_WOMB]: "Scarred Womb", // 12
23
+ [StageID.BLUE_WOMB]: "Blue Womb", // 13
24
+ [StageID.SHEOL]: "Sheol", // 14
25
+ [StageID.CATHEDRAL]: "Cathedral", // 15
26
+ [StageID.DARK_ROOM]: "Dark Room", // 16
27
+ [StageID.CHEST]: "Chest", // 17
28
+ [StageID.SHOP]: "The Shop", // 24
29
+ [StageID.ULTRA_GREED]: "Ultra Greed", // 25
30
+ [StageID.VOID]: "The Void", // 26
31
+ [StageID.DOWNPOUR]: "Downpour", // 27
32
+ [StageID.DROSS]: "Dross", // 28
33
+ [StageID.MINES]: "Mines", // 29
34
+ [StageID.ASHPIT]: "Ashpit", // 30
35
+ [StageID.MAUSOLEUM]: "Mausoleum", // 31
36
+ [StageID.GEHENNA]: "Gehenna", // 32
37
+ [StageID.CORPSE]: "Corpse", // 33
38
+ [StageID.MORTIS]: "Mortis", // 34
39
+ [StageID.HOME]: "Home", // 35
40
+ [StageID.BACKWARDS]: "The Ascent", // 36
41
+ } as const satisfies Record<StageID, string>;
@@ -1,4 +1,5 @@
1
1
  import { LevelStage, StageID, StageType } from "isaac-typescript-definitions";
2
+ import { ReadonlyMap } from "../types/ReadonlyMap";
2
3
 
3
4
  const BASEMENT_TO_STAGE_ID = {
4
5
  [StageType.ORIGINAL]: StageID.BASEMENT, // 0
@@ -95,4 +96,35 @@ export const STAGE_TO_STAGE_ID = {
95
96
  [LevelStage.DARK_ROOM_CHEST]: DARK_ROOM_CHEST_TO_STAGE_ID, // 11
96
97
  [LevelStage.VOID]: VOID_TO_STAGE_ID, // 12
97
98
  [LevelStage.HOME]: HOME_TO_STAGE_ID, // 13
98
- } as const satisfies Record<LevelStage, unknown>;
99
+ } as const satisfies Record<LevelStage, Record<StageType, StageID>>;
100
+
101
+ const SHOP_TO_STAGE_ID = {
102
+ [StageType.ORIGINAL]: StageID.SHOP, // 0
103
+ [StageType.WRATH_OF_THE_LAMB]: StageID.SHOP, // 1
104
+ [StageType.AFTERBIRTH]: StageID.SHOP, // 2
105
+ [StageType.GREED_MODE]: StageID.SHOP, // 3
106
+ [StageType.REPENTANCE]: StageID.SHOP, // 4
107
+ [StageType.REPENTANCE_B]: StageID.SHOP, // 5
108
+ } as const satisfies Record<StageType, StageID>;
109
+
110
+ const ULTRA_GREED_TO_STAGE_ID = {
111
+ [StageType.ORIGINAL]: StageID.ULTRA_GREED, // 0
112
+ [StageType.WRATH_OF_THE_LAMB]: StageID.ULTRA_GREED, // 1
113
+ [StageType.AFTERBIRTH]: StageID.ULTRA_GREED, // 2
114
+ [StageType.GREED_MODE]: StageID.ULTRA_GREED, // 3
115
+ [StageType.REPENTANCE]: StageID.ULTRA_GREED, // 4
116
+ [StageType.REPENTANCE_B]: StageID.ULTRA_GREED, // 5
117
+ } as const satisfies Record<StageType, StageID>;
118
+
119
+ export const STAGE_TO_STAGE_ID_GREED_MODE = new ReadonlyMap<
120
+ LevelStage,
121
+ Record<StageType, StageID>
122
+ >([
123
+ [LevelStage.BASEMENT_GREED_MODE, BASEMENT_TO_STAGE_ID], // 1
124
+ [LevelStage.CAVES_GREED_MODE, CAVES_TO_STAGE_ID], // 2
125
+ [LevelStage.DEPTHS_GREED_MODE, DEPTHS_TO_STAGE_ID], // 3
126
+ [LevelStage.WOMB_GREED_MODE, WOMB_TO_STAGE_ID], // 4
127
+ [LevelStage.SHEOL_GREED_MODE, SHEOL_CATHEDRAL_TO_STAGE_ID], // 5
128
+ [LevelStage.SHOP_GREED_MODE, SHOP_TO_STAGE_ID], // 6
129
+ [LevelStage.ULTRA_GREED_GREED_MODE, ULTRA_GREED_TO_STAGE_ID], // 7
130
+ ]);
@@ -30,14 +30,8 @@ export const VERSUS_SCREEN_BACKGROUND_COLORS = {
30
30
  [StageID.CATHEDRAL]: newReadonlyColor(6 / 255, 13 / 255, 17 / 255), // 15
31
31
  [StageID.DARK_ROOM]: newReadonlyColor(9 / 255, 4 / 255, 3 / 255), // 16
32
32
  [StageID.CHEST]: newReadonlyColor(15 / 255, 9 / 255, 6 / 255), // 17
33
- [StageID.SPECIAL_ROOMS_GREED_MODE]: DEFAULT_COLOR, // 18
34
- [StageID.BASEMENT_GREED_MODE]: BASEMENT_COLOR, // 19
35
- [StageID.CAVES_GREED_MODE]: CAVES_COLOR, // 20
36
- [StageID.DEPTHS_GREED_MODE]: DEPTHS_COLOR, // 21
37
- [StageID.WOMB_GREED_MODE]: WOMB_COLOR, // 22
38
- [StageID.SHEOL_GREED_MODE]: SHEOL_COLOR, // 23
39
- [StageID.SHOP_GREED_MODE]: DEFAULT_COLOR, // 24
40
- [StageID.ULTRA_GREED_GREED_MODE]: DEFAULT_COLOR, // 25
33
+ [StageID.SHOP]: DEFAULT_COLOR, // 24
34
+ [StageID.ULTRA_GREED]: DEFAULT_COLOR, // 25
41
35
  [StageID.VOID]: newReadonlyColor(0, 0, 0), // 26
42
36
  [StageID.DOWNPOUR]: newReadonlyColor(29 / 255, 30 / 255, 32 / 255), // 27
43
37
  [StageID.DROSS]: newReadonlyColor(35 / 255, 35 / 255, 29 / 255), // 28
@@ -30,14 +30,8 @@ export const VERSUS_SCREEN_DIRT_SPOT_COLORS = {
30
30
  [StageID.CATHEDRAL]: newReadonlyColor(44 / 255, 100 / 255, 111 / 255), // 15
31
31
  [StageID.DARK_ROOM]: newReadonlyColor(80 / 255, 38 / 255, 20 / 255), // 16
32
32
  [StageID.CHEST]: newReadonlyColor(175 / 255, 108 / 255, 72 / 255), // 17
33
- [StageID.SPECIAL_ROOMS_GREED_MODE]: DEFAULT_COLOR, // 18
34
- [StageID.BASEMENT_GREED_MODE]: BASEMENT_COLOR, // 19
35
- [StageID.CAVES_GREED_MODE]: CAVES_COLOR, // 20
36
- [StageID.DEPTHS_GREED_MODE]: DEPTHS_COLOR, // 21
37
- [StageID.WOMB_GREED_MODE]: WOMB_COLOR, // 22
38
- [StageID.SHEOL_GREED_MODE]: SHEOL_COLOR, // 23
39
- [StageID.SHOP_GREED_MODE]: DEFAULT_COLOR, // 24
40
- [StageID.ULTRA_GREED_GREED_MODE]: DEFAULT_COLOR, // 25
33
+ [StageID.SHOP]: DEFAULT_COLOR, // 24
34
+ [StageID.ULTRA_GREED]: DEFAULT_COLOR, // 25
41
35
  [StageID.VOID]: newReadonlyColor(70 / 255, 5 / 255, 5 / 255), // 26
42
36
  [StageID.DOWNPOUR]: newReadonlyColor(149 / 255, 157 / 255, 167 / 255), // 27
43
37
  [StageID.DROSS]: newReadonlyColor(179 / 255, 179 / 255, 143 / 255), // 28