isaacscript-common 6.5.0 → 6.5.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.
@@ -2,7 +2,7 @@ local ____lualib = require("lualib_bundle")
2
2
  local Set = ____lualib.Set
3
3
  local __TS__New = ____lualib.__TS__New
4
4
  local ____exports = {}
5
- local getBackdropPNGPath, spawnWallEntity, spawnSecondWallEntity, spawnFloorEntity, getNumFloorLayers, BackdropKind, BackdropEntitySubType, DEFAULT_BACKDROP, ROOM_SHAPE_WALL_ANM2_LAYERS, ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS, WALL_OFFSET, BACKDROP_EFFECT_VARIANT
5
+ local getBackdropPNGPath, spawnWallEntity, spawnSecondWallEntity, spawnFloorEntity, getNumFloorLayers, BackdropKind, DEFAULT_BACKDROP, ROOM_SHAPE_WALL_ANM2_LAYERS, ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS, WALL_OFFSET, BACKDROP_EFFECT_VARIANT
6
6
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
7
7
  local EffectVariant = ____isaac_2Dtypescript_2Ddefinitions.EffectVariant
8
8
  local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
@@ -29,19 +29,17 @@ local irange = ____utils.irange
29
29
  local ____customStageConstants = require("features.customStage.customStageConstants")
30
30
  local ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = ____customStageConstants.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH
31
31
  function getBackdropPNGPath(self, customStage, backdropKind, rng)
32
- local backdrop = customStage.backdrop == nil and DEFAULT_BACKDROP or customStage.backdrop
32
+ local backdrop = customStage.backdropPNGPaths == nil and DEFAULT_BACKDROP or customStage.backdropPNGPaths
33
33
  local pathArray = backdrop[backdropKind]
34
- local path = getRandomArrayElement(nil, pathArray, rng)
35
- return (backdrop.prefix .. path) .. backdrop.suffix
34
+ return getRandomArrayElement(nil, pathArray, rng)
36
35
  end
37
36
  function spawnWallEntity(self, customStage, rng, isExtraWall)
38
37
  local room = game:GetRoom()
39
38
  local roomShape = room:GetRoomShape()
40
- local subType = isExtraWall and BackdropEntitySubType.WALL_EXTRA or BackdropEntitySubType.WALL
41
39
  local wallEffect = spawnEffectWithSeed(
42
40
  nil,
43
41
  BACKDROP_EFFECT_VARIANT,
44
- subType,
42
+ 0,
45
43
  VectorZero,
46
44
  1
47
45
  )
@@ -86,7 +84,7 @@ function spawnFloorEntity(self, customStage, rng)
86
84
  local floorEffect = spawnEffectWithSeed(
87
85
  nil,
88
86
  BACKDROP_EFFECT_VARIANT,
89
- BackdropEntitySubType.FLOOR,
87
+ 0,
90
88
  VectorZero,
91
89
  1
92
90
  )
@@ -154,23 +152,7 @@ BackdropKind.N_FLOOR = "nFloors"
154
152
  BackdropKind.L_FLOOR = "lFloors"
155
153
  BackdropKind.WALL = "walls"
156
154
  BackdropKind.CORNER = "corners"
