isaacscript-common 21.5.3 → 21.6.1

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 (67) hide show
  1. package/dist/index.rollup.d.ts +12 -0
  2. package/dist/isaacscript-common.lua +118 -4
  3. package/dist/src/classes/callbacks/InputActionFilter.d.ts.map +1 -1
  4. package/dist/src/classes/callbacks/InputActionPlayer.d.ts.map +1 -1
  5. package/dist/src/classes/callbacks/PostCollectibleEmpty.d.ts.map +1 -1
  6. package/dist/src/classes/callbacks/PostCustomRevive.d.ts.map +1 -1
  7. package/dist/src/classes/callbacks/PostDiceRoomActivated.d.ts.map +1 -1
  8. package/dist/src/classes/callbacks/PostGridEntityCollision.d.ts.map +1 -1
  9. package/dist/src/classes/callbacks/PostGridEntityCustomCollision.d.ts.map +1 -1
  10. package/dist/src/classes/callbacks/PostGridEntityCustomRemove.d.ts.map +1 -1
  11. package/dist/src/classes/callbacks/PostGridEntityRemove.d.ts.map +1 -1
  12. package/dist/src/classes/callbacks/PostItemDischarge.d.ts.map +1 -1
  13. package/dist/src/classes/callbacks/PostKeyboardChanged.d.ts.map +1 -1
  14. package/dist/src/classes/callbacks/PostPurchase.d.ts.map +1 -1
  15. package/dist/src/classes/callbacks/PostRoomClearChanged.d.ts.map +1 -1
  16. package/dist/src/classes/callbacks/PostTransformation.d.ts.map +1 -1
  17. package/dist/src/classes/callbacks/PreEntitySpawnFilter.d.ts.map +1 -1
  18. package/dist/src/classes/callbacks/PreRoomEntitySpawnFilter.d.ts.map +1 -1
  19. package/dist/src/classes/features/other/CustomItemPools.d.ts.map +1 -1
  20. package/dist/src/classes/features/other/CustomItemPools.lua +3 -0
  21. package/dist/src/classes/features/other/RunInNFrames.d.ts.map +1 -1
  22. package/dist/src/classes/features/other/RunNextRoom.d.ts.map +1 -1
  23. package/dist/src/classes/features/other/TaintedLazarusPlayers.d.ts.map +1 -1
  24. package/dist/src/classes/private/CustomCallback.d.ts.map +1 -1
  25. package/dist/src/functions/stage.d.ts +12 -1
  26. package/dist/src/functions/stage.d.ts.map +1 -1
  27. package/dist/src/functions/stage.lua +21 -0
  28. package/dist/src/functions/weighted.d.ts.map +1 -1
  29. package/dist/src/functions/weighted.lua +3 -0
  30. package/dist/src/interfaces/CustomStageTSConfig.d.ts.map +1 -1
  31. package/dist/src/objects/englishLevelNames.d.ts.map +1 -1
  32. package/dist/src/objects/roomTypeGotoPrefixes.d.ts +1 -1
  33. package/dist/src/objects/roomTypeGotoPrefixes.lua +1 -1
  34. package/dist/src/objects/stageToMusic.lua +2 -2
  35. package/dist/src/objects/stageToStageID.d.ts +108 -0
  36. package/dist/src/objects/stageToStageID.d.ts.map +1 -0
  37. package/dist/src/objects/stageToStageID.lua +93 -0
  38. package/package.json +1 -1
  39. package/src/classes/callbacks/InputActionFilter.ts +0 -1
  40. package/src/classes/callbacks/InputActionPlayer.ts +0 -1
  41. package/src/classes/callbacks/PostCollectibleEmpty.ts +0 -1
  42. package/src/classes/callbacks/PostCustomRevive.ts +0 -1
  43. package/src/classes/callbacks/PostDiceRoomActivated.ts +0 -1
  44. package/src/classes/callbacks/PostGridEntityCollision.ts +0 -1
  45. package/src/classes/callbacks/PostGridEntityCustomCollision.ts +0 -1
  46. package/src/classes/callbacks/PostGridEntityCustomRemove.ts +0 -1
  47. package/src/classes/callbacks/PostGridEntityRemove.ts +0 -1
  48. package/src/classes/callbacks/PostItemDischarge.ts +0 -1
  49. package/src/classes/callbacks/PostKeyboardChanged.ts +0 -1
  50. package/src/classes/callbacks/PostPurchase.ts +0 -1
  51. package/src/classes/callbacks/PostRoomClearChanged.ts +0 -1
  52. package/src/classes/callbacks/PostTransformation.ts +0 -1
  53. package/src/classes/callbacks/PreEntitySpawnFilter.ts +0 -1
  54. package/src/classes/callbacks/PreRoomEntitySpawnFilter.ts +0 -1
  55. package/src/classes/features/other/CustomItemPools.ts +6 -2
  56. package/src/classes/features/other/RunInNFrames.ts +0 -1
  57. package/src/classes/features/other/RunNextRoom.ts +0 -1
  58. package/src/classes/features/other/TaintedLazarusPlayers.ts +0 -1
  59. package/src/classes/features/other/customStages/backdrop.ts +2 -4
  60. package/src/classes/private/CustomCallback.ts +0 -1
  61. package/src/functions/stage.ts +27 -1
  62. package/src/functions/weighted.ts +8 -2
  63. package/src/interfaces/CustomStageTSConfig.ts +0 -2
  64. package/src/objects/englishLevelNames.ts +0 -1
  65. package/src/objects/roomTypeGotoPrefixes.ts +1 -1
  66. package/src/objects/stageToMusic.ts +68 -68
  67. package/src/objects/stageToStageID.ts +98 -0
