isaacscript-common 1.0.570 → 1.0.574

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.
@@ -12,6 +12,7 @@ export declare const BLIND_ITEM_PNG_PATH = "gfx/items/collectibles/questionmark.
12
12
  /** Bombs explode when their frame count is equal to this value. */
13
13
  export declare const BOMB_EXPLODE_FRAME = 45;
14
14
  export declare const CHARACTERS_WITH_AN_ACTIVE_ITEM: Set<PlayerType>;
15
+ export declare const CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART: Set<PlayerType>;
15
16
  /**
16
17
  * The set of characters where red heart containers will be turned into soul hearts (e.g. Blue
17
18
  * Baby). This includes The Lost and Tainted Lost. This does not include Keeper or Tainted Keeper.
@@ -5,6 +5,7 @@ ____exports.AZAZEL_DEFAULT_BRIMSTONE_DISTANCE = 75.125
5
5
  ____exports.BLIND_ITEM_PNG_PATH = "gfx/items/collectibles/questionmark.png"
6
6
  ____exports.BOMB_EXPLODE_FRAME = 45
7
7
  ____exports.CHARACTERS_WITH_AN_ACTIVE_ITEM = __TS__New(Set, {PlayerType.PLAYER_ISAAC, PlayerType.PLAYER_MAGDALENE, PlayerType.PLAYER_JUDAS, PlayerType.PLAYER_BLUEBABY, PlayerType.PLAYER_EVE, PlayerType.PLAYER_EDEN, PlayerType.PLAYER_THELOST, PlayerType.PLAYER_LILITH, PlayerType.PLAYER_KEEPER, PlayerType.PLAYER_APOLLYON, PlayerType.PLAYER_EDEN_B})
8
+ ____exports.CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART = __TS__New(Set, {PlayerType.PLAYER_BLACKJUDAS, PlayerType.PLAYER_JUDAS_B})
8
9
  ____exports.CHARACTERS_WITH_NO_RED_HEARTS = __TS__New(Set, {PlayerType.PLAYER_BLUEBABY, PlayerType.PLAYER_THELOST, PlayerType.PLAYER_BLACKJUDAS, PlayerType.PLAYER_JUDAS_B, PlayerType.PLAYER_BLUEBABY_B, PlayerType.PLAYER_THELOST_B, PlayerType.PLAYER_THEFORGOTTEN_B, PlayerType.PLAYER_BETHANY_B})
9
10
  ____exports.CHARACTERS_WITH_NO_SOUL_HEARTS = __TS__New(Set, {PlayerType.PLAYER_THELOST, PlayerType.PLAYER_KEEPER, PlayerType.PLAYER_BETHANY, PlayerType.PLAYER_THELOST_B, PlayerType.PLAYER_KEEPER_B})
10
11
  ____exports.COLORS = {
@@ -47,9 +47,7 @@ function ____exports.closeAllDoors(self)
47
47
  for ____, door in ipairs(
48
48
  ____exports.getDoors(nil)
49
49
  ) do
50
- door.State = DoorState.STATE_CLOSED
51
- local sprite = door:GetSprite()
52
- sprite:Play("Close", true)
50
+ door:Close(true)
53
51
  end
54
52
  end
55
53
  function ____exports.getAngelRoomDoor(self)
@@ -140,8 +138,8 @@ end
140
138
  function ____exports.lockDoor(self, door)
141
139
  local game = Game()
142
140
  local level = game:GetLevel()
143
- local roomDesc = level:GetRoomByIdx(door.TargetRoomIndex)
144
- roomDesc.VisitedCount = 0
141
+ local roomDescriptor = level:GetRoomByIdx(door.TargetRoomIndex)
142
+ roomDescriptor.VisitedCount = 0
145
143
  door:SetVariant(DoorVariant.DOOR_LOCKED)
146
144
  door:SetLocked(true)
147
145
  door:Close(true)
@@ -39,6 +39,12 @@ export declare function characterCanHaveRedHearts(character: PlayerType): boolea
39
39
  * false for The Lost and Tainted Lost.
40
40
  */
