isaacscript-common 7.6.2 → 7.8.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.
@@ -7,4 +7,5 @@ export declare function listGridEntities(params: string, includeWalls: boolean):
7
7
  export declare function movePlayer(params: string, direction: Direction): void;
8
8
  export declare function spawnTrapdoorOrCrawlSpace(trapdoor: boolean): void;
9
9
  export declare function warpToRoomType(roomType: RoomType): void;
10
+ export declare function warpNextToRoomType(roomType: RoomType): void;
10
11
  //# sourceMappingURL=commandsSubroutines.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commandsSubroutines.d.ts","sourceRoot":"","sources":["../../../src/features/extraConsoleCommands/commandsSubroutines.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAIT,QAAQ,EACT,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAmBpD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAcrE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAqBlD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,wBAAwB,EAAE,OAAO,GAChC,IAAI,CAYN;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,CAY5E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAgBrE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAUjE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAevD"}
1
+ {"version":3,"file":"commandsSubroutines.d.ts","sourceRoot":"","sources":["../../../src/features/extraConsoleCommands/commandsSubroutines.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAIT,QAAQ,EACT,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAmBpD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAcrE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAqBlD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,wBAAwB,EAAE,OAAO,GAChC,IAAI,CAYN;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,CAY5E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAgBrE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAUjE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAWvD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAuB3D"}
@@ -1,3 +1,6 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local Map = ____lualib.Map
3
+ local __TS__Iterator = ____lualib.__TS__Iterator
1
4
  local ____exports = {}
2
5
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
3
6
  local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
@@ -12,6 +15,7 @@ local directionToVector = ____direction.directionToVector
12
15
  local ____gridEntities = require("functions.gridEntities")
13
16
  local spawnGridEntityWithVariant = ____gridEntities.spawnGridEntityWithVariant
14
17
  local ____levelGrid = require("functions.levelGrid")
18
+ local getRoomAdjacentGridIndexes = ____levelGrid.getRoomAdjacentGridIndexes
15
19
  local getRoomGridIndexesForType = ____levelGrid.getRoomGridIndexesForType
16
20
  local ____logEntities = require("functions.logEntities")
17
21
  local logAllEntities = ____logEntities.logAllEntities
@@ -26,7 +30,6 @@ local changeRoom = ____rooms.changeRoom
26
30
  local ____utils = require("functions.utils")
27
31
  local printConsole = ____utils.printConsole
28
32
  local ____roomTypeNames = require("objects.roomTypeNames")
29
- local DEFAULT_ROOM_TYPE_NAME = ____roomTypeNames.DEFAULT_ROOM_TYPE_NAME
30
33
  local ROOM_TYPE_NAMES = ____roomTypeNames.ROOM_TYPE_NAMES
31
34
  local DEFAULT_MOVE_UNITS = 0.5
32
35
  function ____exports.addHeart(self, params, healthType)
@@ -109,12 +112,6 @@ function ____exports.spawnTrapdoorOrCrawlSpace(self, trapdoor)
109
112
  end
110
113
  function ____exports.warpToRoomType(self, roomType)
111
114
  local roomTypeName = ROOM_TYPE_NAMES[roomType]
112
- if roomTypeName == DEFAULT_ROOM_TYPE_NAME then
113
- printConsole(
114
- nil,
115
- "Invalid room type: " .. tostring(roomType)
116
- )
117
- end
118
115
  local gridIndexes = getRoomGridIndexesForType(nil, roomType)
119
116
  local firstGridIndex = gridIndexes[1]
120
117
  if firstGridIndex == nil then
@@ -127,4 +124,31 @@ function ____exports.warpToRoomType(self, roomType)
127
124
  ((("Warped to room type: " .. roomTypeName) .. " (") .. tostring(roomType)) .. ")"
128
125
  )
129
126
  end
127
+ function ____exports.warpNextToRoomType(self, roomType)
128
+ local roomTypeName = ROOM_TYPE_NAMES[roomType]
129
+ local gridIndexes = getRoomGridIndexesForType(nil, roomType)
130
+ local firstGridIndex = gridIndexes[1]
131
+ if firstGridIndex == nil then
132
+ printConsole(nil, ("There are no " .. roomTypeName) .. "s on this floor.")
133
+ return
134
+ end
135
+ local adjacentRoomGridIndexes = getRoomAdjacentGridIndexes(nil, firstGridIndex)
136
+ for ____, ____value in __TS__Iterator(adjacentRoomGridIndexes:entries()) do
137
+ local _doorSlot = ____value[1]
138
+ local roomGridIndex = ____value[2]
139
+ local roomData = getRoomData(nil, roomGridIndex)
140
+ if roomData ~= nil and roomData.Type == RoomType.DEFAULT then
141
+ changeRoom(nil, roomGridIndex)
142
+ printConsole(
143
+ nil,
144
+ ((("Warped next to room type: " .. roomTypeName) .. " (") .. tostring(roomType)) .. ")"
145
+ )
146
+ return
147
+ end
148
+ end
149
+ printConsole(
150
+ nil,
151
+ ((("Failed to find the room next to room type: " .. roomTypeName) .. " (") .. tostring(roomType)) .. ")"
152
+ )
153
+ end
130
154
  return ____exports
@@ -42,6 +42,7 @@ function initMap(self)
42
42
  extraConsoleCommandsFunctionMap:set("bombsDisplay", commandsDisplay.bombsDisplay)
43
43
  extraConsoleCommandsFunctionMap:set("bombs", commands.bombs)
44
44
  extraConsoleCommandsFunctionMap:set("boneHearts", commands.boneHearts)
45
+ extraConsoleCommandsFunctionMap:set("bossNextRoom", commands.bossNextRoom)
45
46
  extraConsoleCommandsFunctionMap:set("bossRoom", commands.bossRoom)
46
47
  extraConsoleCommandsFunctionMap:set("bossRush", commands.bossRush)
47
48
  extraConsoleCommandsFunctionMap:set("brokenHearts", commands.brokenHearts)
@@ -44,6 +44,8 @@ export declare function bombs(params: string): void;
44
44
  * numbers to remove hearts.)
45
45
  */
46
46
  export declare function boneHearts(params: string): void;
47
+ /** Warps to the room next to the first Boss Room on the floor. */
48
+ export declare function bossNextRoom(): void;
47
49
  /** Warps to the first Boss Room on the floor. */
48
50
  export declare function bossRoom(): void;
49
51
  /** Warps to the Boss Rush for the floor. */