@@ -0,0 +1,93 @@
1
+ local ____exports = {}
2
+ local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
3
+ local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
4
+ local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
5
+ local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
6
+ local BASEMENT_TO_STAGE_ID = {
7
+ [StageType.ORIGINAL] = StageID.BASEMENT,
8
+ [StageType.WRATH_OF_THE_LAMB] = StageID.CELLAR,
9
+ [StageType.AFTERBIRTH] = StageID.BURNING_BASEMENT,
10
+ [StageType.GREED_MODE] = StageID.BASEMENT,
11
+ [StageType.REPENTANCE] = StageID.DOWNPOUR,
12
+ [StageType.REPENTANCE_B] = StageID.DROSS
13
+ }
14
+ local CAVES_TO_STAGE_ID = {
15
+ [StageType.ORIGINAL] = StageID.CAVES,
16
+ [StageType.WRATH_OF_THE_LAMB] = StageID.CATACOMBS,
17
+ [StageType.AFTERBIRTH] = StageID.FLOODED_CAVES,
18
+ [StageType.GREED_MODE] = StageID.CAVES,
19
+ [StageType.REPENTANCE] = StageID.MINES,
20
+ [StageType.REPENTANCE_B] = StageID.ASHPIT
21
+ }
22
+ local DEPTHS_TO_STAGE_ID = {
23
+ [StageType.ORIGINAL] = StageID.DEPTHS,
24
+ [StageType.WRATH_OF_THE_LAMB] = StageID.NECROPOLIS,
25
+ [StageType.AFTERBIRTH] = StageID.DANK_DEPTHS,
26
+ [StageType.GREED_MODE] = StageID.DEPTHS,
27
+ [StageType.REPENTANCE] = StageID.MAUSOLEUM,
28
+ [StageType.REPENTANCE_B] = StageID.GEHENNA
29
+ }
30
+ local WOMB_TO_STAGE_ID = {
31
+ [StageType.ORIGINAL] = StageID.WOMB,
32
+ [StageType.WRATH_OF_THE_LAMB] = StageID.UTERO,
33
+ [StageType.AFTERBIRTH] = StageID.SCARRED_WOMB,
34
+ [StageType.GREED_MODE] = StageID.WOMB,
35
+ [StageType.REPENTANCE] = StageID.CORPSE,
36
+ [StageType.REPENTANCE_B] = StageID.MORTIS
37
+ }
38
+ local BLUE_WOMB_TO_STAGE_ID = {
39
+ [StageType.ORIGINAL] = StageID.BLUE_WOMB,
40
+ [StageType.WRATH_OF_THE_LAMB] = StageID.BLUE_WOMB,
41
+ [StageType.AFTERBIRTH] = StageID.BLUE_WOMB,
42
+ [StageType.GREED_MODE] = StageID.BLUE_WOMB,
43
+ [StageType.REPENTANCE] = StageID.BLUE_WOMB,
44
+ [StageType.REPENTANCE_B] = StageID.BLUE_WOMB
45
+ }
46
+ local SHEOL_CATHEDRAL_TO_STAGE_ID = {
47
+ [StageType.ORIGINAL] = StageID.SHEOL,
48
+ [StageType.WRATH_OF_THE_LAMB] = StageID.CATHEDRAL,
49
+ [StageType.AFTERBIRTH] = StageID.SHEOL,
50
+ [StageType.GREED_MODE] = StageID.SHEOL,
51
+ [StageType.REPENTANCE] = StageID.SHEOL,
52
+ [StageType.REPENTANCE_B] = StageID.SHEOL
53
+ }
54
+ local DARK_ROOM_CHEST_TO_STAGE_ID = {
55
+ [StageType.ORIGINAL] = StageID.DARK_ROOM,
56
+ [StageType.WRATH_OF_THE_LAMB] = StageID.CHEST,
57
+ [StageType.AFTERBIRTH] = StageID.DARK_ROOM,
58
+ [StageType.GREED_MODE] = StageID.DARK_ROOM,
59
+ [StageType.REPENTANCE] = StageID.DARK_ROOM,
60
+ [StageType.REPENTANCE_B] = StageID.DARK_ROOM
61
+ }
62
+ local VOID_TO_STAGE_ID = {
63
+ [StageType.ORIGINAL] = StageID.VOID,
64
+ [StageType.WRATH_OF_THE_LAMB] = StageID.VOID,
65
+ [StageType.AFTERBIRTH] = StageID.VOID,
66
+ [StageType.GREED_MODE] = StageID.VOID,
67
+ [StageType.REPENTANCE] = StageID.VOID,
68
+ [StageType.REPENTANCE_B] = StageID.VOID
69
+ }
70
+ local HOME_TO_STAGE_ID = {
71
+ [StageType.ORIGINAL] = StageID.HOME,
72
+ [StageType.WRATH_OF_THE_LAMB] = StageID.HOME,
73
+ [StageType.AFTERBIRTH] = StageID.HOME,
74
+ [StageType.GREED_MODE] = StageID.HOME,
75
+ [StageType.REPENTANCE] = StageID.HOME,
76
+ [StageType.REPENTANCE_B] = StageID.HOME
77
+ }
78
+ ____exports.STAGE_TO_STAGE_ID = {
79
+ [LevelStage.BASEMENT_1] = BASEMENT_TO_STAGE_ID,
80
+ [LevelStage.BASEMENT_2] = BASEMENT_TO_STAGE_ID,
81
+ [LevelStage.CAVES_1] = CAVES_TO_STAGE_ID,
82
+ [LevelStage.CAVES_2] = CAVES_TO_STAGE_ID,
83
+ [LevelStage.DEPTHS_1] = DEPTHS_TO_STAGE_ID,
84
+ [LevelStage.DEPTHS_2] = DEPTHS_TO_STAGE_ID,
85
+ [LevelStage.WOMB_1] = WOMB_TO_STAGE_ID,
86
+ [LevelStage.WOMB_2] = WOMB_TO_STAGE_ID,
87
+ [LevelStage.BLUE_WOMB] = BLUE_WOMB_TO_STAGE_ID,
88
+ [LevelStage.SHEOL_CATHEDRAL] = SHEOL_CATHEDRAL_TO_STAGE_ID,
89
+ [LevelStage.DARK_ROOM_CHEST] = DARK_ROOM_CHEST_TO_STAGE_ID,
90
+ [LevelStage.THE_VOID] = VOID_TO_STAGE_ID,
91
+ [LevelStage.HOME] = HOME_TO_STAGE_ID
92
+ }
93
+ return ____exports
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "21.5.3",
3
+ "version": "21.6.1",
4
4
  "description": "Helper functions and features for IsaacScript mods.",