41
41
  export declare function characterCanHaveSoulHearts(character: PlayerType): boolean;
42
+ /**
43
+ * Normally, characters get a red heart container upon reaching a new floor with an eternal heart,
44
+ * but some characters grant a black heart instead. Returns true for Dark Judas and Tainted Judas.
45
+ * Otherwise, returns false.
46
+ */
47
+ export declare function characterGetsBlackHeartFromEternalHeart(character: PlayerType): boolean;
42
48
  /**
43
49
  * Helper function to get how long Azazel's Brimstone laser should be. You can pass either an
44
50
  * `EntityPlayer` object or a tear height stat.
@@ -3,6 +3,7 @@ require("lualib_bundle");
3
3
  local ____exports = {}
4
4
  local EXCLUDED_CHARACTERS
5
5
  local ____constants = require("constants")
6
+ local CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART = ____constants.CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART
6
7
  local CHARACTERS_WITH_NO_RED_HEARTS = ____constants.CHARACTERS_WITH_NO_RED_HEARTS
7
8
  local CHARACTERS_WITH_NO_SOUL_HEARTS = ____constants.CHARACTERS_WITH_NO_SOUL_HEARTS
8
9
  local LOST_STYLE_PLAYER_TYPES = ____constants.LOST_STYLE_PLAYER_TYPES
@@ -59,18 +60,18 @@ function ____exports.getPlayers(self, performExclusions)
59
60
  do
60
61
  local player = Isaac.GetPlayer(i)
61
62
  if player == nil then
62
- goto __continue66
63
+ goto __continue67
63
64
  end
64
65
  if ____exports.isChildPlayer(nil, player) then
65
- goto __continue66
66
+ goto __continue67
66
67
  end
67
68
  local character = player:GetPlayerType()
68
69
  if performExclusions and EXCLUDED_CHARACTERS:has(character) then
69
- goto __continue66
70
+ goto __continue67
70
71
  end
71
72
  __TS__ArrayPush(players, player)
72
73
  end
73
- ::__continue66::
74
+ ::__continue67::
74
75
  i = i + 1
75
76
  end
76
77
  end
@@ -145,6 +146,9 @@ end
145
146
  function ____exports.characterCanHaveSoulHearts(self, character)
146
147
  return not CHARACTERS_WITH_NO_SOUL_HEARTS:has(character)
147
148
  end
149
+ function ____exports.characterGetsBlackHeartFromEternalHeart(self, character)
150
+ return CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART:has(character)
151
+ end
148
152
  function ____exports.getAzazelBrimstoneDistance(self, playerOrTearHeight)
149
153
  local tearHeight = tonumber(playerOrTearHeight)
150
154
  if tearHeight == nil then
@@ -295,14 +299,14 @@ function ____exports.getPlayerIndexVanilla(self, playerToFind)
295
299
  do
296
300
  local player = Isaac.GetPlayer(i)
297
301
  if player == nil then
298
- goto __continue58
302
+ goto __continue59
299
303
  end
300
304
  local playerHash = GetPtrHash(player)
301
305
  if playerHash == playerToFindHash then
302
306
  return i
303
307
  end
304
308
  end
305
- ::__continue58::
309
+ ::__continue59::
306
310
  i = i + 1
307
311
  end
308
312
  end
@@ -423,9 +427,9 @@ function ____exports.setActiveItem(self, player, collectibleType, activeSlot, ch
423
427
  itemPool:RemoveCollectible(collectibleType)
424
428
  end
425
429
  repeat
426
- local ____switch96 = activeSlot
427
- local ____cond96 = ____switch96 == ActiveSlot.SLOT_PRIMARY
428
- if ____cond96 then
430
+ local ____switch97 = activeSlot
431
+ local ____cond97 = ____switch97 == ActiveSlot.SLOT_PRIMARY
432
+ if ____cond97 then
429
433
  do
430
434
  if primaryCollectibleType ~= CollectibleType.COLLECTIBLE_NULL then
431
435
  player:RemoveCollectible(primaryCollectibleType)
@@ -434,8 +438,8 @@ function ____exports.setActiveItem(self, player, collectibleType, activeSlot, ch
434
438
  break
435
439
  end
436
440
  end
437
- ____cond96 = ____cond96 or (____switch96 == ActiveSlot.SLOT_SECONDARY)
438
- if ____cond96 then
441
+ ____cond97 = ____cond97 or (____switch97 == ActiveSlot.SLOT_SECONDARY)
442
+ if ____cond97 then
439
443
  do
440
444
  if primaryCollectibleType ~= CollectibleType.COLLECTIBLE_NULL then
441
445
  player:RemoveCollectible(primaryCollectibleType)
@@ -450,16 +454,16 @@ function ____exports.setActiveItem(self, player, collectibleType, activeSlot, ch
450
454
  break
451
455
  end
452
456
  end
453
- ____cond96 = ____cond96 or (____switch96 == ActiveSlot.SLOT_POCKET)
454
- if ____cond96 then
457
+ ____cond97 = ____cond97 or (____switch97 == ActiveSlot.SLOT_POCKET)
458
+ if ____cond97 then
455
459
  do
456
460
  player:SetPocketActiveItem(collectibleType, activeSlot, keepInPools)
457
461
  player:SetActiveCharge(charge, activeSlot)
458
462
  break
459
463
  end
460
464
  end
461
- ____cond96 = ____cond96 or (____switch96 == ActiveSlot.SLOT_POCKET2)
462
- if ____cond96 then
465
+ ____cond97 = ____cond97 or (____switch97 == ActiveSlot.SLOT_POCKET2)
466
+ if ____cond97 then
463
467
  do
464
468
  player:SetPocketActiveItem(collectibleType, activeSlot, keepInPools)
465
469
  break
@@ -10,45 +10,34 @@ export declare function getAllRoomGridIndexes(): int[];
10
10
  * Helper function to get the current dimension. Most of the time, this will be `Dimension.MAIN`,
11
11
  * but it can change if e.g. the player is in the mirror world of Downpour/Dross.
12
12
  *
13
- * Note that this function does correctly handle detecting the Death Certificate dimension, which is
13
+ * Note that this function correctly handles detecting the Death Certificate dimension, which is
14
14
  * tricky to properly detect.
15
15
  */