157
- BackdropEntitySubType = BackdropEntitySubType or ({})
158
- BackdropEntitySubType.VANILLA_LADDER = 0
159
- BackdropEntitySubType[BackdropEntitySubType.VANILLA_LADDER] = "VANILLA_LADDER"
160
- BackdropEntitySubType.WALL = 1
161
- BackdropEntitySubType[BackdropEntitySubType.WALL] = "WALL"
162
- BackdropEntitySubType.WALL_EXTRA = 2
163
- BackdropEntitySubType[BackdropEntitySubType.WALL_EXTRA] = "WALL_EXTRA"
164
- BackdropEntitySubType.FLOOR = 3
165
- BackdropEntitySubType[BackdropEntitySubType.FLOOR] = "FLOOR"
166
- DEFAULT_BACKDROP = {
167
- prefix = ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop",
168
- suffix = ".png",
169
- nFloors = {"nfloor"},
170
- lFloors = {"lfloor"},
171
- walls = {"wall"},
172
- corners = {"corner"}
173
- }
155
+ DEFAULT_BACKDROP = {nFloors = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/nfloor.png"}, lFloors = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/lfloor.png"}, walls = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/wall.png"}, corners = {ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/backdrop/corner.png"}}
174
156
  ROOM_SHAPE_WALL_ANM2_LAYERS = {
175
157
  [RoomShape.SHAPE_1x1] = 44,
176
158
  [RoomShape.IH] = 36,
@@ -3,10 +3,12 @@ local Map = ____lualib.Map
3
3
  local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
4
4
  local __TS__New = ____lualib.__TS__New
5
5
  local ____exports = {}
6
- local initRoomTypeMaps, getRoomTypeMap, postRender, postGridEntityBrokenRockAlt, postGridEntityBrokenInit, postNewRoomReordered
6
+ local initRoomTypeMaps, getRoomTypeMap, postRender, getShaderParams, postGridEntityBrokenRockAlt, postGridEntityBrokenInit, postNewRoomReordered
7
7
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
8
8
  local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
9
9
  local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
10
+ local ____cachedClasses = require("cachedClasses")
11
+ local game = ____cachedClasses.game
10
12
  local ____ModCallbackCustom = require("enums.ModCallbackCustom")
11
13
  local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
12
14
  local ____array = require("functions.array")
@@ -22,7 +24,11 @@ local setCustomDoorGraphics = ____gridEntities.setCustomDoorGraphics
22
24
  local setCustomPitGraphics = ____gridEntities.setCustomPitGraphics
23
25
  local setCustomRockGraphics = ____gridEntities.setCustomRockGraphics
24
26
  local metadataJSON = require("features.customStage.metadata")
27
+ local ____shadows = require("features.customStage.shadows")
28
+ local setShadows = ____shadows.setShadows
29
+ local shadowsPostRender = ____shadows.shadowsPostRender
25
30
  local ____streakText = require("features.customStage.streakText")
31
+ local streakTextGetShaderParams = ____streakText.streakTextGetShaderParams
26
32
  local streakTextPostRender = ____streakText.streakTextPostRender
27
33
  local ____v = require("features.customStage.v")
28
34
  local v = ____v.default
@@ -71,9 +77,17 @@ function postRender(self)
71
77
  if customStage == nil then
72
78
  return
73
79
  end
80
+ local isPaused = game:IsPaused()
81
+ if isPaused then
82
+ return
83
+ end
74
84
  streakTextPostRender(nil, customStage)
85
+ shadowsPostRender(nil, customStage)
75
86
  versusScreenPostRender(nil)
76
87
  end
88
+ function getShaderParams(self, shaderName)
89
+ return streakTextGetShaderParams(nil, shaderName)
90
+ end
77
91
  function postGridEntityBrokenRockAlt(self, gridEntity)
78
92
  local customStage = v.run.currentCustomStage
79
93
  if customStage == nil then
@@ -97,12 +111,14 @@ function postNewRoomReordered(self)
97
111
  return
98
112
  end
99
113
  setBackdrop(nil, customStage)
114
+ setShadows(nil, customStage)
100
115
  playVersusScreenAnimation(nil, customStage)
101
116
  end
102
117
  function ____exports.customStageInit(self, mod)
103
118
  saveDataManager(nil, "customStage", v)
104
119
  initRoomTypeMaps(nil)
105
120
  mod:AddCallback(ModCallback.POST_RENDER, postRender)
121
+ mod:AddCallback(ModCallback.GET_SHADER_PARAMS, getShaderParams)
106
122
  mod:AddCallbackCustom(ModCallbackCustom.POST_GRID_ENTITY_BROKEN, postGridEntityBrokenRockAlt, GridEntityType.ROCK_ALT)
107
123
  mod:AddCallbackCustom(ModCallbackCustom.POST_GRID_ENTITY_INIT, postGridEntityBrokenInit)
108
124
  mod:AddCallbackCustom(ModCallbackCustom.POST_NEW_ROOM_REORDERED, postNewRoomReordered)
@@ -0,0 +1,3 @@
1
+ import { CustomStage } from "../../interfaces/CustomStage";
2
+ export declare function setShadows(customStage: CustomStage): void;
3
+ export declare function shadowsPostRender(_customStage: CustomStage): void;
@@ -0,0 +1,58 @@
1
+ local ____exports = {}
2
+ local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
3
+ local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
4
+ local ____cachedClasses = require("cachedClasses")
5
+ local game = ____cachedClasses.game
6
+ local ____constants = require("constants")
7
+ local VectorZero = ____constants.VectorZero
8
+ local ____array = require("functions.array")
9
+ local getRandomArrayElement = ____array.getRandomArrayElement
10
+ local ____customStageConstants = require("features.customStage.customStageConstants")
11
+ local ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = ____customStageConstants.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH
12
+ local ____v = require("features.customStage.v")
13
+ local v = ____v.default
14
+ --- The animation comes from StageAPI.
15
+ local ROOM_SHAPE_TO_SHADOW_ANIMATION = {
16
+ [RoomShape.SHAPE_1x1] = "1x1",
17
+ [RoomShape.IH] = "1x1",
18
+ [RoomShape.IV] = "1x1",
19
+ [RoomShape.SHAPE_1x2] = "1x2",
20
+ [RoomShape.IIV] = "1x2",
21
+ [RoomShape.SHAPE_2x1] = "2x1",
22
+ [RoomShape.IIH] = "2x1",
23
+ [RoomShape.SHAPE_2x2] = "2x2",
24
+ [RoomShape.LTL] = "2x2",
25
+ [RoomShape.LTR] = "2x2",
26
+ [RoomShape.LBL] = "2x2",
27
+ [RoomShape.LBR] = "2x2"
28
+ }
29
+ local shadowSprite = Sprite()
30
+ shadowSprite:Load(ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/stage-shadow.anm2", true)
31
+ function ____exports.setShadows(self, customStage)
32
+ if customStage.shadowPNGPaths == nil then
33
+ return
34
+ end
35
+ local room = game:GetRoom()
36
+ local roomShape = room:GetRoomShape()
37
+ local animation = ROOM_SHAPE_TO_SHADOW_ANIMATION[roomShape]
38
+ local shadowPNGPaths = customStage.shadowPNGPaths[animation]
39
+ if shadowPNGPaths == nil then
40
+ return
41
+ end
42
+ local decorationSeed = room:GetDecorationSeed()
43
+ local shadowPNGPath = getRandomArrayElement(nil, shadowPNGPaths, decorationSeed)
44
+ shadowSprite:ReplaceSpritesheet(0, shadowPNGPath)
45
+ shadowSprite:SetFrame(animation, 0)
46
+ v.room.showingShadows = true
47
+ end
48
+ function ____exports.shadowsPostRender(self, _customStage)
49
+ if not v.room.showingShadows then
50
+ return
51
+ end
52
+ local room = game:GetRoom()
53
+ local renderPosition = Isaac.WorldToRenderPosition(VectorZero)
54
+ local renderScrollOffset = room:GetRenderScrollOffset()
55
+ local position = renderPosition + renderScrollOffset
56
+ shadowSprite:Render(position)
57
+ end
58
+ return ____exports
@@ -1,2 +1,3 @@
1
1
  import { CustomStage } from "../../interfaces/CustomStage";
2
2
  export declare function streakTextPostRender(customStage: CustomStage): void;
3
+ export declare function streakTextGetShaderParams(shaderName: string): Record<string, unknown> | undefined;
@@ -7,6 +7,7 @@ local ____ui = require("functions.ui")
7
7
  local getScreenBottomCenterPos = ____ui.getScreenBottomCenterPos
8
8
  local ____v = require("features.customStage.v")
9
9
  local v = ____v.default
10
+ local EMPTY_SHADER_NAME = "IsaacScriptEmptyShader"
10
11
  local STREAK_TEXT_BOTTOM_OFFSET = Vector(0, -60)
11
12
  function ____exports.streakTextPostRender(self, customStage)
12
13
  if not v.run.showingStreakText then
@@ -19,4 +20,10 @@ function ____exports.streakTextPostRender(self, customStage)
19
20
  local adjustedX = position.X - length / 2
20
21
  font:DrawString(customStage.name, adjustedX, position.Y, KColorDefault)
21
22
  end
23
+ function ____exports.streakTextGetShaderParams(self, shaderName)
24
+ if shaderName ~= EMPTY_SHADER_NAME then
25
+ return nil
26
+ end
27
+ return {}
28
+ end
22
29
  return ____exports
@@ -6,6 +6,9 @@ declare const v: {
6
6
  showingStreakText: boolean;
7
7
  showingBossVersusScreen: boolean;
8
8
  };
9
+ room: {
10
+ showingShadows: boolean;
11
+ };
9
12
  };
10
13
  export default v;
11
14
  /** Indexed by custom stage name. */
@@ -2,7 +2,7 @@ local ____lualib = require("lualib_bundle")
2
2
  local Map = ____lualib.Map
3
3
  local __TS__New = ____lualib.__TS__New
4
4
  local ____exports = {}
5
- local v = {run = {currentCustomStage = nil, showingStreakText = false, showingBossVersusScreen = false}}
5
+ local v = {run = {currentCustomStage = nil, showingStreakText = false, showingBossVersusScreen = false}, room = {showingShadows = false}}
6
6
  ____exports.default = v
7
7
  --- Indexed by custom stage name.
8
8
  ____exports.customStagesMap = __TS__New(Map)
@@ -82,8 +82,8 @@ end
82
82
  -- "gfx/grid/door_08_holeinwall.anm2".
83
83
  function ____exports.isSecretRoomDoor(self, door)
84
84
  local sprite = door:GetSprite()
85
- local filename = sprite:GetFilename()
86
- return filename == "gfx/grid/door_08_holeinwall.anm2"
85
+ local fileName = sprite:GetFilename()
86
+ return string.lower(fileName) == "gfx/grid/door_08_holeinwall.anm2"
87
87
  end
88
88
  --- Helper function to remove a single door.
89
89
  function ____exports.removeDoor(self, door)
@@ -243,8 +243,8 @@ function ____exports.isDoorToDownpour(self, door)
243
243
  return false
244
244
  end
245
245
  local sprite = door:GetSprite()
246
- local filename = sprite:GetFilename()
247
- return string.lower(filename) == "gfx/grid/door_downpour.anm2"
246
+ local fileName = sprite:GetFilename()
247
+ return string.lower(fileName) == "gfx/grid/door_downpour.anm2"
248
248
  end
249
249
  --- This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
250
250
  -- to spend two hearts to open it. It has a sprite filename of "gfx/grid/door_mausoleum.anm2".
@@ -253,8 +253,8 @@ function ____exports.isDoorToMausoleum(self, door)
253
253
  return false
254
254
  end
255
255
  local sprite = door:GetSprite()
256
- local filename = sprite:GetFilename()
257
- return string.lower(filename) == "gfx/grid/door_mausoleum.anm2"
256
+ local fileName = sprite:GetFilename()
257
+ return string.lower(fileName) == "gfx/grid/door_mausoleum.anm2"
258
258
  end
259
259
  --- This refers to the "strange door" located on the first room of Depths 2. You open it with either
260
260
  -- a Polaroid or a Negative. It has a sprite filename of "gfx/grid/door_mausoleum_alt.anm2".
@@ -263,8 +263,8 @@ function ____exports.isDoorToMausoleumAscent(self, door)
263
263
  return false
264
264
  end
265
265
  local sprite = door:GetSprite()
266
- local filename = sprite:GetFilename()
267
- return string.lower(filename) == "gfx/grid/door_mausoleum_alt.anm2"
266
+ local fileName = sprite:GetFilename()
267
+ return string.lower(fileName) == "gfx/grid/door_mausoleum_alt.anm2"
268
268
  end
269
269
  --- This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
270
270
  -- to spend two bombs to open it. It has a sprite filename of "gfx/grid/door_mines.anm2".
@@ -273,8 +273,8 @@ function ____exports.isDoorToMines(self, door)
273
273
  return false
274
274
  end
275
275
  local sprite = door:GetSprite()
276
- local filename = sprite:GetFilename()
277
- return string.lower(filename) == "gfx/grid/door_mines.anm2"
276
+ local fileName = sprite:GetFilename()
277
+ return string.lower(fileName) == "gfx/grid/door_mines.anm2"
278
278
  end
279
279
  --- This refers to the Repentance door that spawns after defeating Mom. You open it with the
280
280
  -- completed knife. It has a sprite filename of "gfx/grid/door_momsheart.anm2".
@@ -283,8 +283,8 @@ function ____exports.isDoorToMomsHeart(self, door)
283
283
  return false
284
284
  end
285
285
  local sprite = door:GetSprite()
286
- local filename = sprite:GetFilename()
287
- return filename == "gfx/grid/door_momsheart.anm2"
286
+ local fileName = sprite:GetFilename()
287
+ return string.lower(fileName) == "gfx/grid/door_momsheart.anm2"
288
288
  end
289
289
  function ____exports.isHiddenSecretRoomDoor(self, door)
290
290
  local sprite = door:GetSprite()
@@ -39,43 +39,33 @@ export declare type CustomStageTSConfig = Readonly<{
39
39
  * the graphics for the walls and floor.) If not specified, the graphics for Basement will be
40
40
  * used.
41
41
  */
42
- backdrop?: Readonly<{
42
+ backdropPNGPaths?: Readonly<{
43
43
  /**
44
- * The beginning of the path that leads to the backdrop graphics. For example:
44
+ * An array that contains the full paths to the graphic files that are used for the floor in
45
+ * narrow rooms. (The "n" stands for "narrow").
45
46
  *
46
- * ```sh
47
- * gfx/backdrop/revelations/revelations_
48
- * ```
49
- */
50
- prefix: string;
51
- /**
52
- * The end of the path that leads to the backdrop graphics. In most cases, this will be ".png".
53
- */
54
- suffix: string;
55
- /**
56
- * An array of strings that represent the graphic files that are used for the floors in narrow
57
- * rooms. (The "n" stands for "narrow").
58
- *
59
- * You must have at least one string in this array, but you can specify more than one to
60
- * randomly add extra variety (like the vanilla stages do).
47
+ * You must have at least one path in this array, but you can specify more than one to randomly
48
+ * add extra variety (like the vanilla stages do).
61
49
  *
62
50
  * For an example of this, see the vanilla file "resources/gfx/backdrop/01_basement_nfloor.png".
63
51
  */
64
52
  nFloors: readonly string[];
65
53
  /**
66
- * An array of strings that represent the graphic files that are used for the floors in L rooms.
54
+ * An array that contains the full paths to the graphic files that are used for the floor in L
55
+ * rooms.
67
56
  *
68
- * You must have at least one string in this array, but you can specify more than one to
69
- * randomly add extra variety (like the vanilla stages do).
57
+ * You must have at least one path in this array, but you can specify more than one to randomly
58
+ * add extra variety (like the vanilla stages do).
70
59
  *
71
60
  * For an example of this, see the vanilla file "resources/gfx/backdrop/01_lbasementfloor.png".
72
61
  */
73
62
  lFloors: readonly string[];
74
63
  /**
75
- * An array of strings that represent the graphic files for the stage's walls.
64
+ * An array that contains the full paths to the graphic files that are used for the walls of the
65
+ * floor.
76
66
  *
77
- * You must have at least one string in this array, but you can specify more than one to
78
- * randomly add extra variety (like the vanilla stages do).
67
+ * You must have at least one path in this array, but you can specify more than one to randomly
68
+ * add extra variety (like the vanilla stages do).
79
69
  *
80
70
  * For an example of this, see the vanilla file "resources/gfx/backdrop/01_basement.png". (In
81
71
  * the vanilla file, they concatenate all four variations together into one PNG file. However,
@@ -83,9 +73,10 @@ export declare type CustomStageTSConfig = Readonly<{
83
73
  */
84
74
  walls: readonly string[];
85
75
  /**
86
- * An array of strings that represent the graphic files for the stage's corners. You must have
87
- * at least one string in this array, but you can specify more than one to randomly add extra
88
- * variety (like the vanilla stages do).
76
+ * An array that contains the full paths to the graphic files for the stage's corners.
77
+ *
78
+ * You must have at least one path in this array, but you can specify more than one to randomly
79
+ * add extra variety (like the vanilla stages do).
89
80
  *
90
81
  * For an example of this, see the vanilla file "resources/gfx/backdrop/01_basement.png". (In
91
82
  * the vanilla file, they concatenate both variations together into one PNG file and put it in
@@ -97,8 +88,8 @@ export declare type CustomStageTSConfig = Readonly<{
97
88
  corners: readonly string[];
98
89
  }>;
99
90
  /**
100
- * Optional. The path to the spritesheet that contains the graphics of the decorations for the
101
- * floor.
91
+ * Optional. The full path to the spritesheet that contains the graphics of the decorations for
92
+ * the floor.
102
93
  *
103
94
  * If not specified, the vanilla Basement decorations spritesheet will be used. For reference,
104
95
  * this is located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -106,8 +97,8 @@ export declare type CustomStageTSConfig = Readonly<{
106
97
  */
107
98
  decorationsPNGPath?: string;
108
99
  /**
109
- * Optional. The path to the spritesheet that contains the graphics of the rocks/blocks/urns for
110
- * the floor.
100
+ * Optional. The full path to the spritesheet that contains the graphics of the rocks/blocks/urns
101
+ * for the floor.
111
102
  *
112
103
  * If specified, it is assumed that you have your own custom rock alt type, and all vanilla
113
104
  * rewards/enemies that spawn from urns will be automatically removed. Use the
@@ -120,18 +111,22 @@ export declare type CustomStageTSConfig = Readonly<{
120
111
  */
121
112
  rocksPNGPath?: string;
122
113
  /**
123
- * Optional. The path to the spritesheet that contains the graphics of the pits for the floor.
114
+ * Optional. The full path to the spritesheet that contains the graphics of the pits for the
115
+ * floor.
124
116
  *
125
117
  * If not specified, the vanilla Basement pits spritesheet will be used. For reference, this is
126
118
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
127
119
  * Rebirth\resources\gfx\grid\grid_pit.png`
128
120
  */
129
121
  pitsPNGPath?: string;
130
- /** Optional. A collection of paths that contain graphics for the doors of the floor. */
122
+ /**
123
+ * Optional. A collection of paths that contain graphics for the doors of the floor. If not
124
+ * specified, the doors for Basement will be used.
125
+ */
131
126
  doorPNGPaths?: Readonly<{
132
127
  /**
133
- * Optional. The path to the spritesheet that contains the graphics of the normal doors for the
134
- * floor.
128
+ * Optional. The full path to the spritesheet that contains the graphics of the normal doors for
129
+ * the floor.
135
130
  *
136
131
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
137
132
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -139,8 +134,8 @@ export declare type CustomStageTSConfig = Readonly<{
139
134
  */
140
135
  normal?: string;
141
136
  /**
142
- * Optional. The path to the spritesheet that contains the graphics of the Treasure Room doors
143
- * for the floor.
137
+ * Optional. The full path to the spritesheet that contains the graphics of the Treasure Room
138
+ * doors for the floor.
144
139
  *
145
140
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
146
141
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -148,8 +143,8 @@ export declare type CustomStageTSConfig = Readonly<{
148
143
  */
149
144
  treasureRoom?: string;
150
145
  /**
151
- * Optional. The path to the spritesheet that contains the graphics of the Boss Room doors for
152
- * the floor.
146
+ * Optional. The full path to the spritesheet that contains the graphics of the Boss Room doors
147
+ * for the floor.
153
148
  *
154
149
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
155
150
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -157,8 +152,8 @@ export declare type CustomStageTSConfig = Readonly<{
157
152
  */
158
153
  bossRoom?: string;
159
154
  /**
160
- * Optional. The path to the spritesheet that contains the graphics of the Secret Room and Super
161
- * Secret Room doors for the floor.
155
+ * Optional. The full path to the spritesheet that contains the graphics of the Secret Room and
156
+ * Super Secret Room doors for the floor.
162
157
  *
163
158
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
164
159
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -166,8 +161,8 @@ export declare type CustomStageTSConfig = Readonly<{
166
161
  */
167
162
  secretRoom?: string;
168
163
  /**
169
- * Optional. The path to the spritesheet that contains the graphics of the arcade doors for the
170
- * floor.
164
+ * Optional. The full path to the spritesheet that contains the graphics of the arcade doors for
165
+ * the floor.
171
166
  *
172
167
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
173
168
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -175,8 +170,8 @@ export declare type CustomStageTSConfig = Readonly<{
175
170
  */
176
171
  arcade?: string;
177
172
  /**
178
- * Optional. The path to the spritesheet that contains the graphics of the Curse Room doors for
179
- * the floor.
173
+ * Optional. The full path to the spritesheet that contains the graphics of the Curse Room doors
174
+ * for the floor.
180
175
  *
181
176
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
182
177
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -184,8 +179,8 @@ export declare type CustomStageTSConfig = Readonly<{
184
179
  */
185
180
  curseRoom?: string;
186
181
  /**
187
- * Optional. The path to the spritesheet that contains the graphics of the normal Challenge Room
188
- * doors for the floor.
182
+ * Optional. The full path to the spritesheet that contains the graphics of the normal Challenge
183
+ * Room doors for the floor.
189
184
  *
190
185
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
191
186
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -193,8 +188,8 @@ export declare type CustomStageTSConfig = Readonly<{
193
188
  */
194
189
  normalChallengeRoom?: string;
195
190
  /**
196
- * Optional. The path to the spritesheet that contains the graphics of the Boss Challenge Room
197
- * doors for the floor.
191
+ * Optional. The full path to the spritesheet that contains the graphics of the Boss Challenge
192
+ * Room doors for the floor.
198
193
  *
199
194
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
200
195
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -202,8 +197,8 @@ export declare type CustomStageTSConfig = Readonly<{
202
197
  */
203
198
  bossChallengeRoom?: string;
204
199
  /**
205
- * Optional. The path to the spritesheet that contains the graphics of the Devil Room doors for
206
- * the floor.
200
+ * Optional. The full path to the spritesheet that contains the graphics of the Devil Room doors
201
+ * for the floor.
207
202
  *
208
203
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
209
204
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -211,8 +206,8 @@ export declare type CustomStageTSConfig = Readonly<{
211
206
  */
212
207
  devilRoom?: string;
213
208
  /**
214
- * Optional. The path to the spritesheet that contains the graphics of the Angel Room doors for
215
- * the floor.
209
+ * Optional. The full path to the spritesheet that contains the graphics of the Angel Room doors
210
+ * for the floor.
216
211
  *
217
212
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
218
213
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -220,8 +215,8 @@ export declare type CustomStageTSConfig = Readonly<{
220
215
  */
221
216
  angelRoom?: string;
222
217
  /**
223
- * Optional. The path to the spritesheet that contains the graphics of the Boss Rush doors for
224
- * the floor.
218
+ * Optional. The full path to the spritesheet that contains the graphics of the Boss Rush doors
219
+ * for the floor.
225
220
  *
226
221
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
227
222
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -229,8 +224,8 @@ export declare type CustomStageTSConfig = Readonly<{
229
224
  */
230
225
  bossRush?: string;
231
226
  /**
232
- * Optional. The path to the spritesheet that contains the graphics of the Chest Room doors for
233
- * the floor.
227
+ * Optional. The full path to the spritesheet that contains the graphics of the Chest Room doors
228
+ * for the floor.
234
229
  *
235
230
  * If not specified, the vanilla Basement door spritesheet will be used. For reference, this is
236
231
  * located at: `C:\Program Files (x86)\Steam\steamapps\common\The Binding of Isaac
@@ -238,6 +233,50 @@ export declare type CustomStageTSConfig = Readonly<{
238
233
  */
239
234
  chestRoom?: string;
240
235
  }>;
236
+ /**
237
+ * Optional. A collection of paths that contain graphics for the custom shadows of the floor. (In
238
+ * this context, "shadows" are the outlines from things on the roof. For example, in Basement, a
239
+ * shadow of a sideways V is used.) If not specified, no extra shadows will be drawn.
240
+ */
241
+ shadowPNGPaths?: Readonly<{
242
+ /**
243
+ * An array containing the full paths to the shadows that are used in rooms of shape
244
+ * `RoomShape.SHAPE_1x1` (1), `RoomShape.IH` (2), and `RoomShape.IV` (3).
245
+ *
246
+ * If more than one shadow is specified, one will be randomly chosen for each room.
247
+ *
248
+ * If not specified, no extra shadows will be drawn in these room shapes.
249
+ */
250
+ "1x1"?: readonly string[];
251
+ /**
252
+ * An array containing the full paths to the shadows that are used in rooms of shape
253
+ * `RoomShape.SHAPE_1x2` (4) and `RoomShape.IIV` (5).
254
+ *
255
+ * If more than one shadow is specified, one will be randomly chosen for each room.
256
+ *
257
+ * If not specified, no extra shadows will be drawn in these room shapes.
258
+ */
259
+ "1x2"?: readonly string[];
260
+ /**
261
+ * An array containing the full paths to the shadows that are used in rooms of shape
262
+ * `RoomShape.SHAPE_2x1` (6) and `RoomShape.IIH` (7).
263
+ *
264
+ * If more than one shadow is specified, one will be randomly chosen for each room.
265
+ *
266
+ * If not specified, no extra shadows will be drawn in these room shapes.
267
+ */
268
+ "2x1"?: readonly string[];
269
+ /**
270
+ * An array containing the full paths to the shadows that are used in rooms of shape
271
+ * `RoomShape.SHAPE_2x2` (8), `RoomShape.LTL` (9), `RoomShape.LTR` (10), `RoomShape.LBL` (11),
272
+ * and `RoomShape.LBR` (12).
273
+ *
274
+ * If more than one shadow is specified, one will be randomly chosen for each room.
275
+ *
276
+ * If not specified, no extra shadows will be drawn in these room shapes.
277
+ */
278
+ "2x2"?: readonly string[];
279
+ }>;
241
280
  /** Optional. A collection of colors used in the boss "versus" screen. */
242
281
  versusScreen?: Readonly<{
243
282
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "6.5.0",
3
+ "version": "6.5.1",
4
4
  "description": "Helper functions and features for IsaacScript mods.",
5
5
  "keywords": [
6
6
  "isaac",