5
5
  "keywords": [
6
6
  "isaac",
@@ -22,7 +22,6 @@ export class InputActionFilter extends CustomCallback<T> {
22
22
  ];
23
23
  }
24
24
 
25
- // eslint-disable-next-line class-methods-use-this
26
25
  protected override shouldFire = (
27
26
  fireArgs: FireArgs<T>,
28
27
  optionalArgs: OptionalArgs<T>,
@@ -22,7 +22,6 @@ export class InputActionPlayer extends CustomCallback<T> {
22
22
  ];
23
23
  }
24
24
 
25
- // eslint-disable-next-line class-methods-use-this
26
25
  protected override shouldFire = (
27
26
  fireArgs: FireArgs<T>,
28
27
  optionalArgs: OptionalArgs<T>,
@@ -32,7 +32,6 @@ export class PostCollectibleEmpty extends CustomCallback<T> {
32
32
  ];
33
33
  }
34
34
 
35
- // eslint-disable-next-line class-methods-use-this
36
35
  protected override shouldFire = (
37
36
  fireArgs: FireArgs<T>,
38
37
  optionalArgs: OptionalArgs<T>,
@@ -15,7 +15,6 @@ export class PostCustomRevive extends CustomCallback<ModCallbackCustom.POST_CUST
15
15
  this.featuresUsed = [ISCFeature.CUSTOM_REVIVE];
16
16
  }
17
17
 
18
- // eslint-disable-next-line class-methods-use-this
19
18
  protected override shouldFire = (
20
19
  fireArgs: FireArgs<T>,
21
20
  optionalArgs: OptionalArgs<T>,
@@ -34,7 +34,6 @@ export class PostDiceRoomActivated extends CustomCallback<T> {
34
34
  ];
35
35
  }
36
36
 