16
16
  export declare function getCurrentDimension(): Dimension;
17
- /** An alias to the `Level.GetCurrentRoomDesc()` method. */
18
- export declare function getCurrentRoomDescReadOnly(): RoomDescriptorReadOnly;
19
- export declare function getRoomData(): RoomConfig | undefined;
17
+ /** Alias for the `Level.GetCurrentRoomDesc()` method. */
18
+ export declare function getCurrentRoomDescriptorReadOnly(): RoomDescriptorReadOnly;
20
19
  /**
21
- * Helper function to get the type for the room from the XML/STB data. The room data type will
20
+ * Helper function to get the room data for the provided room.
21
+ *
22
+ * @param roomGridIndex Optional. Equal to the current room index by default.
23
+ */
24
+ export declare function getRoomData(roomGridIndex?: int): RoomConfig | undefined;
25
+ /**
26
+ * Helper function to get the type of a room from the XML/STB data. The room data type will
22
27
  * correspond to different things depending on what XML/STB file it draws from. For example, in the
23
28
  * "00.special rooms.stb" file, a room type of 2 corresponds to a shop, a room type of 3 corresponds
24
29
  * to an I AM ERROR room, and so on.
25
30
  *
31
+ * @param roomGridIndex Optional. Equal to the current room index by default.
26
32
  * @returns The room data type. Returns -1 if the type was not found.
27
33
  */