@@ -1 +1 @@
1
- {"version":3,"file":"listCommands.d.ts","sourceRoot":"","sources":["../../../src/features/extraConsoleCommands/listCommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listCommands.d.ts","sourceRoot":"","sources":["../../../src/features/extraConsoleCommands/listCommands.ts"],"names":[],"mappings":"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"}
@@ -107,6 +107,7 @@ local listEntities = ____commandsSubroutines.listEntities
107
107
  local listGridEntities = ____commandsSubroutines.listGridEntities
108
108
  local movePlayer = ____commandsSubroutines.movePlayer
109
109
  local spawnTrapdoorOrCrawlSpace = ____commandsSubroutines.spawnTrapdoorOrCrawlSpace
110
+ local warpNextToRoomType = ____commandsSubroutines.warpNextToRoomType
110
111
  local warpToRoomType = ____commandsSubroutines.warpToRoomType
111
112
  local ____v = require("features.extraConsoleCommands.v")
112
113
  local v = ____v.default
@@ -322,6 +323,10 @@ end
322
323
  function ____exports.boneHearts(self, params)
323
324
  addHeart(nil, params, HealthType.BONE)
324
325
  end
326
+ --- Warps to the room next to the first Boss Room on the floor.
327
+ function ____exports.bossNextRoom(self)
328
+ warpNextToRoomType(nil, RoomType.BOSS)
329
+ end
325
330
  --- Warps to the first Boss Room on the floor.
326
331
  function ____exports.bossRoom(self)
327
332
  warpToRoomType(nil, RoomType.BOSS)
@@ -25,16 +25,16 @@ export declare function getDevilRoomOrAngelRoomDoor(): GridEntityDoor | undefine
25
25
  * Helper function to get the position that a player will enter a room at.
26
26
  *
27
27
  * When players enter a room, they do not appear exactly on the location of the door, because then
28
- * they would immediately collide with the loading zone. Instead, they are offset by a certain
29
- * amount of units.
28
+ * they would immediately collide with the loading zone. Instead, they appear on the grid tile next
29
+ * to the door.
30
30
  */
31
31
  export declare function getDoorEnterPosition(door: GridEntityDoor): Readonly<Vector>;
32
32
  /**
33
33
  * Helper function to get the offset from a door position that a player will enter a room at.
34
34
  *
35
35
  * When players enter a room, they do not appear exactly on the location of the door, because then
36
- * they would immediately collide with the loading zone. Instead, they are offset by a certain
37
- * amount of units.
36
+ * they would immediately collide with the loading zone. Instead, they appear on the grid tile next
37
+ * to the door.
38
38
  */
39
39
  export declare function getDoorSlotEnterPositionOffset(doorSlot: DoorSlot): Readonly<Vector>;
40
40
  /** Helper function to get the possible door slots that can exist for a given room shape. */
@@ -1 +1 @@
1
- {"version":3,"file":"doors.d.ts","sourceRoot":"","sources":["../../src/functions/doors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doors.d.ts","sourceRoot":"","sources":["../../src/functions/doors.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,6 @@ local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
7
7
  local __TS__ArrayFind = ____lualib.__TS__ArrayFind
8
8
  local __TS__Iterator = ____lualib.__TS__Iterator
9
9
  local ____exports = {}
10
- local ROOM_ENTRY_OFFSET_FROM_DOOR
11
10
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
12
11
  local DoorSlot = ____isaac_2Dtypescript_2Ddefinitions.DoorSlot
13
12
  local DoorSlotFlag = ____isaac_2Dtypescript_2Ddefinitions.DoorSlotFlag
@@ -17,6 +16,8 @@ local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
17
16
  local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
18
17
  local ____cachedClasses = require("core.cachedClasses")
19
18
  local game = ____cachedClasses.game
19
+ local ____constants = require("core.constants")
20
+ local DISTANCE_OF_GRID_TILE = ____constants.DISTANCE_OF_GRID_TILE
20
21
  local ____doorSlotFlagToDoorSlot = require("objects.doorSlotFlagToDoorSlot")
21
22
  local DEFAULT_DOOR_SLOT = ____doorSlotFlagToDoorSlot.DEFAULT_DOOR_SLOT
22
23
  local DOOR_SLOT_FLAG_TO_DOOR_SLOT = ____doorSlotFlagToDoorSlot.DOOR_SLOT_FLAG_TO_DOOR_SLOT
@@ -48,13 +49,13 @@ end
48
49
  --- Helper function to get the offset from a door position that a player will enter a room at.
49
50
  --
50
51
  -- When players enter a room, they do not appear exactly on the location of the door, because then
51
- -- they would immediately collide with the loading zone. Instead, they are offset by a certain
52
- -- amount of units.
52
+ -- they would immediately collide with the loading zone. Instead, they appear on the grid tile next
53
+ -- to the door.
53
54
  function ____exports.getDoorSlotEnterPositionOffset(self, doorSlot)
54
55
  local direction = ____exports.doorSlotToDirection(nil, doorSlot)
55
56
  local vector = directionToVector(nil, direction)
56
57
  local oppositeVector = vector * -1
57
- return oppositeVector * ROOM_ENTRY_OFFSET_FROM_DOOR
58
+ return oppositeVector * DISTANCE_OF_GRID_TILE
58
59
  end
59
60
  --- Helper function to get all of the doors in the room. By default, it will return every door. You
60
61
  -- can optionally specify one or more room types to return only the doors that match the specified
@@ -106,7 +107,6 @@ function ____exports.removeDoors(self, ...)
106
107
  ____exports.removeDoor(nil, door)
107
108
  end
108
109
  end
109
- ROOM_ENTRY_OFFSET_FROM_DOOR = 40
110
110
  function ____exports.closeAllDoors(self)
111
111
  for ____, door in ipairs(____exports.getDoors(nil)) do
112
112
  door:Close(true)
@@ -181,8 +181,8 @@ end
181
181
  --- Helper function to get the position that a player will enter a room at.
182
182
  --
183
183
  -- When players enter a room, they do not appear exactly on the location of the door, because then
184
- -- they would immediately collide with the loading zone. Instead, they are offset by a certain
185
- -- amount of units.
184
+ -- they would immediately collide with the loading zone. Instead, they appear on the grid tile next
185
+ -- to the door.
186
186
  function ____exports.getDoorEnterPosition(self, door)
187
187
  local offset = ____exports.getDoorSlotEnterPositionOffset(nil, door.Slot)
188
188
  return door.Position + offset
@@ -8,7 +8,23 @@
8
8
  */
9
9
  import { DoorSlot, RoomShape, RoomType } from "isaac-typescript-definitions";
10
10
  /**
11
- * Helper function to get the room grid indexes that are adjacent to a given room grid index.
11
+ * Helper function to get only the adjacent room grid indexes that exist (i.e. have room data).
12
+ *
13
+ * This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
14
+ * that function for more information.
15
+ */
16
+ export declare function getAdjacentExistingRoomGridIndexes(roomGridIndex?: int): int[];
17
+ /**
18
+ * Helper function to get only the adjacent room grid indexes that do not exist (i.e. do not have
19
+ * room data).
20
+ *
21
+ * This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
22
+ * that function for more information.
23
+ */
24
+ export declare function getAdjacentNonExistingRoomGridIndexes(roomGridIndex?: int): int[];
25
+ /**
26
+ * Helper function to get all of the room grid indexes that are adjacent to a given room grid index
27
+ * (even if those room grid indexes do not have any rooms in them).
12
28
  *
13
29
  * Adjacent room grid indexes that are outside of the grid will not be included in the returned
14
30
  * array.
@@ -54,6 +70,17 @@ export declare function getNewRoomCandidatesForLevel(): Array<[
54
70
  doorSlot: DoorSlot,
55
71
  newRoomGridIndex: int
56
72
  ]>;
73
+ /**
74
+ * Helper function to get the grid indexes of all the rooms connected to the given room index,
75
+ * taking the shape of the room into account. (This will only include rooms with valid data.)
76
+ *
77
+ * Returns an empty map if the provided room grid index is out of bounds or has no associated room
78
+ * data.
79
+ *
80
+ * @param roomGridIndex Optional. Default is the current room index.
81
+ * @returns A map of `DoorSlot` to the corresponding room grid index.
82
+ */
83
+ export declare function getRoomAdjacentGridIndexes(roomGridIndex?: int): Map<DoorSlot, int>;
57
84
  /**
58
85
  * Helper function to get an array of all of the safe grid indexes for rooms that match the
59
86
  * specified room type.
@@ -65,25 +92,22 @@ export declare function getNewRoomCandidatesForLevel(): Array<[
65
92
  */
66
93
  export declare function getRoomGridIndexesForType(...roomTypes: RoomType[]): int[];
67
94
  /**
68
- * Helper function to get the grid indexes of all the rooms connected to the given room index,
69
- * taking the shape of the room into account. (This will only include rooms with valid data.)
95
+ * Helper function to get only the adjacent room grid indexes for a room shape that exist (i.e. have
96
+ * room data).
70
97
  *
71
- * Returns an empty map if the provided room grid index is out of bounds or has no associated room
72
- * data.
73
- *
74
- * @param roomGridIndex Optional. Default is the current room index.
75
- * @returns A map of `DoorSlot` to the corresponding room grid index.
98
+ * This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
99
+ * that function for more information.
76
100
  */
77
- export declare function getRoomNeighbors(roomGridIndex?: int): Map<DoorSlot, int>;
101
+ export declare function getRoomShapeAdjacentExistingGridIndexes(safeRoomGridIndex: int, roomShape: RoomShape): Map<DoorSlot, int>;
78
102
  /**
79
103
  * Helper function to get the room grid index delta that each hypothetical door in a given room
80
104
  * shape would go to.
81
105
  *
82
- * This is used by the `getRoomShapeNeighborGridIndexes` function.
106
+ * This is used by the `getRoomShapeAdjacentGridIndexes` function.
83
107
  *
84
108
  * @returns A map of `DoorSlot` to the corresponding room grid index delta.
85
109
  */
86
- export declare function getRoomShapeNeighborGridIndexDeltas(roomShape: RoomShape): Map<DoorSlot, int>;
110
+ export declare function getRoomShapeAdjacentGridIndexDeltas(roomShape: RoomShape): Map<DoorSlot, int>;
87
111
  /**
88
112
  * Helper function to get the room grid index that each hypothetical door in a given room shape
89
113
  * would go to. (This will not include room grid indexes that are outside of the grid.)
@@ -93,7 +117,15 @@ export declare function getRoomShapeNeighborGridIndexDeltas(roomShape: RoomShape
93
117
  * @param roomShape The shape of the room.
94
118
  * @returns A map of `DoorSlot` to the corresponding room grid index.
95
119
  */
96
- export declare function getRoomShapeNeighborGridIndexes(safeRoomGridIndex: int, roomShape: RoomShape): Map<DoorSlot, int>;
120
+ export declare function getRoomShapeAdjacentGridIndexes(safeRoomGridIndex: int, roomShape: RoomShape): Map<DoorSlot, int>;
121
+ /**
122
+ * Helper function to get only the adjacent room grid indexes for a room shape that do not exist
123
+ * (i.e. do not have room data).
124
+ *
125
+ * This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
126
+ * that function for more information.
127
+ */
128
+ export declare function getRoomShapeAdjacentNonExistingGridIndexes(safeRoomGridIndex: int, roomShape: RoomShape): Map<DoorSlot, int>;
97
129
  /**
98
130
  * Helper function to check if the given room grid index is a dead end. Specifically, this is
99
131
  * defined as having only one adjacent room that exists.
@@ -1 +1 @@
1
- {"version":3,"file":"levelGrid.d.ts","sourceRoot":"","sources":["../../src/functions/levelGrid.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,QAAQ,EAKR,SAAS,EACT,QAAQ,EACT,MAAM,8BAA8B,CAAC;AA8BtC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,CAerE;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,IAAI,GAAG,EAAE,CAG7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,IAAI,GAAG,GAAqB,GAErC,CAAC,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC,GACvE,SAAS,CAOZ;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,CAAC,EAAE,GAAG,GAClB,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CA+CjD;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,KAAK,CACnD;IAAC,qBAAqB,EAAE,GAAG;IAAE,QAAQ,EAAE,QAAQ;IAAE,gBAAgB,EAAE,GAAG;CAAC,CACxE,CAsBA;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,GAAG,GAAG,EAAE,CAWzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CA+BxE;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,SAAS,GACnB,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAEpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,iBAAiB,EAAE,GAAG,EACtB,SAAS,EAAE,SAAS,GACnB,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAapB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,OAAO,CAUtD;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,GAAG,GACjB,OAAO,CAGT;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,GAAG,GACjB,OAAO,CAqBT;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,OAAO,CAGzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,OAAO,CAM7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,IAAI,GAAG,GAAG,SAAS,CA6CzC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,CAGtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAKtE"}
1
+ {"version":3,"file":"levelGrid.d.ts","sourceRoot":"","sources":["../../src/functions/levelGrid.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  local ____lualib = require("lualib_bundle")
2
- local __TS__ArrayMap = ____lualib.__TS__ArrayMap
3
2
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
3
+ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
4
4
  local Map = ____lualib.Map
5
5
  local __TS__Iterator = ____lualib.__TS__Iterator
6
- local Set = ____lualib.Set
7
6
  local __TS__New = ____lualib.__TS__New
7
+ local Set = ____lualib.Set
8
8
  local ____exports = {}
9
9
  local ADJACENT_ROOM_GRID_INDEX_DELTAS
10
10
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
@@ -45,7 +45,20 @@ local ____roomShape = require("functions.roomShape")
45
45
  local getGridIndexDelta = ____roomShape.getGridIndexDelta
46
46
  local ____types = require("functions.types")
47
47
  local asNumber = ____types.asNumber
48
- --- Helper function to get the room grid indexes that are adjacent to a given room grid index.
48
+ --- Helper function to get only the adjacent room grid indexes that do not exist (i.e. do not have
49
+ -- room data).
50
+ --
51
+ -- This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
52
+ -- that function for more information.
53
+ function ____exports.getAdjacentNonExistingRoomGridIndexes(self, roomGridIndex)
54
+ local adjacentRoomGridIndexes = ____exports.getAdjacentRoomGridIndexes(nil, roomGridIndex)
55
+ return __TS__ArrayFilter(
56
+ adjacentRoomGridIndexes,
57
+ function(____, adjacentRoomGridIndex) return getRoomData(nil, adjacentRoomGridIndex) == nil end
58
+ )
59
+ end
60
+ --- Helper function to get all of the room grid indexes that are adjacent to a given room grid index
61
+ -- (even if those room grid indexes do not have any rooms in them).
49
62
  --
50
63
  -- Adjacent room grid indexes that are outside of the grid will not be included in the returned
51
64
  -- array.
@@ -85,25 +98,22 @@ function ____exports.getNewRoomCandidatesBesideRoom(self, roomGridIndex)
85
98
  if roomData == nil then
86
99
  return {}
87
100
  end
88
- local doorSlotToRoomGridIndexes = ____exports.getRoomShapeNeighborGridIndexes(nil, roomDescriptor.SafeGridIndex, roomData.Shape)
101
+ local doorSlotToRoomGridIndexes = ____exports.getRoomShapeAdjacentNonExistingGridIndexes(nil, roomDescriptor.SafeGridIndex, roomData.Shape)
89
102
  local roomCandidates = {}
90
103
  for ____, ____value in __TS__Iterator(doorSlotToRoomGridIndexes:entries()) do
91
104
  local doorSlot = ____value[1]
92
- local neighborRoomGridIndex = ____value[2]
105
+ local adjacentRoomGridIndex = ____value[2]
93
106
  do
94
107
  local doorSlotFlag = doorSlotToDoorSlotFlag(nil, doorSlot)
95
108
  if not hasFlag(nil, roomData.Doors, doorSlotFlag) then
96
- goto __continue13
97
- end
98
- if ____exports.roomExists(nil, neighborRoomGridIndex) then
99
- goto __continue13
109
+ goto __continue17
100
110
  end
101
- if not ____exports.isDeadEnd(nil, neighborRoomGridIndex) then
102
- goto __continue13
111
+ if not ____exports.isDeadEnd(nil, adjacentRoomGridIndex) then
112
+ goto __continue17
103
113
  end
104
- roomCandidates[#roomCandidates + 1] = {doorSlot, neighborRoomGridIndex}
114
+ roomCandidates[#roomCandidates + 1] = {doorSlot, adjacentRoomGridIndex}
105
115
  end
106
- ::__continue13::
116
+ ::__continue17::
107
117
  end
108
118
  return roomCandidates
109
119
  end
@@ -128,13 +138,30 @@ function ____exports.getNewRoomCandidatesForLevel(self)
128
138
  end
129
139
  return newRoomCandidates
130
140
  end
141
+ --- Helper function to get only the adjacent room grid indexes for a room shape that exist (i.e. have
142
+ -- room data).
143
+ --
144
+ -- This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
145
+ -- that function for more information.
146
+ function ____exports.getRoomShapeAdjacentExistingGridIndexes(self, safeRoomGridIndex, roomShape)
147
+ local roomShapeAdjacentGridIndexes = ____exports.getRoomShapeAdjacentGridIndexes(nil, safeRoomGridIndex, roomShape)
148
+ for ____, ____value in __TS__Iterator(roomShapeAdjacentGridIndexes:entries()) do
149
+ local doorSlot = ____value[1]
150
+ local roomGridIndex = ____value[2]
151
+ local roomData = getRoomData(nil, roomGridIndex)
152
+ if roomData == nil then
153
+ roomShapeAdjacentGridIndexes:delete(doorSlot)
154
+ end
155
+ end
156
+ return roomShapeAdjacentGridIndexes
157
+ end
131
158
  --- Helper function to get the room grid index delta that each hypothetical door in a given room
132
159
  -- shape would go to.
133
160
  --
134
- -- This is used by the `getRoomShapeNeighborGridIndexes` function.
161
+ -- This is used by the `getRoomShapeAdjacentGridIndexes` function.
135
162
  --
136
163
  -- @returns A map of `DoorSlot` to the corresponding room grid index delta.
137
- function ____exports.getRoomShapeNeighborGridIndexDeltas(self, roomShape)
164
+ function ____exports.getRoomShapeAdjacentGridIndexDeltas(self, roomShape)
138
165
  return ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA[roomShape]
139
166
  end
140
167
  --- Helper function to get the room grid index that each hypothetical door in a given room shape
@@ -144,18 +171,35 @@ end
144
171
  -- for the respective room).
145
172
  -- @param roomShape The shape of the room.
146
173
  -- @returns A map of `DoorSlot` to the corresponding room grid index.
147
- function ____exports.getRoomShapeNeighborGridIndexes(self, safeRoomGridIndex, roomShape)
148
- local roomShapeNeighborGridIndexDeltas = ____exports.getRoomShapeNeighborGridIndexDeltas(nil, roomShape)
149
- local neighborGridIndexes = __TS__New(Map)
150
- for ____, ____value in __TS__Iterator(roomShapeNeighborGridIndexDeltas:entries()) do
174
+ function ____exports.getRoomShapeAdjacentGridIndexes(self, safeRoomGridIndex, roomShape)
175
+ local roomShapeAdjacentGridIndexDeltas = ____exports.getRoomShapeAdjacentGridIndexDeltas(nil, roomShape)
176
+ local adjacentGridIndexes = __TS__New(Map)
177
+ for ____, ____value in __TS__Iterator(roomShapeAdjacentGridIndexDeltas:entries()) do
151
178
  local doorSlot = ____value[1]
152
179
  local delta = ____value[2]
153
180
  local roomGridIndex = safeRoomGridIndex + delta
154
181
  if ____exports.isRoomInsideGrid(nil, roomGridIndex) then
155
- neighborGridIndexes:set(doorSlot, roomGridIndex)
182
+ adjacentGridIndexes:set(doorSlot, roomGridIndex)
156
183
  end
157
184
  end
158
- return neighborGridIndexes
185
+ return adjacentGridIndexes
186
+ end
187
+ --- Helper function to get only the adjacent room grid indexes for a room shape that do not exist
188
+ -- (i.e. do not have room data).
189
+ --
190
+ -- This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
191
+ -- that function for more information.
192
+ function ____exports.getRoomShapeAdjacentNonExistingGridIndexes(self, safeRoomGridIndex, roomShape)
193
+ local roomShapeAdjacentGridIndexes = ____exports.getRoomShapeAdjacentGridIndexes(nil, safeRoomGridIndex, roomShape)
194
+ for ____, ____value in __TS__Iterator(roomShapeAdjacentGridIndexes:entries()) do
195
+ local doorSlot = ____value[1]
196
+ local roomGridIndex = ____value[2]
197
+ local roomData = getRoomData(nil, roomGridIndex)
198
+ if roomData ~= nil then
199
+ roomShapeAdjacentGridIndexes:delete(doorSlot)
200
+ end
201
+ end
202
+ return roomShapeAdjacentGridIndexes
159
203
  end
160
204
  --- Helper function to check if the given room grid index is a dead end. Specifically, this is
161
205
  -- defined as having only one adjacent room that exists.
@@ -168,16 +212,8 @@ end
168
212
  --
169
213
  -- @param roomGridIndex Optional. Default is the current room index.
170
214
  function ____exports.isDeadEnd(self, roomGridIndex)
171
- local adjacentRoomGridIndexes = ____exports.getAdjacentRoomGridIndexes(nil, roomGridIndex)
172
- local adjacentRoomData = __TS__ArrayMap(
173
- adjacentRoomGridIndexes,
174
- function(____, adjacentRoomGridIndex) return getRoomData(nil, adjacentRoomGridIndex) end
175
- )
176
- local existingRoomData = __TS__ArrayFilter(
177
- adjacentRoomData,
178
- function(____, data) return data ~= nil end
179
- )
180
- return #existingRoomData == 1
215
+ local adjacentNonExistingRoomGridIndexes = ____exports.getAdjacentNonExistingRoomGridIndexes(nil, roomGridIndex)
216
+ return #adjacentNonExistingRoomGridIndexes == 1
181
217
  end
182
218
  --- Helper function to determine if a given room grid index is inside of the normal 13x13 level grid.
183
219
  --
@@ -201,6 +237,17 @@ local UP = -LEVEL_GRID_ROW_WIDTH
201
237
  local RIGHT = 1
202
238
  local DOWN = LEVEL_GRID_ROW_WIDTH
203
239
  ADJACENT_ROOM_GRID_INDEX_DELTAS = {LEFT, UP, RIGHT, DOWN}
240
+ --- Helper function to get only the adjacent room grid indexes that exist (i.e. have room data).
241
+ --
242
+ -- This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
243
+ -- that function for more information.
244
+ function ____exports.getAdjacentExistingRoomGridIndexes(self, roomGridIndex)
245
+ local adjacentRoomGridIndexes = ____exports.getAdjacentRoomGridIndexes(nil, roomGridIndex)
246
+ return __TS__ArrayFilter(
247
+ adjacentRoomGridIndexes,
248
+ function(____, adjacentRoomGridIndex) return getRoomData(nil, adjacentRoomGridIndex) ~= nil end
249
+ )
250
+ end
204
251
  --- Helper function to get the room safe grid index for every room on the entire floor.
205
252
  function ____exports.getAllRoomGridIndexes(self)
206
253
  local rooms = getRooms(nil)
@@ -227,6 +274,25 @@ function ____exports.getNewRoomCandidate(self, seedOrRNG)
227
274
  end
228
275
  return getRandomArrayElement(nil, newRoomCandidatesForLevel, seedOrRNG)
229
276
  end
277
+ --- Helper function to get the grid indexes of all the rooms connected to the given room index,
278
+ -- taking the shape of the room into account. (This will only include rooms with valid data.)
279
+ --
280
+ -- Returns an empty map if the provided room grid index is out of bounds or has no associated room
281
+ -- data.
282
+ --
283
+ -- @param roomGridIndex Optional. Default is the current room index.
284
+ -- @returns A map of `DoorSlot` to the corresponding room grid index.
285
+ function ____exports.getRoomAdjacentGridIndexes(self, roomGridIndex)
286
+ local roomDescriptor = getRoomDescriptor(nil, roomGridIndex)
287
+ if not ____exports.isRoomInsideGrid(nil, roomDescriptor.SafeGridIndex) then
288
+ return __TS__New(Map)
289
+ end
290
+ local roomData = roomDescriptor.Data
291
+ if roomData == nil then
292
+ return __TS__New(Map)
293
+ end
294
+ return ____exports.getRoomShapeAdjacentExistingGridIndexes(nil, roomDescriptor.SafeGridIndex, roomData.Shape)
295
+ end
230
296
  --- Helper function to get an array of all of the safe grid indexes for rooms that match the
231
297
  -- specified room type.
232
298
  --
@@ -246,34 +312,6 @@ function ____exports.getRoomGridIndexesForType(self, ...)
246
312
  function(____, roomDescriptor) return roomDescriptor.SafeGridIndex end
247
313
  )
248
314
  end
249
- --- Helper function to get the grid indexes of all the rooms connected to the given room index,
250
- -- taking the shape of the room into account. (This will only include rooms with valid data.)
251
- --
252
- -- Returns an empty map if the provided room grid index is out of bounds or has no associated room
253
- -- data.
254
- --
255
- -- @param roomGridIndex Optional. Default is the current room index.
256
- -- @returns A map of `DoorSlot` to the corresponding room grid index.
257
- function ____exports.getRoomNeighbors(self, roomGridIndex)
258
- local roomDescriptor = getRoomDescriptor(nil, roomGridIndex)
259
- if not ____exports.isRoomInsideGrid(nil, roomDescriptor.SafeGridIndex) then
260
- return __TS__New(Map)
261
- end
262
- local roomData = roomDescriptor.Data
263
- if roomData == nil then
264
- return __TS__New(Map)
265
- end
266
- local doorSlotToRoomGridIndexes = ____exports.getRoomShapeNeighborGridIndexes(nil, roomDescriptor.SafeGridIndex, roomData.Shape)
267
- local roomNeighbors = __TS__New(Map)
268
- for ____, ____value in __TS__Iterator(doorSlotToRoomGridIndexes:entries()) do
269
- local doorSlot = ____value[1]
270
- local neighborRoomGridIndex = ____value[2]
271
- if ____exports.roomExists(nil, neighborRoomGridIndex) then
272
- roomNeighbors:set(doorSlot, neighborRoomGridIndex)
273
- end
274
- end
275
- return roomNeighbors
276
- end
277
315
  function ____exports.isDoorSlotValidAtGridIndex(self, doorSlot, roomGridIndex)
278
316
  local allowedDoors = getRoomAllowedDoors(nil, roomGridIndex)
279
317
  return allowedDoors:has(doorSlot)
@@ -328,4 +328,12 @@ export declare function setBlindfold(player: EntityPlayer, enabled: boolean, mod
328
328
  * any costumes.
329
329
  */
330
330
  export declare function useActiveItemTemp(player: EntityPlayer, collectibleType: CollectibleType): void;
331
+ /**
332
+ * Helper function to see if a certain damage amount would deal "permanent" damage to Tainted
333
+ * Magdalene.
334
+ *
335
+ * Tainted Magdalene has "permanent" health and "temporary" health. When standing still and doing
336
+ * nothing, all of Tainted Magdalene's temporary health will eventually go away.
337
+ */
338
+ export declare function wouldDamageTaintedMagdaleneNonTemporaryHeartContainers(player: EntityPlayer, damageAmount: float): boolean;
331
339
  //# sourceMappingURL=players.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"players.d.ts","sourceRoot":"","sources":["../../src/functions/players.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"players.d.ts","sourceRoot":"","sources":["../../src/functions/players.ts"],"names":[],"mappings":"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"}
@@ -827,4 +827,25 @@ function ____exports.useActiveItemTemp(self, player, collectibleType)
827
827
  -1
828
828
  )
829
829
  end
830
+ --- Helper function to see if a certain damage amount would deal "permanent" damage to Tainted
831
+ -- Magdalene.
832
+ --
833
+ -- Tainted Magdalene has "permanent" health and "temporary" health. When standing still and doing
834
+ -- nothing, all of Tainted Magdalene's temporary health will eventually go away.
835
+ function ____exports.wouldDamageTaintedMagdaleneNonTemporaryHeartContainers(self, player, damageAmount)
836
+ local soulHearts = player:GetSoulHearts()
837
+ if soulHearts > 0 then
838
+ return false
839
+ end
840
+ local boneHearts = player:GetBoneHearts()
841
+ if boneHearts > 0 then
842
+ return false
843
+ end
844
+ local hearts = player:GetHearts()
845
+ local rottenHearts = player:GetRottenHearts()
846
+ local effectiveDamageAmount = damageAmount + math.min(rottenHearts, damageAmount)
847
+ local heartsAfterDamage = hearts - effectiveDamageAmount
848
+ local nonTemporaryMaxHearts = ____exports.getTaintedMagdaleneNonTemporaryMaxHearts(nil, player)
849
+ return heartsAfterDamage < nonTemporaryMaxHearts
850
+ end
830
851
  return ____exports
@@ -1,5 +1,4 @@
1
1
  import { RoomType } from "isaac-typescript-definitions";
2
- export declare const DEFAULT_ROOM_TYPE_NAME = "Unknown";
3
2
  export declare const ROOM_TYPE_NAMES: {
4
3
  readonly [key in RoomType]: string;
5
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"roomTypeNames.d.ts","sourceRoot":"","sources":["../../src/objects/roomTypeNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,eAAO,MAAM,eAAe,EAAE;IAAE,QAAQ,EAAE,GAAG,IAAI,QAAQ,GAAG,MAAM;CA8BxD,CAAC"}
1
+ {"version":3,"file":"roomTypeNames.d.ts","sourceRoot":"","sources":["../../src/objects/roomTypeNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,eAAO,MAAM,eAAe,EAAE;IAAE,QAAQ,EAAE,GAAG,IAAI,QAAQ,GAAG,MAAM;CA8BxD,CAAC"}
@@ -1,7 +1,6 @@
1
1
  local ____exports = {}
2
2
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
3
3
  local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
4
- ____exports.DEFAULT_ROOM_TYPE_NAME = "Unknown"
5
4
  ____exports.ROOM_TYPE_NAMES = {
6
5
  [RoomType.DEFAULT] = "default room",
7
6
  [RoomType.SHOP] = "shop",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "7.6.2",
3
+ "version": "7.8.0",
4
4
  "description": "Helper functions and features for IsaacScript mods.",
5
5
  "keywords": [
6
6
  "isaac",
@@ -9,7 +9,10 @@ import { game } from "../../core/cachedClasses";
9
9
  import { HealthType } from "../../enums/HealthType";
10
10
  import { directionToVector } from "../../functions/direction";
11
11
  import { spawnGridEntityWithVariant } from "../../functions/gridEntities";
12
- import { getRoomGridIndexesForType } from "../../functions/levelGrid";
12
+ import {
13
+ getRoomAdjacentGridIndexes,
14
+ getRoomGridIndexesForType,
15
+ } from "../../functions/levelGrid";
13
16
  import {
14
17
  logAllEntities,
15
18
  logAllGridEntities,
@@ -18,10 +21,7 @@ import { addPlayerHealthType } from "../../functions/playerHealth";
18
21
  import { getRoomData, getRoomDescriptor } from "../../functions/roomData";
19
22
  import { changeRoom } from "../../functions/rooms";
20
23
  import { printConsole } from "../../functions/utils";
21
- import {
22
- DEFAULT_ROOM_TYPE_NAME,
23
- ROOM_TYPE_NAMES,
24
- } from "../../objects/roomTypeNames";
24
+ import { ROOM_TYPE_NAMES } from "../../objects/roomTypeNames";
25
25
 
26
26
  const DEFAULT_MOVE_UNITS = 0.5;
27
27
 
@@ -127,10 +127,6 @@ export function spawnTrapdoorOrCrawlSpace(trapdoor: boolean): void {
127
127
 
128
128
  export function warpToRoomType(roomType: RoomType): void {
129
129
  const roomTypeName = ROOM_TYPE_NAMES[roomType];
130
- if (roomTypeName === DEFAULT_ROOM_TYPE_NAME) {
131
- printConsole(`Invalid room type: ${roomType}`);
132
- }
133
-
134
130
  const gridIndexes = getRoomGridIndexesForType(roomType);
135
131
  const firstGridIndex = gridIndexes[0];
136
132
  if (firstGridIndex === undefined) {
@@ -141,3 +137,28 @@ export function warpToRoomType(roomType: RoomType): void {
141
137
  changeRoom(firstGridIndex);
142
138
  printConsole(`Warped to room type: ${roomTypeName} (${roomType})`);
143
139
  }
140
+
141
+ export function warpNextToRoomType(roomType: RoomType): void {
142
+ const roomTypeName = ROOM_TYPE_NAMES[roomType];
143
+ const gridIndexes = getRoomGridIndexesForType(roomType);
144
+ const firstGridIndex = gridIndexes[0];
145
+ if (firstGridIndex === undefined) {
146
+ printConsole(`There are no ${roomTypeName}s on this floor.`);
147
+ return;
148
+ }
149
+
150
+ const adjacentRoomGridIndexes = getRoomAdjacentGridIndexes(firstGridIndex);
151
+
152
+ for (const [_doorSlot, roomGridIndex] of adjacentRoomGridIndexes.entries()) {
153
+ const roomData = getRoomData(roomGridIndex);
154
+ if (roomData !== undefined && roomData.Type === RoomType.DEFAULT) {
155
+ changeRoom(roomGridIndex);
156
+ printConsole(`Warped next to room type: ${roomTypeName} (${roomType})`);
157
+ return;
158
+ }
159
+ }
160
+
161
+ printConsole(
162
+ `Failed to find the room next to room type: ${roomTypeName} (${roomType})`,
163
+ );
164
+ }
@@ -46,6 +46,7 @@ function initMap() {
46
46
  );
47
47
  extraConsoleCommandsFunctionMap.set("bombs", commands.bombs);
48
48
  extraConsoleCommandsFunctionMap.set("boneHearts", commands.boneHearts);
49
+ extraConsoleCommandsFunctionMap.set("bossNextRoom", commands.bossNextRoom);
49
50
  extraConsoleCommandsFunctionMap.set("bossRoom", commands.bossRoom);
50
51
  extraConsoleCommandsFunctionMap.set("bossRush", commands.bossRush);
51
52
  extraConsoleCommandsFunctionMap.set("brokenHearts", commands.brokenHearts);
@@ -102,6 +102,7 @@ import {
102
102
  listGridEntities,
103
103
  movePlayer,
104
104
  spawnTrapdoorOrCrawlSpace,
105
+ warpNextToRoomType,
105
106
  warpToRoomType,
106
107
  } from "./commandsSubroutines";
107
108
  import v from "./v";
@@ -284,6 +285,11 @@ export function boneHearts(params: string): void {
284
285
  addHeart(params, HealthType.BONE);
285
286
  }
286
287
 
288
+ /** Warps to the room next to the first Boss Room on the floor. */
289
+ export function bossNextRoom(): void {
290
+ warpNextToRoomType(RoomType.BOSS);
291
+ }
292
+
287
293
  /** Warps to the first Boss Room on the floor. */
288
294
  export function bossRoom(): void {
289
295
  warpToRoomType(RoomType.BOSS);
@@ -9,6 +9,7 @@ import {
9
9
  RoomType,
10
10
  } from "isaac-typescript-definitions";
11
11
  import { game } from "../core/cachedClasses";
12
+ import { DISTANCE_OF_GRID_TILE } from "../core/constants";
12
13
  import {
13
14
  DEFAULT_DOOR_SLOT,
14
15
  DOOR_SLOT_FLAG_TO_DOOR_SLOT,
@@ -25,13 +26,6 @@ import { hasFlag } from "./flag";
25
26
  import { isTSTLSet } from "./tstlClass";
26
27
  import { asNumber } from "./types";
27
28
 
28
- /**
29
- * When players enter a room, they do not appear exactly on the location of the door, because then
30
- * they would immediately collide with the loading zone. Instead, they are offset by this amount of
31
- * units.
32
- */
33
- const ROOM_ENTRY_OFFSET_FROM_DOOR = 40;
34
-
35
29
  export function closeAllDoors(): void {
36
30
  for (const door of getDoors()) {
37
31
  door.Close(true);
@@ -123,8 +117,8 @@ export function getDevilRoomOrAngelRoomDoor(): GridEntityDoor | undefined {
123
117
  * Helper function to get the position that a player will enter a room at.
124
118
  *
125
119
  * When players enter a room, they do not appear exactly on the location of the door, because then
126
- * they would immediately collide with the loading zone. Instead, they are offset by a certain
127
- * amount of units.
120
+ * they would immediately collide with the loading zone. Instead, they appear on the grid tile next
121
+ * to the door.
128
122
  */
129
123
  export function getDoorEnterPosition(door: GridEntityDoor): Readonly<Vector> {
130
124
  const offset = getDoorSlotEnterPositionOffset(door.Slot);
@@ -135,8 +129,8 @@ export function getDoorEnterPosition(door: GridEntityDoor): Readonly<Vector> {
135
129
  * Helper function to get the offset from a door position that a player will enter a room at.
136
130
  *
137
131
  * When players enter a room, they do not appear exactly on the location of the door, because then
138
- * they would immediately collide with the loading zone. Instead, they are offset by a certain
139
- * amount of units.
132
+ * they would immediately collide with the loading zone. Instead, they appear on the grid tile next
133
+ * to the door.
140
134
  */
141
135
  export function getDoorSlotEnterPositionOffset(
142
136
  doorSlot: DoorSlot,
@@ -147,7 +141,7 @@ export function getDoorSlotEnterPositionOffset(
147
141
  // The player appears in the opposite direction of the way that the door is oriented in the room.
148
142
  const oppositeVector = vector.mul(-1);
149
143
 
150
- return oppositeVector.mul(ROOM_ENTRY_OFFSET_FROM_DOOR);
144
+ return oppositeVector.mul(DISTANCE_OF_GRID_TILE);
151
145
  }
152
146
 
153
147
  /** Helper function to get the possible door slots that can exist for a given room shape. */
@@ -47,7 +47,37 @@ const DOWN = LEVEL_GRID_ROW_WIDTH;
47
47
  const ADJACENT_ROOM_GRID_INDEX_DELTAS: readonly int[] = [LEFT, UP, RIGHT, DOWN];
48
48
 
49
49
  /**
50
- * Helper function to get the room grid indexes that are adjacent to a given room grid index.
50
+ * Helper function to get only the adjacent room grid indexes that exist (i.e. have room data).
51
+ *
52
+ * This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
53
+ * that function for more information.
54
+ */
55
+ export function getAdjacentExistingRoomGridIndexes(roomGridIndex?: int): int[] {
56
+ const adjacentRoomGridIndexes = getAdjacentRoomGridIndexes(roomGridIndex);
57
+ return adjacentRoomGridIndexes.filter(
58
+ (adjacentRoomGridIndex) => getRoomData(adjacentRoomGridIndex) !== undefined,
59
+ );
60
+ }
61
+
62
+ /**
63
+ * Helper function to get only the adjacent room grid indexes that do not exist (i.e. do not have
64
+ * room data).
65
+ *
66
+ * This is just a filtering of the results of the `getAdjacentExistingRoomGridIndexes` function. See
67
+ * that function for more information.
68
+ */
69
+ export function getAdjacentNonExistingRoomGridIndexes(
70
+ roomGridIndex?: int,
71
+ ): int[] {
72
+ const adjacentRoomGridIndexes = getAdjacentRoomGridIndexes(roomGridIndex);
73
+ return adjacentRoomGridIndexes.filter(
74
+ (adjacentRoomGridIndex) => getRoomData(adjacentRoomGridIndex) === undefined,
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Helper function to get all of the room grid indexes that are adjacent to a given room grid index
80
+ * (even if those room grid indexes do not have any rooms in them).
51
81
  *
52
82
  * Adjacent room grid indexes that are outside of the grid will not be included in the returned
53
83
  * array.
@@ -127,7 +157,7 @@ export function getNewRoomCandidatesBesideRoom(
127
157
  return [];
128
158
  }
129
159
 
130
- const doorSlotToRoomGridIndexes = getRoomShapeNeighborGridIndexes(
160
+ const doorSlotToRoomGridIndexes = getRoomShapeAdjacentNonExistingGridIndexes(
131
161
  roomDescriptor.SafeGridIndex,
132
162
  roomData.Shape,
133
163
  );
@@ -136,29 +166,24 @@ export function getNewRoomCandidatesBesideRoom(
136
166
 
137
167
  for (const [
138
168
  doorSlot,
139
- neighborRoomGridIndex,
169
+ adjacentRoomGridIndex,
140
170
  ] of doorSlotToRoomGridIndexes.entries()) {
141
- // The "getRoomShapeNeighborGridIndexes" returns grid indexes for every possible door, but the
142
- // real room we are examining will only have a subset of these doors. Thus, we have to exclude
143
- // neighbor grid indexes where it would not be possible to place a door.
171
+ // The "getRoomShapeAdjacentNonExistingGridIndexes" returns grid indexes for every possible
172
+ // door, but the real room we are examining will only have a subset of these doors. Thus, we
173
+ // have to exclude adjacent grid indexes where it would not be possible to place a door.
144
174
  const doorSlotFlag = doorSlotToDoorSlotFlag(doorSlot);
145
175
  if (!hasFlag(roomData.Doors, doorSlotFlag)) {
146
176
  continue;
147
177
  }
148
178
 
149
- // If the neighboring room already exists, then it is not a possible candidate for a new room.
150
- if (roomExists(neighborRoomGridIndex)) {
151
- continue;
152
- }
153
-
154
179
  // Check to see if hypothetically creating a room at the given room grid index would be a dead
155
180
  // end. In other words, if we created the room, we would only want it to connect to one other
156
181
  // room (this one).
157
- if (!isDeadEnd(neighborRoomGridIndex)) {
182
+ if (!isDeadEnd(adjacentRoomGridIndex)) {
158
183
  continue;
159
184
  }
160
185
 
161
- roomCandidates.push([doorSlot, neighborRoomGridIndex]);
186
+ roomCandidates.push([doorSlot, adjacentRoomGridIndex]);
162
187
  }
163
188
 
164
189
  return roomCandidates;
@@ -196,6 +221,36 @@ export function getNewRoomCandidatesForLevel(): Array<
196
221
  return newRoomCandidates;
197
222
  }
198
223
 
224
+ /**
225
+ * Helper function to get the grid indexes of all the rooms connected to the given room index,
226
+ * taking the shape of the room into account. (This will only include rooms with valid data.)
227
+ *
228
+ * Returns an empty map if the provided room grid index is out of bounds or has no associated room
229
+ * data.
230
+ *
231
+ * @param roomGridIndex Optional. Default is the current room index.
232
+ * @returns A map of `DoorSlot` to the corresponding room grid index.
233
+ */
234
+ export function getRoomAdjacentGridIndexes(
235
+ roomGridIndex?: int,
236
+ ): Map<DoorSlot, int> {
237
+ const roomDescriptor = getRoomDescriptor(roomGridIndex);
238
+
239
+ if (!isRoomInsideGrid(roomDescriptor.SafeGridIndex)) {
240
+ return new Map();
241
+ }
242
+
243
+ const roomData = roomDescriptor.Data;
244
+ if (roomData === undefined) {
245
+ return new Map();
246
+ }
247
+
248
+ return getRoomShapeAdjacentExistingGridIndexes(
249
+ roomDescriptor.SafeGridIndex,
250
+ roomData.Shape,
251
+ );
252
+ }
253
+
199
254
  /**
200
255
  * Helper function to get an array of all of the safe grid indexes for rooms that match the
201
256
  * specified room type.
@@ -219,57 +274,43 @@ export function getRoomGridIndexesForType(...roomTypes: RoomType[]): int[] {
219
274
  }
220
275
 
221
276
  /**
222
- * Helper function to get the grid indexes of all the rooms connected to the given room index,
223
- * taking the shape of the room into account. (This will only include rooms with valid data.)
224
- *
225
- * Returns an empty map if the provided room grid index is out of bounds or has no associated room
226
- * data.
277
+ * Helper function to get only the adjacent room grid indexes for a room shape that exist (i.e. have
278
+ * room data).
227
279
  *
228
- * @param roomGridIndex Optional. Default is the current room index.
229
- * @returns A map of `DoorSlot` to the corresponding room grid index.
280
+ * This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
281
+ * that function for more information.
230
282
  */
231
- export function getRoomNeighbors(roomGridIndex?: int): Map<DoorSlot, int> {
232
- const roomDescriptor = getRoomDescriptor(roomGridIndex);
233
-
234
- if (!isRoomInsideGrid(roomDescriptor.SafeGridIndex)) {
235
- return new Map();
236
- }
237
-
238
- const roomData = roomDescriptor.Data;
239
- if (roomData === undefined) {
240
- return new Map();
241
- }
242
-
243
- const doorSlotToRoomGridIndexes = getRoomShapeNeighborGridIndexes(
244
- roomDescriptor.SafeGridIndex,
245
- roomData.Shape,
283
+ export function getRoomShapeAdjacentExistingGridIndexes(
284
+ safeRoomGridIndex: int,
285
+ roomShape: RoomShape,
286
+ ): Map<DoorSlot, int> {
287
+ const roomShapeAdjacentGridIndexes = getRoomShapeAdjacentGridIndexes(
288
+ safeRoomGridIndex,
289
+ roomShape,
246
290
  );
247
291
 
248
- // The "getRoomShapeNeighborGridIndexes" returns grid indexes for every possible door, but the
249
- // real room we are examining will only have a subset of these doors. However, we do not have to
250
- // worry about filtering the map, since we perform a room existence check below.
251
- const roomNeighbors = new Map<DoorSlot, int>();
252
292
  for (const [
253
293
  doorSlot,
254
- neighborRoomGridIndex,
255
- ] of doorSlotToRoomGridIndexes.entries()) {
256
- if (roomExists(neighborRoomGridIndex)) {
257
- roomNeighbors.set(doorSlot, neighborRoomGridIndex);
294
+ roomGridIndex,
295
+ ] of roomShapeAdjacentGridIndexes.entries()) {
296
+ const roomData = getRoomData(roomGridIndex);
297
+ if (roomData === undefined) {
298
+ roomShapeAdjacentGridIndexes.delete(doorSlot);
258
299
  }
259
300
  }
260
301
 
261
- return roomNeighbors;
302
+ return roomShapeAdjacentGridIndexes;
262
303
  }
263
304
 
264
305
  /**
265
306
  * Helper function to get the room grid index delta that each hypothetical door in a given room
266
307
  * shape would go to.
267
308
  *
268
- * This is used by the `getRoomShapeNeighborGridIndexes` function.
309
+ * This is used by the `getRoomShapeAdjacentGridIndexes` function.
269
310
  *
270
311
  * @returns A map of `DoorSlot` to the corresponding room grid index delta.
271
312
  */
272
- export function getRoomShapeNeighborGridIndexDeltas(
313
+ export function getRoomShapeAdjacentGridIndexDeltas(
273
314
  roomShape: RoomShape,
274
315
  ): Map<DoorSlot, int> {
275
316
  return ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA[roomShape];
@@ -284,22 +325,51 @@ export function getRoomShapeNeighborGridIndexDeltas(
284
325
  * @param roomShape The shape of the room.
285
326
  * @returns A map of `DoorSlot` to the corresponding room grid index.
286
327
  */
287
- export function getRoomShapeNeighborGridIndexes(
328
+ export function getRoomShapeAdjacentGridIndexes(
288
329
  safeRoomGridIndex: int,
289
330
  roomShape: RoomShape,
290
331
  ): Map<DoorSlot, int> {
291
- const roomShapeNeighborGridIndexDeltas =
292
- getRoomShapeNeighborGridIndexDeltas(roomShape);
332
+ const roomShapeAdjacentGridIndexDeltas =
333
+ getRoomShapeAdjacentGridIndexDeltas(roomShape);
293
334
 
294
- const neighborGridIndexes = new Map<DoorSlot, int>();
295
- for (const [doorSlot, delta] of roomShapeNeighborGridIndexDeltas.entries()) {
335
+ const adjacentGridIndexes = new Map<DoorSlot, int>();
336
+ for (const [doorSlot, delta] of roomShapeAdjacentGridIndexDeltas.entries()) {
296
337
  const roomGridIndex = safeRoomGridIndex + delta;
297
338
  if (isRoomInsideGrid(roomGridIndex)) {
298
- neighborGridIndexes.set(doorSlot, roomGridIndex);
339
+ adjacentGridIndexes.set(doorSlot, roomGridIndex);
340
+ }
341
+ }
342
+
343
+ return adjacentGridIndexes;
344
+ }
345
+
346
+ /**
347
+ * Helper function to get only the adjacent room grid indexes for a room shape that do not exist
348
+ * (i.e. do not have room data).
349
+ *
350
+ * This is just a filtering of the results of the `getRoomShapeAdjacentGridIndexes` function. See
351
+ * that function for more information.
352
+ */
353
+ export function getRoomShapeAdjacentNonExistingGridIndexes(
354
+ safeRoomGridIndex: int,
355
+ roomShape: RoomShape,
356
+ ): Map<DoorSlot, int> {
357
+ const roomShapeAdjacentGridIndexes = getRoomShapeAdjacentGridIndexes(
358
+ safeRoomGridIndex,
359
+ roomShape,
360
+ );
361
+
362
+ for (const [
363
+ doorSlot,
364
+ roomGridIndex,
365
+ ] of roomShapeAdjacentGridIndexes.entries()) {
366
+ const roomData = getRoomData(roomGridIndex);
367
+ if (roomData !== undefined) {
368
+ roomShapeAdjacentGridIndexes.delete(doorSlot);
299
369
  }
300
370
  }
301
371
 
302
- return neighborGridIndexes;
372
+ return roomShapeAdjacentGridIndexes;
303
373
  }
304
374
 
305
375
  /**
@@ -315,15 +385,10 @@ export function getRoomShapeNeighborGridIndexes(
315
385
  * @param roomGridIndex Optional. Default is the current room index.
316
386
  */
317
387
  export function isDeadEnd(roomGridIndex?: int): boolean {
318
- const adjacentRoomGridIndexes = getAdjacentRoomGridIndexes(roomGridIndex);
319
- const adjacentRoomData = adjacentRoomGridIndexes.map(
320
- (adjacentRoomGridIndex) => getRoomData(adjacentRoomGridIndex),
321
- );
322
- const existingRoomData = adjacentRoomData.filter(
323
- (data): data is RoomConfig => data !== undefined,
324
- );
388
+ const adjacentNonExistingRoomGridIndexes =
389
+ getAdjacentNonExistingRoomGridIndexes(roomGridIndex);
325
390
 
326
- return existingRoomData.length === 1;
391
+ return adjacentNonExistingRoomGridIndexes.length === 1;
327
392
  }
328
393
 
329
394
  export function isDoorSlotValidAtGridIndex(
@@ -1058,3 +1058,40 @@ export function useActiveItemTemp(
1058
1058
  ): void {
1059
1059
  player.UseActiveItem(collectibleType, false, false, true, false, -1);
1060
1060
  }
1061
+
1062
+ /**
1063
+ * Helper function to see if a certain damage amount would deal "permanent" damage to Tainted
1064
+ * Magdalene.
1065
+ *
1066
+ * Tainted Magdalene has "permanent" health and "temporary" health. When standing still and doing
1067
+ * nothing, all of Tainted Magdalene's temporary health will eventually go away.
1068
+ */
1069
+ export function wouldDamageTaintedMagdaleneNonTemporaryHeartContainers(
1070
+ player: EntityPlayer,
1071
+ damageAmount: float,
1072
+ ): boolean {
1073
+ // Regardless of the damage amount, damage to a player cannot remove a soul heart and a red heart
1074
+ // at the same time.
1075
+ const soulHearts = player.GetSoulHearts();
1076
+ if (soulHearts > 0) {
1077
+ return false;
1078
+ }
1079
+
1080
+ // Regardless of the damage amount, damage to a player cannot remove a bone heart and a red heart
1081
+ // at the same time.
1082
+ const boneHearts = player.GetBoneHearts();
1083
+ if (boneHearts > 0) {
1084
+ return false;
1085
+ }
1086
+
1087
+ // Account for rotten hearts eating away at more red hearts than usual.
1088
+ const hearts = player.GetHearts();
1089
+ const rottenHearts = player.GetRottenHearts();
1090
+ const effectiveDamageAmount =
1091
+ damageAmount + Math.min(rottenHearts, damageAmount);
1092
+
1093
+ const heartsAfterDamage = hearts - effectiveDamageAmount;
1094
+ const nonTemporaryMaxHearts =
1095
+ getTaintedMagdaleneNonTemporaryMaxHearts(player);
1096
+ return heartsAfterDamage < nonTemporaryMaxHearts;
1097
+ }
@@ -1,7 +1,5 @@
1
1
  import { RoomType } from "isaac-typescript-definitions";
2
2
 
3
- export const DEFAULT_ROOM_TYPE_NAME = "Unknown";
4
-
5
3
  export const ROOM_TYPE_NAMES: { readonly [key in RoomType]: string } = {
6
4
  [RoomType.DEFAULT]: "default room", // 1
7
5
  [RoomType.SHOP]: "shop", // 2