37
- // eslint-disable-next-line class-methods-use-this
38
37
  protected override shouldFire = (
39
38
  fireArgs: FireArgs<T>,
40
39
  optionalArgs: OptionalArgs<T>,
@@ -15,7 +15,6 @@ export class PostGridEntityCollision extends CustomCallback<T> {
15
15
  this.featuresUsed = [ISCFeature.GRID_ENTITY_COLLISION_DETECTION];
16
16
  }
17
17
 
18
- // eslint-disable-next-line class-methods-use-this
19
18
  protected override shouldFire = (
20
19
  fireArgs: FireArgs<T>,
21
20
  optionalArgs: OptionalArgs<T>,
@@ -15,7 +15,6 @@ export class PostGridEntityCustomCollision extends CustomCallback<T> {
15
15
  this.featuresUsed = [ISCFeature.GRID_ENTITY_COLLISION_DETECTION];
16
16
  }
17
17
 
18
- // eslint-disable-next-line class-methods-use-this
19
18
  protected override shouldFire = (
20
19
  fireArgs: FireArgs<T>,
21
20
  optionalArgs: OptionalArgs<T>,
@@ -15,7 +15,6 @@ export class PostGridEntityCustomRemove extends CustomCallback<T> {
15
15
  this.featuresUsed = [ISCFeature.GRID_ENTITY_UPDATE_DETECTION];
16
16
  }
17
17
 
18
- // eslint-disable-next-line class-methods-use-this
19
18
  protected override shouldFire = (
20
19
  fireArgs: FireArgs<T>,
21
20
  optionalArgs: OptionalArgs<T>,
@@ -15,7 +15,6 @@ export class PostGridEntityRemove extends CustomCallback<T> {
15
15
  this.featuresUsed = [ISCFeature.GRID_ENTITY_UPDATE_DETECTION];
16
16
  }
17
17
 
18
- // eslint-disable-next-line class-methods-use-this
19
18
  protected override shouldFire = (
20
19
  fireArgs: FireArgs<T>,
21
20
  optionalArgs: OptionalArgs<T>,
@@ -68,7 +68,6 @@ export class PostItemDischarge extends CustomCallback<T> {
68
68
  ];
69
69
  }
70
70
 
71
- // eslint-disable-next-line class-methods-use-this
72
71
  protected override shouldFire = (
73
72
  fireArgs: FireArgs<T>,
74
73
  optionalArgs: OptionalArgs<T>,
@@ -26,7 +26,6 @@ export class PostKeyboardChanged extends CustomCallback<T> {
26
26
  ];
27
27
  }
28
28
 
29
- // eslint-disable-next-line class-methods-use-this
30
29
  protected override shouldFire = (
31
30
  fireArgs: FireArgs<T>,
32
31
  optionalArgs: OptionalArgs<T>,
@@ -34,7 +34,6 @@ export class PostPurchase extends CustomCallback<T> {
34
34
  ];
35
35
  }
36
36
 
37
- // eslint-disable-next-line class-methods-use-this
38
37
  protected override shouldFire = (
39
38
  fireArgs: FireArgs<T>,
40
39
  optionalArgs: OptionalArgs<T>,
@@ -29,7 +29,6 @@ export class PostRoomClearChanged extends CustomCallback<T> {
29
29
  ];
30
30
  }
31
31
 
32
- // eslint-disable-next-line class-methods-use-this
33
32
  protected override shouldFire = (
34
33
  fireArgs: FireArgs<T>,
35
34
  optionalArgs: OptionalArgs<T>,
@@ -34,7 +34,6 @@ export class PostTransformation extends CustomCallback<T> {
34
34
  ];
35
35
  }
36
36
 
37
- // eslint-disable-next-line class-methods-use-this
38
37
  protected override shouldFire = (
39
38
  fireArgs: FireArgs<T>,
40
39
  optionalArgs: OptionalArgs<T>,
@@ -18,7 +18,6 @@ export class PreEntitySpawnFilter extends CustomCallback<T> {
18
18
  ];
19
19
  }
20
20
 
21
- // eslint-disable-next-line class-methods-use-this
22
21
  protected override shouldFire = (
23
22
  fireArgs: FireArgs<T>,
24
23
  optionalArgs: OptionalArgs<T>,
@@ -22,7 +22,6 @@ export class PreRoomEntitySpawnFilter extends CustomCallback<T> {
22
22
  ];
23
23
  }
24
24
 
25
- // eslint-disable-next-line class-methods-use-this
26
25
  protected override shouldFire = (
27
26
  fireArgs: FireArgs<T>,
28
27
  optionalArgs: OptionalArgs<T>,
@@ -127,8 +127,12 @@ export class CustomItemPools extends Feature {
127
127
  customItemPool,
128
128
  seedOrRNG,
129
129
  );
130
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
131
- const tuple = customItemPool[randomIndex]!;
130
+ const tuple = customItemPool[randomIndex];
131
+ if (tuple === undefined) {
132
+ error(
133
+ `Failed to get an element from a custom item pool using a random index of: ${randomIndex}`,
134
+ );
135
+ }
132
136
 
133
137
  if (decrease) {
134
138
  arrayRemoveIndexInPlace(customItemPool, randomIndex);
@@ -40,7 +40,6 @@ export class RunInNFrames extends Feature {
40
40
  },
41
41
  };
42
42
 
43
- // eslint-disable-next-line class-methods-use-this
44
43
  public override vConditionalFunc = (): boolean => false;
45
44
 
46
45
  private roomHistory: RoomHistory;
@@ -11,7 +11,6 @@ export class RunNextRoom extends Feature {
11
11
  },
12
12
  };
13
13
 
14
- // eslint-disable-next-line class-methods-use-this
15
14
  public override vConditionalFunc = (): boolean => false;
16
15
 
17
16
  /** @internal */
@@ -31,7 +31,6 @@ export class TaintedLazarusPlayers extends Feature {
31
31
  },
32
32
  };
33
33
 
34
- // eslint-disable-next-line class-methods-use-this
35
34
  public override vConditionalFunc = (): boolean => false;
36
35
 
37
36
  /** @internal */
@@ -179,8 +179,7 @@ function spawnWallEntity(
179
179
  wallEffect.SpriteOffset = modifiedOffset;
180
180
 
181
181
  sprite.LoadGraphics();
182
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
183
- const roomShapeName = RoomShape[roomShape]!;
182
+ const roomShapeName = RoomShape[roomShape];
184
183
  const animation = trimPrefix(roomShapeName, "SHAPE_");
185
184
  const modifiedAnimation = isExtraWall ? `${animation}X` : animation;
186
185
  sprite.Play(modifiedAnimation, true);
@@ -254,8 +253,7 @@ function spawnFloorEntity(customStage: CustomStage, rng: RNG) {
254
253
  floorEffect.SpriteOffset = modifiedOffset;
255
254
 
256
255
  sprite.LoadGraphics();
257
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
258
- const roomShapeName = RoomShape[roomShape]!;
256
+ const roomShapeName = RoomShape[roomShape];
259
257
  const animation = trimPrefix(roomShapeName, "SHAPE_");
260
258
  sprite.Play(animation, true);
261
259
  }
@@ -81,7 +81,6 @@ export abstract class CustomCallback<
81
81
  * This method needs to be overwritten for any callback that has optional filtration arguments.
82
82
  * See "shouldFire.ts" for methods tailored to specific kinds of callbacks.
83
83
  */
84
- // eslint-disable-next-line class-methods-use-this
85
84
  protected shouldFire: (
86
85
  fireArgs: FireArgs<T>,
87
86
  optionalArgs: OptionalArgs<T>,
@@ -2,11 +2,13 @@ import {
2
2
  GameStateFlag,
3
3
  LevelStage,
4
4
  RoomType,
5
+ StageID,
5
6
  StageType,
6
7
  } from "isaac-typescript-definitions";
7
8
  import { game } from "../core/cachedClasses";
8
9
  import { ENGLISH_LEVEL_NAMES } from "../objects/englishLevelNames";
9
10
  import { ROOM_TYPE_GOTO_PREFIXES } from "../objects/roomTypeGotoPrefixes";
11
+ import { STAGE_TO_STAGE_ID } from "../objects/stageToStageID";
10
12
  import { STAGE_TYPE_SUFFIXES } from "../objects/stageTypeSuffixes";
11
13
  import { STAGE_TYPE_TO_LETTER } from "../objects/stageTypeToLetter";
12
14
  import { asLevelStage, asNumber } from "./types";
@@ -88,7 +90,6 @@ export function getEffectiveStage(): LevelStage {
88
90
  return stage;
89
91
  }
90
92
 
91
- // eslint-disable-next-line isaacscript/complete-sentences-jsdoc
92
93
  /**
93
94
  * Helper function to get the English name of the level. For example, "Caves 1".
94
95
  *
@@ -134,6 +135,31 @@ export function getStage(): LevelStage {
134
135
  return level.GetStage();
135
136
  }
136
137
 
138
+ /**
139
+ * Helper function to get the stage ID that corresponds to a particular floor. It does this by
140
+ * manually converting `LevelStage` and `StageType` into `StageID`. This is useful because
141
+ * `getRoomStageID` will not correctly return the `StageID` if the player is in a special room.
142
+ *
143
+ * @param stage Optional. If not specified, the stage corresponding to the current floor will be
144
+ * used.
145
+ * @param stageType Optional. If not specified, the stage type corresponding to the current floor
146
+ * will be used.
147
+ */
148
+ export function getStageID(stage?: LevelStage, stageType?: StageType): StageID {
149
+ const level = game.GetLevel();
150
+
151
+ if (stage === undefined) {
152
+ stage = level.GetStage();
153
+ }
154
+
155
+ if (stageType === undefined) {
156
+ stageType = level.GetStageType();
157
+ }
158
+
159
+ const stageTypeToStageID = STAGE_TO_STAGE_ID[stage];
160
+ return stageTypeToStageID[stageType];
161
+ }
162
+
137
163
  /** Alias for the `Level.GetStageType` method. */
138
164
  export function getStageType(): StageType {
139
165
  const level = game.GetLevel();
@@ -13,8 +13,14 @@ export function getRandomFromWeightedArray<T>(
13
13
  seedOrRNG: Seed | RNG = getRandomSeed(),
14
14
  ): T {
15
15
  const randomIndex = getRandomIndexFromWeightedArray(weightedArray, seedOrRNG);
16
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
17
- const randomElement = weightedArray[randomIndex]!;
16
+
17
+ const randomElement = weightedArray[randomIndex];
18
+ if (randomElement === undefined) {
19
+ error(
20
+ `Failed to get an element from a weighted array using a random index of: ${randomIndex}`,
21
+ );
22
+ }
23
+
18
24
  return randomElement[0];
19
25
  }
20
26
 
@@ -548,7 +548,6 @@ export interface CustomStageBossPoolEntry {
548
548
 
549
549
  /** Optional. A collection of sprites used for the boss on the "versus" screen. */
550
550
  versusScreen?: {
551
- // eslint-disable-next-line isaacscript/complete-sentences-jsdoc
552
551
  /**
553
552
  * Mandatory. The full path to the spritesheet that contains the graphics of the name of the
554
553
  * boss that will be displayed on the top of the boss "versus" screen.
@@ -557,7 +556,6 @@ export interface CustomStageBossPoolEntry {
557
556
  */
558
557
  namePNGPath: string;
559
558
 
560
- // eslint-disable-next-line isaacscript/complete-sentences-jsdoc
561
559
  /**
562
560
  * Mandatory. The full path to the spritesheet that contains the portrait of the boss that will
563
561
  * be displayed on the right side of the boss "versus" screen.
@@ -1,6 +1,5 @@
1
1
  import { LevelStage, StageType } from "isaac-typescript-definitions";
2
2
 
3
- // eslint-disable-next-line isaacscript/complete-sentences-jsdoc
4
3
  /**
5
4
  * A mapping of stage and stage types to the corresponding English level name.
6
5
  *
@@ -1,7 +1,7 @@
1
1
  import { RoomType } from "isaac-typescript-definitions";
2
2
 
3
3
  export const ROOM_TYPE_GOTO_PREFIXES = {
4
- [RoomType.DEFAULT]: "s.default", // 1
4
+ [RoomType.DEFAULT]: "d", // 1
5
5
  [RoomType.SHOP]: "s.shop", // 2
6
6
  [RoomType.ERROR]: "s.error", // 3
7
7
  [RoomType.TREASURE]: "s.treasure", // 4
@@ -1,98 +1,98 @@
1
1
  import { LevelStage, Music, StageType } from "isaac-typescript-definitions";
2
2
 
3
3
  const BASEMENT_TO_MUSIC = {
4
- [StageType.ORIGINAL]: Music.BASEMENT,
5
- [StageType.WRATH_OF_THE_LAMB]: Music.CELLAR,
6
- [StageType.AFTERBIRTH]: Music.BURNING_BASEMENT,
7
- [StageType.GREED_MODE]: Music.BASEMENT,
8
- [StageType.REPENTANCE]: Music.DOWNPOUR,
9
- [StageType.REPENTANCE_B]: Music.DROSS,
4
+ [StageType.ORIGINAL]: Music.BASEMENT, // 0
5
+ [StageType.WRATH_OF_THE_LAMB]: Music.CELLAR, // 1
6
+ [StageType.AFTERBIRTH]: Music.BURNING_BASEMENT, // 2
7
+ [StageType.GREED_MODE]: Music.BASEMENT, // 3
8
+ [StageType.REPENTANCE]: Music.DOWNPOUR, // 4
9
+ [StageType.REPENTANCE_B]: Music.DROSS, // 5
10
10
  } as const satisfies Record<StageType, Music>;
11
11
 
12
12
  const CAVES_TO_MUSIC = {
13
- [StageType.ORIGINAL]: Music.CAVES,
14
- [StageType.WRATH_OF_THE_LAMB]: Music.CATACOMBS,
15
- [StageType.AFTERBIRTH]: Music.FLOODED_CAVES,
16
- [StageType.GREED_MODE]: Music.CAVES,
17
- [StageType.REPENTANCE]: Music.MINES,
18
- [StageType.REPENTANCE_B]: Music.ASHPIT,
13
+ [StageType.ORIGINAL]: Music.CAVES, // 0
14
+ [StageType.WRATH_OF_THE_LAMB]: Music.CATACOMBS, // 1
15
+ [StageType.AFTERBIRTH]: Music.FLOODED_CAVES, // 2
16
+ [StageType.GREED_MODE]: Music.CAVES, // 3
17
+ [StageType.REPENTANCE]: Music.MINES, // 4
18
+ [StageType.REPENTANCE_B]: Music.ASHPIT, // 5
19
19
  } as const satisfies Record<StageType, Music>;
20
20
 
21
21
  const DEPTHS_TO_MUSIC = {
22
- [StageType.ORIGINAL]: Music.DEPTHS,
23
- [StageType.WRATH_OF_THE_LAMB]: Music.NECROPOLIS,
24
- [StageType.AFTERBIRTH]: Music.DANK_DEPTHS,
25
- [StageType.GREED_MODE]: Music.DEPTHS,
26
- [StageType.REPENTANCE]: Music.MAUSOLEUM,
27
- [StageType.REPENTANCE_B]: Music.GEHENNA,
22
+ [StageType.ORIGINAL]: Music.DEPTHS, // 0
23
+ [StageType.WRATH_OF_THE_LAMB]: Music.NECROPOLIS, // 1
24
+ [StageType.AFTERBIRTH]: Music.DANK_DEPTHS, // 2
25
+ [StageType.GREED_MODE]: Music.DEPTHS, // 3
26
+ [StageType.REPENTANCE]: Music.MAUSOLEUM, // 4
27
+ [StageType.REPENTANCE_B]: Music.GEHENNA, // 5
28
28
  } as const satisfies Record<StageType, Music>;
29
29
 
30
30
  const WOMB_TO_MUSIC = {
31
- [StageType.ORIGINAL]: Music.WOMB,
32
- [StageType.WRATH_OF_THE_LAMB]: Music.UTERO,
33
- [StageType.AFTERBIRTH]: Music.SCARRED_WOMB,
34
- [StageType.GREED_MODE]: Music.WOMB,
35
- [StageType.REPENTANCE]: Music.CORPSE,
36
- [StageType.REPENTANCE_B]: Music.MORTIS,
31
+ [StageType.ORIGINAL]: Music.WOMB, // 0
32
+ [StageType.WRATH_OF_THE_LAMB]: Music.UTERO, // 1
33
+ [StageType.AFTERBIRTH]: Music.SCARRED_WOMB, // 2
34
+ [StageType.GREED_MODE]: Music.WOMB, // 3
35
+ [StageType.REPENTANCE]: Music.CORPSE, // 4
36
+ [StageType.REPENTANCE_B]: Music.MORTIS, // 5
37
37
  } as const satisfies Record<StageType, Music>;
38
38
 
39
39
  const BLUE_WOMB_TO_MUSIC = {
40
- [StageType.ORIGINAL]: Music.BLUE_WOMB,
41
- [StageType.WRATH_OF_THE_LAMB]: Music.BLUE_WOMB,
42
- [StageType.AFTERBIRTH]: Music.BLUE_WOMB,
43
- [StageType.GREED_MODE]: Music.BLUE_WOMB,
44
- [StageType.REPENTANCE]: Music.BLUE_WOMB,
45
- [StageType.REPENTANCE_B]: Music.BLUE_WOMB,
40
+ [StageType.ORIGINAL]: Music.BLUE_WOMB, // 0
41
+ [StageType.WRATH_OF_THE_LAMB]: Music.BLUE_WOMB, // 1
42
+ [StageType.AFTERBIRTH]: Music.BLUE_WOMB, // 2
43
+ [StageType.GREED_MODE]: Music.BLUE_WOMB, // 3
44
+ [StageType.REPENTANCE]: Music.BLUE_WOMB, // 4
45
+ [StageType.REPENTANCE_B]: Music.BLUE_WOMB, // 5
46
46
  } as const satisfies Record<StageType, Music>;
47
47
 
48
48
  const SHEOL_CATHEDRAL_TO_MUSIC = {
49
- [StageType.ORIGINAL]: Music.SHEOL,
50
- [StageType.WRATH_OF_THE_LAMB]: Music.CATHEDRAL,
51
- [StageType.AFTERBIRTH]: Music.SHEOL,
52
- [StageType.GREED_MODE]: Music.SHEOL,
53
- [StageType.REPENTANCE]: Music.SHEOL,
54
- [StageType.REPENTANCE_B]: Music.SHEOL,
49
+ [StageType.ORIGINAL]: Music.SHEOL, // 0
50
+ [StageType.WRATH_OF_THE_LAMB]: Music.CATHEDRAL, // 1
51
+ [StageType.AFTERBIRTH]: Music.SHEOL, // 2
52
+ [StageType.GREED_MODE]: Music.SHEOL, // 3
53
+ [StageType.REPENTANCE]: Music.SHEOL, // 4
54
+ [StageType.REPENTANCE_B]: Music.SHEOL, // 5
55
55
  } as const satisfies Record<StageType, Music>;
56
56
 
57
57
  const DARK_ROOM_CHEST_TO_MUSIC = {
58
- [StageType.ORIGINAL]: Music.DARK_ROOM,
59
- [StageType.WRATH_OF_THE_LAMB]: Music.CHEST,
60
- [StageType.AFTERBIRTH]: Music.DARK_ROOM,
61
- [StageType.GREED_MODE]: Music.DARK_ROOM,
62
- [StageType.REPENTANCE]: Music.DARK_ROOM,
63
- [StageType.REPENTANCE_B]: Music.DARK_ROOM,
58
+ [StageType.ORIGINAL]: Music.DARK_ROOM, // 0
59
+ [StageType.WRATH_OF_THE_LAMB]: Music.CHEST, // 1
60
+ [StageType.AFTERBIRTH]: Music.DARK_ROOM, // 2
61
+ [StageType.GREED_MODE]: Music.DARK_ROOM, // 3
62
+ [StageType.REPENTANCE]: Music.DARK_ROOM, // 4
63
+ [StageType.REPENTANCE_B]: Music.DARK_ROOM, // 5
64
64
  } as const satisfies Record<StageType, Music>;
65
65
 
66
- const THE_VOID_TO_MUSIC = {
67
- [StageType.ORIGINAL]: Music.VOID,
68
- [StageType.WRATH_OF_THE_LAMB]: Music.VOID,
69
- [StageType.AFTERBIRTH]: Music.VOID,
70
- [StageType.GREED_MODE]: Music.VOID,
71
- [StageType.REPENTANCE]: Music.VOID,
72
- [StageType.REPENTANCE_B]: Music.VOID,
66
+ const VOID_TO_MUSIC = {
67
+ [StageType.ORIGINAL]: Music.VOID, // 0
68
+ [StageType.WRATH_OF_THE_LAMB]: Music.VOID, // 1
69
+ [StageType.AFTERBIRTH]: Music.VOID, // 2
70
+ [StageType.GREED_MODE]: Music.VOID, // 3
71
+ [StageType.REPENTANCE]: Music.VOID, // 4
72
+ [StageType.REPENTANCE_B]: Music.VOID, // 5
73
73
  } as const satisfies Record<StageType, Music>;
74
74
 
75
75
  const HOME_TO_MUSIC = {
76
- [StageType.ORIGINAL]: Music.ISAACS_HOUSE,
77
- [StageType.WRATH_OF_THE_LAMB]: Music.ISAACS_HOUSE,
78
- [StageType.AFTERBIRTH]: Music.ISAACS_HOUSE,
79
- [StageType.GREED_MODE]: Music.ISAACS_HOUSE,
80
- [StageType.REPENTANCE]: Music.ISAACS_HOUSE,
81
- [StageType.REPENTANCE_B]: Music.ISAACS_HOUSE,
76
+ [StageType.ORIGINAL]: Music.ISAACS_HOUSE, // 0
77
+ [StageType.WRATH_OF_THE_LAMB]: Music.ISAACS_HOUSE, // 1
78
+ [StageType.AFTERBIRTH]: Music.ISAACS_HOUSE, // 2
79
+ [StageType.GREED_MODE]: Music.ISAACS_HOUSE, // 3
80
+ [StageType.REPENTANCE]: Music.ISAACS_HOUSE, // 4
81
+ [StageType.REPENTANCE_B]: Music.ISAACS_HOUSE, // 5
82
82
  } as const satisfies Record<StageType, Music>;
83
83
 
84
84
  export const STAGE_TO_MUSIC = {
85
- [LevelStage.BASEMENT_1]: BASEMENT_TO_MUSIC,
86
- [LevelStage.BASEMENT_2]: BASEMENT_TO_MUSIC,
87
- [LevelStage.CAVES_1]: CAVES_TO_MUSIC,
88
- [LevelStage.CAVES_2]: CAVES_TO_MUSIC,
89
- [LevelStage.DEPTHS_1]: DEPTHS_TO_MUSIC,
90
- [LevelStage.DEPTHS_2]: DEPTHS_TO_MUSIC,
91
- [LevelStage.WOMB_1]: WOMB_TO_MUSIC,
92
- [LevelStage.WOMB_2]: WOMB_TO_MUSIC,
93
- [LevelStage.BLUE_WOMB]: BLUE_WOMB_TO_MUSIC,
94
- [LevelStage.SHEOL_CATHEDRAL]: SHEOL_CATHEDRAL_TO_MUSIC,
95
- [LevelStage.DARK_ROOM_CHEST]: DARK_ROOM_CHEST_TO_MUSIC,
96
- [LevelStage.THE_VOID]: THE_VOID_TO_MUSIC,
97
- [LevelStage.HOME]: HOME_TO_MUSIC,
85
+ [LevelStage.BASEMENT_1]: BASEMENT_TO_MUSIC, // 1
86
+ [LevelStage.BASEMENT_2]: BASEMENT_TO_MUSIC, // 2
87
+ [LevelStage.CAVES_1]: CAVES_TO_MUSIC, // 3
88
+ [LevelStage.CAVES_2]: CAVES_TO_MUSIC, // 4
89
+ [LevelStage.DEPTHS_1]: DEPTHS_TO_MUSIC, // 5
90
+ [LevelStage.DEPTHS_2]: DEPTHS_TO_MUSIC, // 6
91
+ [LevelStage.WOMB_1]: WOMB_TO_MUSIC, // 7
92
+ [LevelStage.WOMB_2]: WOMB_TO_MUSIC, // 8
93
+ [LevelStage.BLUE_WOMB]: BLUE_WOMB_TO_MUSIC, // 9
94
+ [LevelStage.SHEOL_CATHEDRAL]: SHEOL_CATHEDRAL_TO_MUSIC, // 10
95
+ [LevelStage.DARK_ROOM_CHEST]: DARK_ROOM_CHEST_TO_MUSIC, // 11
96
+ [LevelStage.THE_VOID]: VOID_TO_MUSIC, // 12
97
+ [LevelStage.HOME]: HOME_TO_MUSIC, // 13
98
98
  } as const satisfies Record<LevelStage, Record<StageType, Music>>;