28
- export declare function getRoomDataType(): int;
34
+ export declare function getRoomDataType(roomGridIndex?: int): int;
29
35
  /**
30
- * Helper function to get the list grid index of the current room, which is equal to the index in
31
- * the `Level.GetRooms().Get()` method. In other words, this is equal to the order that the room was
32
- * created by the floor generation algorithm.
33
- *
34
- * Use this as an index for data structures that store data per room, since it is unique across
35
- * different dimensions.
36
- */
37
- export declare function getRoomListIndex(): int;
38
- /**
39
- * Helper function to get the safe grid index of the current room. The safe grid index is defined as
40
- * the top-left 1x1 section that the room overlaps with (or the top-right 1x1 section of a
41
- * `RoomType.ROOMSHAPE_LTL` room).
42
- *
43
- * In most situations, using the safe grid index is more reliable than using the `GridIndex` or the
44
- * `Level.GetCurrentRoomIndex()` method directly. `GridIndex` can return quadrants that are not on
45
- * the map, and `Level.GetCurrentRoomIndex()` returns the specific 1x1 quadrant that the player
46
- * entered the room at.
36
+ * Helper function to get the descriptor for a room.
47
37
  *
48
- * Data structures that store data per room should use the room's `ListIndex` instead of
49
- * `SafeGridIndex`, since the former is unique across different dimensions.
38
+ * @param roomGridIndex Optional. Equal to the current room index by default.
50
39
  */
51
- export declare function getRoomSafeGridIndex(): int;
40
+ export declare function getRoomDescriptor(roomGridIndex?: int): RoomDescriptor;
52
41
  /**
53
42
  * Helper function to get an array of all of the safe grid indexes for rooms that match the
54
43
  * specified room type.
@@ -61,43 +50,76 @@ export declare function getRoomGridIndexesForType(roomType: RoomType): int[];
61
50
  * `ItemPoolType.ItemPoolType.POOL_ANGEL` if you are in an Angel Room.
62
51
  */
63
52
  export declare function getRoomItemPoolType(): ItemPoolType;
53
+ /**
54
+ * Helper function to get the list grid index of the provided room, which is equal to the index in
55
+ * the `Level.GetRooms().Get()` method. In other words, this is equal to the order that the room was
56
+ * created by the floor generation algorithm.
57
+ *
58
+ * Use this as an index for data structures that store data per room, since it is unique across
59
+ * different dimensions.
60
+ *
61
+ * @param roomGridIndex Optional. Equal to the current room index by default.
62
+ */
63
+ export declare function getRoomListIndex(roomGridIndex?: int): int;
64
64
  /**
65
65
  * Helper function to get the name of the room as it appears in the STB/XML data.
66
66
  *
67
+ * @param roomGridIndex Optional. Equal to the current room index by default.
67
68
  * @returns The room name. Returns "Unknown" if the type was not found.
68
69
  */
69
- export declare function getRoomName(): string;
70
+ export declare function getRoomName(roomGridIndex?: int): string;
70
71
  /**
71
- * Helper function to get the stage ID for the room from the XML/STB data. The room stage ID will
72
+ * Helper function to get the safe grid index of the provided room. The safe grid index is defined as
73
+ * the top-left 1x1 section that the room overlaps with (or the top-right 1x1 section of a
74
+ * `RoomType.ROOMSHAPE_LTL` room).
75
+ *
76
+ * In most situations, using the safe grid index is more reliable than using the `GridIndex` or the
77
+ * `Level.GetCurrentRoomIndex()` method directly. `GridIndex` can return quadrants that are not on
78
+ * the map, and `Level.GetCurrentRoomIndex()` returns the specific 1x1 quadrant that the player
79
+ * entered the room at.
80
+ *
81
+ * Data structures that store data per room should use the room's `ListIndex` instead of
82
+ * `SafeGridIndex`, since the former is unique across different dimensions.
83
+ *
84
+ * @param roomGridIndex Optional. Equal to the current room index by default.
85
+ */
86
+ export declare function getRoomSafeGridIndex(roomGridIndex?: int): int;
87
+ /**
88
+ * Helper function to get the stage ID for a room from the XML/STB data. The room stage ID will
72
89
  * correspond to the first number in the filename of the XML/STB file. For example, a Depths room
73
90
  * would have a stage ID of 7.
74
91
  *
92
+ * @param roomGridIndex Optional. Equal to the current room index by default.
75
93
  * @returns The room stage ID. Returns -1 if the stage ID was not found.
76
94
  */
77
- export declare function getRoomStageID(): StageID;
95
+ export declare function getRoomStageID(roomGridIndex?: int): StageID;
78
96
  /**
79
- * Helper function to get the subtype for the room from the XML/STB data. The room subtype will
97
+ * Helper function to get the subtype for a room from the XML/STB data. The room subtype will
80
98
  * correspond to different things depending on what XML/STB file it draws from. For example, in the
81
99
  * "00.special rooms.stb" file, an Angel Room with a subtype of 0 will correspond to a normal Angel
82
100
  * Room and a subtype of 1 will correspond to an Angel Room shop for The Stairway.
83
101
  *
102
+ * @param roomGridIndex Optional. Equal to the current room index by default.
84
103
  * @returns The room subtype. Returns -1 if the subtype was not found.
85
104
  */
86
- export declare function getRoomSubType(): int;
105
+ export declare function getRoomSubType(roomGridIndex?: int): int;
87
106
  /**
88
- * Helper function to get the variant for the current room from the XML/STB data. You can think of a
89
- * room variant as its identifier. For example, to go to Basement room #123, you would use a console
107
+ * Helper function to get the variant for a room from the XML/STB data. You can think of a room
108
+ * variant as its identifier. For example, to go to Basement room #123, you would use a console
90
109
  * command of `goto d.123` while on the Basement.
91
110
  *
111
+ * @param roomGridIndex Optional. Equal to the current room index by default.
92
112
  * @returns The room variant. Returns -1 if the variant was not found.
93
113
  */
94
- export declare function getRoomVariant(): int;
114
+ export declare function getRoomVariant(roomGridIndex?: int): int;
95
115
  /**
96
- * The room visited count will be inaccurate during the period before the PostNewRoom callback has
97
- * fired (i.e. when entities are initializing and performing their first update). This is because
98
- * the variable is only incremented immediately before the PostNewRoom callback fires.
116
+ * Note that the room visited count will be inaccurate during the period before the PostNewRoom
117
+ * callback has fired (i.e. when entities are initializing and performing their first update). This
118
+ * is because the variable is only incremented immediately before the PostNewRoom callback fires.
119
+ *
120
+ * @param roomGridIndex Optional. Equal to the current room index by default.
99
121
  */
100
- export declare function getRoomVisitedCount(): int;
122
+ export declare function getRoomVisitedCount(roomGridIndex?: int): int;
101
123
  /**
102
124
  * Helper function to get the room descriptor for every room on the level. Uses the
103
125
  * `Level.GetRooms()` method to accomplish this.
@@ -167,15 +189,19 @@ export declare function inStartingRoom(): boolean;
167
189
  */
168
190
  export declare function isAllRoomsClear(onlyCheckRoomTypes?: RoomType[]): boolean;
169
191
  /**
170
- * Helper function to detect if the current room was created by the Red Key item. Under the hood,
192
+ * Helper function to detect if the provided room was created by the Red Key item. Under the hood,
171
193
  * this checks for the `RoomDescriptorFlag.FLAG_RED_ROOM` flag.
194
+ *
195
+ * @param roomGridIndex Optional. Equal to the current room index by default.
172
196
  */
173
- export declare function isRedKeyRoom(): boolean;
197
+ export declare function isRedKeyRoom(roomGridIndex?: int): boolean;
174
198
  /**
175
- * Helper function to determine whether or not the current room is part of the floor layout. For
199
+ * Helper function to determine if the provided room is part of the floor layout. For
176
200
  * example, Devil Rooms and the Mega Satan room are not considered to be inside the map.
201
+ *
202
+ * @param roomGridIndex Optional. Equal to the current room index by default.
177
203
  */
178
- export declare function isRoomInsideMap(): boolean;
204
+ export declare function isRoomInsideMap(roomGridIndex?: int): boolean;
179
205
  /**
180
206
  * If `Room.Update()` is called in a PostNewRoom callback, then some entities will slide around
181
207
  * (such as the player). Since those entity velocities are already at zero, setting them to zero
@@ -17,35 +17,31 @@ local setEntityPositions = ____entity.setEntityPositions
17
17
  local setEntityVelocities = ____entity.setEntityVelocities
18
18
  local ____flag = require("functions.flag")
19
19
  local hasFlag = ____flag.hasFlag
20
- function ____exports.getCurrentRoomDescReadOnly(self)
20
+ function ____exports.getCurrentRoomDescriptorReadOnly(self)
21
21
  local game = Game()
22
22
  local level = game:GetLevel()
23
23
  return level:GetCurrentRoomDesc()
24
24
  end
25
- function ____exports.getRoomData(self)
25
+ function ____exports.getRoomData(self, roomGridIndex)
26
+ local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
27
+ return roomDescriptor.Data
28
+ end
29
+ function ____exports.getRoomDescriptor(self, roomGridIndex)
26
30
  local game = Game()
27
31
  local level = game:GetLevel()
28
- local roomSafeGridIndex = ____exports.getRoomSafeGridIndex(nil)
29
- local roomDesc = level:GetRoomByIdx(roomSafeGridIndex)
30
- return roomDesc.Data
31
- end
32
- function ____exports.getRoomSafeGridIndex(self)
33
- local roomDesc = ____exports.getCurrentRoomDescReadOnly(nil)
34
- return roomDesc.SafeGridIndex
35
- end
36
- function ____exports.getRoomStageID(self)
37
- local roomData = ____exports.getRoomData(nil)
38
- if roomData == nil then
39
- return -1
32
+ if roomGridIndex == nil then
33
+ local currentRoomDescriptor = ____exports.getCurrentRoomDescriptorReadOnly(nil)
34
+ roomGridIndex = currentRoomDescriptor.SafeGridIndex
40
35
  end
41
- return roomData.StageID
36
+ return level:GetRoomByIdx(roomGridIndex)
42
37
  end
43
- function ____exports.getRoomSubType(self)
44
- local roomData = ____exports.getRoomData(nil)
45
- if roomData == nil then
46
- return -1
47
- end
48
- return roomData.Subtype
38
+ function ____exports.getRoomStageID(self, roomGridIndex)
39
+ local roomData = ____exports.getRoomData(nil, roomGridIndex)
40
+ return ((roomData == nil) and -1) or roomData.StageID
41
+ end
42
+ function ____exports.getRoomSubType(self, roomGridIndex)
43
+ local roomData = ____exports.getRoomData(nil, roomGridIndex)
44
+ return ((roomData == nil) and -1) or roomData.Subtype
49
45
  end
50
46
  function ____exports.getRooms(self, includeExtraDimensionalRooms)
51
47
  if includeExtraDimensionalRooms == nil then
@@ -59,9 +55,9 @@ function ____exports.getRooms(self, includeExtraDimensionalRooms)
59
55
  do
60
56
  local i = 0
61
57
  while i < roomList.Size do
62
- local roomDesc = roomList:Get(i)
63
- if roomDesc ~= nil then
64
- __TS__ArrayPush(rooms, roomDesc)
58
+ local roomDescriptor = roomList:Get(i)
59
+ if roomDescriptor ~= nil then
60
+ __TS__ArrayPush(rooms, roomDescriptor)
65
61
  end
66
62
  i = i + 1
67
63
  end
@@ -70,9 +66,9 @@ function ____exports.getRooms(self, includeExtraDimensionalRooms)
70
66
  do
71
67
  local i = 0
72
68
  while i <= MAX_ROOM_INDEX do
73
- local roomDesc = level:GetRoomByIdx(i)
74
- if roomDesc ~= nil then
75
- __TS__ArrayPush(rooms, roomDesc)
69
+ local roomDescriptor = level:GetRoomByIdx(i)
70
+ if roomDescriptor ~= nil then
71
+ __TS__ArrayPush(rooms, roomDescriptor)
76
72
  end
77
73
  i = i + 1
78
74
  end
@@ -93,10 +89,10 @@ function ____exports.changeRoom(self, roomGridIndex)
93
89
  end
94
90
  function ____exports.getAllRoomGridIndexes(self)
95
91
  local allRoomGridIndexes = {}
96
- for ____, roomDesc in ipairs(
92
+ for ____, roomDescriptor in ipairs(
97
93
  ____exports.getRooms(nil)
98
94
  ) do
99
- __TS__ArrayPush(allRoomGridIndexes, roomDesc.SafeGridIndex)
95
+ __TS__ArrayPush(allRoomGridIndexes, roomDescriptor.SafeGridIndex)
100
96
  end
101
97
  return allRoomGridIndexes
102
98
  end
@@ -125,24 +121,17 @@ function ____exports.getCurrentDimension(self)
125
121
  )
126
122
  return 0
127
123
  end
128
- function ____exports.getRoomDataType(self)
129
- local roomData = ____exports.getRoomData(nil)
130
- if roomData == nil then
131
- return -1
132
- end
133
- return roomData.Type
134
- end
135
- function ____exports.getRoomListIndex(self)
136
- local roomDesc = ____exports.getCurrentRoomDescReadOnly(nil)
137
- return roomDesc.ListIndex
124
+ function ____exports.getRoomDataType(self, roomGridIndex)
125
+ local roomData = ____exports.getRoomData(nil, roomGridIndex)
126
+ return ((roomData == nil) and -1) or roomData.Type
138
127
  end
139
128
  function ____exports.getRoomGridIndexesForType(self, roomType)
140
129
  local roomGridIndexes = {}
141
- for ____, roomDesc in ipairs(
130
+ for ____, roomDescriptor in ipairs(
142
131
  ____exports.getRooms(nil)
143
132
  ) do
144
- if (roomDesc.Data ~= nil) and (roomDesc.Data.Type == roomType) then
145
- __TS__ArrayPush(roomGridIndexes, roomDesc.SafeGridIndex)
133
+ if (roomDescriptor.Data ~= nil) and (roomDescriptor.Data.Type == roomType) then
134
+ __TS__ArrayPush(roomGridIndexes, roomDescriptor.SafeGridIndex)
146
135
  end
147
136
  end
148
137
  return roomGridIndexes
@@ -155,23 +144,25 @@ function ____exports.getRoomItemPoolType(self)
155
144
  local roomSeed = room:GetSpawnSeed()
156
145
  return itemPool:GetPoolForRoom(roomType, roomSeed)
157
146
  end
158
- function ____exports.getRoomName(self)
159
- local roomData = ____exports.getRoomData(nil)
160
- if roomData == nil then
161
- return "Unknown"
162
- end
163
- return roomData.Name
147
+ function ____exports.getRoomListIndex(self, roomGridIndex)
148
+ local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
149
+ return roomDescriptor.ListIndex
164
150
  end
165
- function ____exports.getRoomVariant(self)
166
- local roomData = ____exports.getRoomData(nil)
167
- if roomData == nil then
168
- return -1
169
- end
170
- return roomData.Variant
151
+ function ____exports.getRoomName(self, roomGridIndex)
152
+ local roomData = ____exports.getRoomData(nil, roomGridIndex)
153
+ return ((roomData == nil) and "Unknown") or roomData.Name
154
+ end
155
+ function ____exports.getRoomSafeGridIndex(self, roomGridIndex)
156
+ local roomDescriptor = ((roomGridIndex == nil) and ____exports.getCurrentRoomDescriptorReadOnly(nil)) or ____exports.getRoomDescriptor(nil, roomGridIndex)
157
+ return roomDescriptor.SafeGridIndex
171
158
  end
172
- function ____exports.getRoomVisitedCount(self)
173
- local roomDesc = ____exports.getCurrentRoomDescReadOnly(nil)
174
- return roomDesc.VisitedCount
159
+ function ____exports.getRoomVariant(self, roomGridIndex)
160
+ local roomData = ____exports.getRoomData(nil, roomGridIndex)
161
+ return ((roomData == nil) and -1) or roomData.Variant
162
+ end
163
+ function ____exports.getRoomVisitedCount(self, roomGridIndex)
164
+ local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
165
+ return roomDescriptor.VisitedCount
175
166
  end
176
167
  function ____exports.gridToPos(self, x, y)
177
168
  local game = Game()
@@ -213,8 +204,8 @@ function ____exports.inCrawlspace(self)
213
204
  return (roomSafeGridIndex == GridRooms.ROOM_DUNGEON_IDX) and (roomSubType ~= 4)
214
205
  end
215
206
  function ____exports.inDevilsCrownTreasureRoom(self)
216
- local roomDesc = ____exports.getCurrentRoomDescReadOnly(nil)
217
- return hasFlag(nil, roomDesc.Flags, 2048)
207
+ local roomDescriptor = ____exports.getCurrentRoomDescriptorReadOnly(nil)
208
+ return hasFlag(nil, roomDescriptor.Flags, 2048)
218
209
  end
219
210
  function ____exports.inDimension(self, dimension)
220
211
  return dimension == ____exports.getCurrentDimension(nil)
@@ -250,33 +241,35 @@ function ____exports.inStartingRoom(self)
250
241
  end
251
242
  function ____exports.isAllRoomsClear(self, onlyCheckRoomTypes)
252
243
  local roomTypeWhitelist = (((onlyCheckRoomTypes == nil) and (function() return nil end)) or (function() return __TS__New(Set, onlyCheckRoomTypes) end))()
253
- for ____, roomDesc in ipairs(
244
+ for ____, roomDescriptor in ipairs(
254
245
  ____exports.getRooms(nil)
255
246
  ) do
256
247
  do
257
- local roomData = roomDesc.Data
248
+ local roomData = roomDescriptor.Data
258
249
  if roomData == nil then
259
- goto __continue49
250
+ goto __continue46
260
251
  end
261
252
  local roomType = roomData.Type
262
253
  if (roomTypeWhitelist ~= nil) and (not roomTypeWhitelist:has(roomType)) then
263
- goto __continue49
254
+ goto __continue46
264
255
  end
265
- if not roomDesc.Clear then
256
+ if not roomDescriptor.Clear then
266
257
  return false
267
258
  end
268
259
  end
269
- ::__continue49::
260
+ ::__continue46::
270
261
  end
271
262
  return true
272
263
  end
273
- function ____exports.isRedKeyRoom(self)
274
- local roomDesc = ____exports.getCurrentRoomDescReadOnly(nil)
275
- return hasFlag(nil, roomDesc.Flags, 1024)
264
+ function ____exports.isRedKeyRoom(self, roomGridIndex)
265
+ local roomDescriptor = ____exports.getRoomDescriptor(nil, roomGridIndex)
266
+ return hasFlag(nil, roomDescriptor.Flags, 1024)
276
267
  end
277
- function ____exports.isRoomInsideMap(self)
278
- local roomSafeGridIndex = ____exports.getRoomSafeGridIndex(nil)
279
- return roomSafeGridIndex >= 0
268
+ function ____exports.isRoomInsideMap(self, roomGridIndex)
269
+ if roomGridIndex == nil then
270
+ roomGridIndex = ____exports.getRoomSafeGridIndex(nil)
271
+ end
272
+ return roomGridIndex >= 0
280
273
  end
281
274
  function ____exports.roomUpdateSafe(self)
282
275
  local game = Game()
@@ -302,14 +295,14 @@ function ____exports.setRoomCleared(self)
302
295
  ) do
303
296
  do
304
297
  if isHiddenSecretRoomDoor(nil, door) then
305
- goto __continue58
298
+ goto __continue56
306
299
  end
307
300
  door.State = DoorState.STATE_OPEN
308
301
  local sprite = door:GetSprite()
309
302
  sprite:Play("Opened", true)
310
303
  door.ExtraVisible = false
311
304
  end
312
- ::__continue58::
305
+ ::__continue56::
313
306
  end
314
307
  sfx:Stop(SoundEffect.SOUND_DOOR_HEAVY_OPEN)
315
308
  game:ShakeScreen(0)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "1.0.570",
3
+ "version": "1.0.574",
4
4
  "description": "Helper functions for IsaacScript mods",
5
5
  "keywords": [
6
6
  "isaac",