isaacscript-common 6.0.1 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/callbacks/postCollectibleEmpty.d.ts +1 -0
  2. package/callbacks/postCollectibleEmpty.lua +40 -0
  3. package/callbacks/subscriptions/postCollectibleEmpty.d.ts +5 -0
  4. package/callbacks/subscriptions/postCollectibleEmpty.lua +29 -0
  5. package/classes/DefaultMap.lua +2 -2
  6. package/enums/ModCallbackCustom.d.ts +92 -77
  7. package/enums/ModCallbackCustom.lua +79 -77
  8. package/features/customStage/exports.d.ts +3 -9
  9. package/features/customStage/exports.lua +86 -15
  10. package/features/customStage/init.d.ts +1 -0
  11. package/features/customStage/init.lua +48 -0
  12. package/features/customStage/metadata.lua +1 -0
  13. package/features/customStage/util.d.ts +11 -0
  14. package/features/customStage/util.lua +51 -0
  15. package/features/customStage/v.d.ts +6 -2
  16. package/features/customStage/v.lua +4 -1
  17. package/features/deployJSONRoom.d.ts +1 -1
  18. package/functions/boss.d.ts +2 -2
  19. package/functions/doors.d.ts +4 -0
  20. package/functions/doors.lua +14 -0
  21. package/functions/entity.d.ts +2 -2
  22. package/functions/entitySpecific.d.ts +20 -20
  23. package/functions/familiars.d.ts +2 -0
  24. package/functions/familiars.lua +16 -0
  25. package/functions/jsonRoom.d.ts +26 -4
  26. package/functions/jsonRoom.lua +64 -2
  27. package/functions/pickups.d.ts +16 -16
  28. package/functions/playerCenter.d.ts +6 -0
  29. package/functions/playerCenter.lua +57 -0
  30. package/functions/rooms.d.ts +1 -1
  31. package/functions/rooms.lua +2 -2
  32. package/functions/stage.d.ts +3 -3
  33. package/functions/stage.lua +5 -4
  34. package/functions/trinkets.lua +1 -1
  35. package/index.d.ts +1 -5
  36. package/initCustomCallbacks.lua +3 -0
  37. package/initFeatures.lua +3 -0
  38. package/interfaces/AddCallbackParameterCustom.d.ts +2 -0
  39. package/interfaces/CustomStage.d.ts +10 -0
  40. package/interfaces/{CustomStageData.lua → CustomStage.lua} +0 -0
  41. package/interfaces/CustomStageLua.d.ts +118 -0
  42. package/interfaces/{JSONDoor.lua → CustomStageLua.lua} +0 -0
  43. package/interfaces/JSONRoomsFile.d.ts +75 -0
  44. package/interfaces/{JSONEntity.lua → JSONRoomsFile.lua} +0 -0
  45. package/objects/callbackRegisterFunctions.lua +3 -0
  46. package/objects/roomTypeGotoPrefixes.lua +29 -29
  47. package/package.json +1 -1
  48. package/features/customStage/constants.d.ts +0 -18
  49. package/features/customStage/constants.lua +0 -29
  50. package/features/customStage/scripts/generateCustomStageRooms.d.ts +0 -27
  51. package/features/customStage/scripts/generateCustomStageRooms.lua +0 -126
  52. package/interfaces/CustomStageData.d.ts +0 -5
  53. package/interfaces/JSONDoor.d.ts +0 -11
  54. package/interfaces/JSONEntity.d.ts +0 -13
  55. package/interfaces/JSONRoom.d.ts +0 -26
  56. package/interfaces/JSONRoom.lua +0 -2
  57. package/interfaces/JSONRooms.d.ts +0 -11
  58. package/interfaces/JSONRooms.lua +0 -2
  59. package/interfaces/JSONSpawn.d.ts +0 -11
  60. package/interfaces/JSONSpawn.lua +0 -2
@@ -16,158 +16,160 @@ ____exports.ModCallbackCustom.POST_BOMB_INIT_LATE = 3
16
16
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BOMB_INIT_LATE] = "POST_BOMB_INIT_LATE"
17
17
  ____exports.ModCallbackCustom.POST_BONE_SWING = 4
18
18
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_BONE_SWING] = "POST_BONE_SWING"
19
- ____exports.ModCallbackCustom.POST_COLLECTIBLE_INIT_FIRST = 5
19
+ ____exports.ModCallbackCustom.POST_COLLECTIBLE_EMPTY = 5
20
+ ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_COLLECTIBLE_EMPTY] = "POST_COLLECTIBLE_EMPTY"
21
+ ____exports.ModCallbackCustom.POST_COLLECTIBLE_INIT_FIRST = 6
20
22
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_COLLECTIBLE_INIT_FIRST] = "POST_COLLECTIBLE_INIT_FIRST"
21
- ____exports.ModCallbackCustom.POST_CURSED_TELEPORT = 6
23
+ ____exports.ModCallbackCustom.POST_CURSED_TELEPORT = 7
22
24
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_CURSED_TELEPORT] = "POST_CURSED_TELEPORT"
23
- ____exports.ModCallbackCustom.POST_CUSTOM_DOOR_ENTER = 7
25
+ ____exports.ModCallbackCustom.POST_CUSTOM_DOOR_ENTER = 8
24
26
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_CUSTOM_DOOR_ENTER] = "POST_CUSTOM_DOOR_ENTER"
25
- ____exports.ModCallbackCustom.POST_CUSTOM_REVIVE = 8
27
+ ____exports.ModCallbackCustom.POST_CUSTOM_REVIVE = 9
26
28
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_CUSTOM_REVIVE] = "POST_CUSTOM_REVIVE"
27
- ____exports.ModCallbackCustom.POST_DICE_ROOM_ACTIVATED = 9
29
+ ____exports.ModCallbackCustom.POST_DICE_ROOM_ACTIVATED = 10
28
30
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_DICE_ROOM_ACTIVATED] = "POST_DICE_ROOM_ACTIVATED"
29
- ____exports.ModCallbackCustom.POST_DOOR_RENDER = 10
31
+ ____exports.ModCallbackCustom.POST_DOOR_RENDER = 11
30
32
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_DOOR_RENDER] = "POST_DOOR_RENDER"
31
- ____exports.ModCallbackCustom.POST_DOOR_UPDATE = 11
33
+ ____exports.ModCallbackCustom.POST_DOOR_UPDATE = 12
32
34
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_DOOR_UPDATE] = "POST_DOOR_UPDATE"
33
- ____exports.ModCallbackCustom.POST_EFFECT_INIT_LATE = 12
35
+ ____exports.ModCallbackCustom.POST_EFFECT_INIT_LATE = 13
34
36
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_EFFECT_INIT_LATE] = "POST_EFFECT_INIT_LATE"
35
- ____exports.ModCallbackCustom.POST_EFFECT_STATE_CHANGED = 13
37
+ ____exports.ModCallbackCustom.POST_EFFECT_STATE_CHANGED = 14
36
38
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_EFFECT_STATE_CHANGED] = "POST_EFFECT_STATE_CHANGED"
37
- ____exports.ModCallbackCustom.POST_ESAU_JR = 14
39
+ ____exports.ModCallbackCustom.POST_ESAU_JR = 15
38
40
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ESAU_JR] = "POST_ESAU_JR"
39
- ____exports.ModCallbackCustom.POST_FAMILIAR_INIT_LATE = 15
41
+ ____exports.ModCallbackCustom.POST_FAMILIAR_INIT_LATE = 16
40
42
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FAMILIAR_INIT_LATE] = "POST_FAMILIAR_INIT_LATE"
41
- ____exports.ModCallbackCustom.POST_FAMILIAR_STATE_CHANGED = 16
43
+ ____exports.ModCallbackCustom.POST_FAMILIAR_STATE_CHANGED = 17
42
44
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FAMILIAR_STATE_CHANGED] = "POST_FAMILIAR_STATE_CHANGED"
43
- ____exports.ModCallbackCustom.POST_FIRST_ESAU_JR = 17
45
+ ____exports.ModCallbackCustom.POST_FIRST_ESAU_JR = 18
44
46
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FIRST_ESAU_JR] = "POST_FIRST_ESAU_JR"
45
- ____exports.ModCallbackCustom.POST_FIRST_FLIP = 18
47
+ ____exports.ModCallbackCustom.POST_FIRST_FLIP = 19
46
48
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FIRST_FLIP] = "POST_FIRST_FLIP"
47
- ____exports.ModCallbackCustom.POST_FLIP = 19
49
+ ____exports.ModCallbackCustom.POST_FLIP = 20
48
50
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FLIP] = "POST_FLIP"
49
- ____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED = 20
51
+ ____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED = 21
50
52
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED] = "POST_GAME_STARTED_REORDERED"
51
- ____exports.ModCallbackCustom.POST_GREED_MODE_WAVE = 21
53
+ ____exports.ModCallbackCustom.POST_GREED_MODE_WAVE = 22
52
54
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GREED_MODE_WAVE] = "POST_GREED_MODE_WAVE"
53
- ____exports.ModCallbackCustom.POST_GRID_ENTITY_BROKEN = 22
55
+ ____exports.ModCallbackCustom.POST_GRID_ENTITY_BROKEN = 23
54
56
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_BROKEN] = "POST_GRID_ENTITY_BROKEN"
55
- ____exports.ModCallbackCustom.POST_GRID_ENTITY_COLLISION = 23
57
+ ____exports.ModCallbackCustom.POST_GRID_ENTITY_COLLISION = 24
56
58
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_COLLISION] = "POST_GRID_ENTITY_COLLISION"
57
- ____exports.ModCallbackCustom.POST_GRID_ENTITY_INIT = 24
59
+ ____exports.ModCallbackCustom.POST_GRID_ENTITY_INIT = 25
58
60
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_INIT] = "POST_GRID_ENTITY_INIT"
59
- ____exports.ModCallbackCustom.POST_GRID_ENTITY_REMOVE = 25
61
+ ____exports.ModCallbackCustom.POST_GRID_ENTITY_REMOVE = 26
60
62
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_REMOVE] = "POST_GRID_ENTITY_REMOVE"
61
- ____exports.ModCallbackCustom.POST_GRID_ENTITY_RENDER = 26
63
+ ____exports.ModCallbackCustom.POST_GRID_ENTITY_RENDER = 27
62
64
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_RENDER] = "POST_GRID_ENTITY_RENDER"
63
- ____exports.ModCallbackCustom.POST_GRID_ENTITY_STATE_CHANGED = 27
65
+ ____exports.ModCallbackCustom.POST_GRID_ENTITY_STATE_CHANGED = 28
64
66
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_STATE_CHANGED] = "POST_GRID_ENTITY_STATE_CHANGED"
65
- ____exports.ModCallbackCustom.POST_GRID_ENTITY_UPDATE = 28
67
+ ____exports.ModCallbackCustom.POST_GRID_ENTITY_UPDATE = 29
66
68
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_GRID_ENTITY_UPDATE] = "POST_GRID_ENTITY_UPDATE"
67
- ____exports.ModCallbackCustom.POST_HOLY_MANTLE_REMOVED = 29
69
+ ____exports.ModCallbackCustom.POST_HOLY_MANTLE_REMOVED = 30
68
70
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_HOLY_MANTLE_REMOVED] = "POST_HOLY_MANTLE_REMOVED"
69
- ____exports.ModCallbackCustom.POST_ITEM_DISCHARGE = 30
71
+ ____exports.ModCallbackCustom.POST_ITEM_DISCHARGE = 31
70
72
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ITEM_DISCHARGE] = "POST_ITEM_DISCHARGE"
71
- ____exports.ModCallbackCustom.POST_ITEM_PICKUP = 31
73
+ ____exports.ModCallbackCustom.POST_ITEM_PICKUP = 32
72
74
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ITEM_PICKUP] = "POST_ITEM_PICKUP"
73
- ____exports.ModCallbackCustom.POST_KNIFE_INIT_LATE = 32
75
+ ____exports.ModCallbackCustom.POST_KNIFE_INIT_LATE = 33
74
76
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_KNIFE_INIT_LATE] = "POST_KNIFE_INIT_LATE"
75
- ____exports.ModCallbackCustom.POST_LASER_INIT_LATE = 33
77
+ ____exports.ModCallbackCustom.POST_LASER_INIT_LATE = 34
76
78
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_LASER_INIT_LATE] = "POST_LASER_INIT_LATE"
77
- ____exports.ModCallbackCustom.POST_NEW_LEVEL_REORDERED = 34
79
+ ____exports.ModCallbackCustom.POST_NEW_LEVEL_REORDERED = 35
78
80
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NEW_LEVEL_REORDERED] = "POST_NEW_LEVEL_REORDERED"
79
- ____exports.ModCallbackCustom.POST_NEW_ROOM_EARLY = 35
81
+ ____exports.ModCallbackCustom.POST_NEW_ROOM_EARLY = 36
80
82
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NEW_ROOM_EARLY] = "POST_NEW_ROOM_EARLY"
81
- ____exports.ModCallbackCustom.POST_NEW_ROOM_REORDERED = 36
83
+ ____exports.ModCallbackCustom.POST_NEW_ROOM_REORDERED = 37
82
84
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NEW_ROOM_REORDERED] = "POST_NEW_ROOM_REORDERED"
83
- ____exports.ModCallbackCustom.POST_NPC_INIT_LATE = 37
85
+ ____exports.ModCallbackCustom.POST_NPC_INIT_LATE = 38
84
86
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_INIT_LATE] = "POST_NPC_INIT_LATE"
85
- ____exports.ModCallbackCustom.POST_NPC_STATE_CHANGED = 38
87
+ ____exports.ModCallbackCustom.POST_NPC_STATE_CHANGED = 39
86
88
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_NPC_STATE_CHANGED] = "POST_NPC_STATE_CHANGED"
87
- ____exports.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED = 39
89
+ ____exports.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED = 40
88
90
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED] = "POST_PEFFECT_UPDATE_REORDERED"
89
- ____exports.ModCallbackCustom.POST_PICKUP_COLLECT = 40
91
+ ____exports.ModCallbackCustom.POST_PICKUP_COLLECT = 41
90
92
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_COLLECT] = "POST_PICKUP_COLLECT"
91
- ____exports.ModCallbackCustom.POST_PICKUP_INIT_FIRST = 41
93
+ ____exports.ModCallbackCustom.POST_PICKUP_INIT_FIRST = 42
92
94
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_INIT_FIRST] = "POST_PICKUP_INIT_FIRST"
93
- ____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE = 42
95
+ ____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE = 43
94
96
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE] = "POST_PICKUP_INIT_LATE"
95
- ____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED = 43
97
+ ____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED = 44
96
98
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED] = "POST_PICKUP_STATE_CHANGED"
97
- ____exports.ModCallbackCustom.POST_PIT_RENDER = 44
99
+ ____exports.ModCallbackCustom.POST_PIT_RENDER = 45
98
100
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PIT_RENDER] = "POST_PIT_RENDER"
99
- ____exports.ModCallbackCustom.POST_PIT_UPDATE = 45
101
+ ____exports.ModCallbackCustom.POST_PIT_UPDATE = 46
100
102
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PIT_UPDATE] = "POST_PIT_UPDATE"
101
- ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH = 46
103
+ ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH = 47
102
104
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH] = "POST_PLAYER_CHANGE_HEALTH"
103
- ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE = 47
105
+ ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE = 48
104
106
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE] = "POST_PLAYER_CHANGE_TYPE"
105
- ____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED = 48
107
+ ____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED = 49
106
108
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED] = "POST_PLAYER_COLLECTIBLE_ADDED"
107
- ____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED = 49
109
+ ____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED = 50
108
110
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED] = "POST_PLAYER_COLLECTIBLE_REMOVED"
109
- ____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE = 50
111
+ ____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE = 51
110
112
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE] = "POST_PLAYER_FATAL_DAMAGE"
111
- ____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE = 51
113
+ ____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE = 52
112
114
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE] = "POST_PLAYER_INIT_LATE"
113
- ____exports.ModCallbackCustom.POST_PLAYER_INIT_REORDERED = 52
115
+ ____exports.ModCallbackCustom.POST_PLAYER_INIT_REORDERED = 53
114
116
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_INIT_REORDERED] = "POST_PLAYER_INIT_REORDERED"
115
- ____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED = 53
117
+ ____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED = 54
116
118
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED] = "POST_PLAYER_RENDER_REORDERED"
117
- ____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED = 54
119
+ ____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED = 55
118
120
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED] = "POST_PLAYER_UPDATE_REORDERED"
119
- ____exports.ModCallbackCustom.POST_POOP_RENDER = 55
121
+ ____exports.ModCallbackCustom.POST_POOP_RENDER = 56
120
122
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_POOP_RENDER] = "POST_POOP_RENDER"
121
- ____exports.ModCallbackCustom.POST_POOP_UPDATE = 56
123
+ ____exports.ModCallbackCustom.POST_POOP_UPDATE = 57
122
124
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_POOP_UPDATE] = "POST_POOP_UPDATE"
123
- ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER = 57
125
+ ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER = 58
124
126
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER] = "POST_PRESSURE_PLATE_RENDER"
125
- ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE = 58
127
+ ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE = 59
126
128
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE] = "POST_PRESSURE_PLATE_UPDATE"
127
- ____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE = 59
129
+ ____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE = 60
128
130
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE] = "POST_PROJECTILE_INIT_LATE"
129
- ____exports.ModCallbackCustom.POST_PURCHASE = 60
131
+ ____exports.ModCallbackCustom.POST_PURCHASE = 61
130
132
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PURCHASE] = "POST_PURCHASE"
131
- ____exports.ModCallbackCustom.POST_ROCK_RENDER = 61
133
+ ____exports.ModCallbackCustom.POST_ROCK_RENDER = 62
132
134
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROCK_RENDER] = "POST_ROCK_RENDER"
133
- ____exports.ModCallbackCustom.POST_ROCK_UPDATE = 62
135
+ ____exports.ModCallbackCustom.POST_ROCK_UPDATE = 63
134
136
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROCK_UPDATE] = "POST_ROCK_UPDATE"
135
- ____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED = 63
137
+ ____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED = 64
136
138
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED] = "POST_ROOM_CLEAR_CHANGED"
137
- ____exports.ModCallbackCustom.POST_SACRIFICE = 64
139
+ ____exports.ModCallbackCustom.POST_SACRIFICE = 65
138
140
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SACRIFICE] = "POST_SACRIFICE"
139
- ____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED = 65
141
+ ____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED = 66
140
142
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED] = "POST_SLOT_ANIMATION_CHANGED"
141
- ____exports.ModCallbackCustom.POST_SLOT_DESTROYED = 66
143
+ ____exports.ModCallbackCustom.POST_SLOT_DESTROYED = 67
142
144
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_DESTROYED] = "POST_SLOT_DESTROYED"
143
- ____exports.ModCallbackCustom.POST_SLOT_INIT = 67
145
+ ____exports.ModCallbackCustom.POST_SLOT_INIT = 68
144
146
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_INIT] = "POST_SLOT_INIT"
145
- ____exports.ModCallbackCustom.POST_SLOT_RENDER = 68
147
+ ____exports.ModCallbackCustom.POST_SLOT_RENDER = 69
146
148
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_RENDER] = "POST_SLOT_RENDER"
147
- ____exports.ModCallbackCustom.POST_SLOT_UPDATE = 69
149
+ ____exports.ModCallbackCustom.POST_SLOT_UPDATE = 70
148
150
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_UPDATE] = "POST_SLOT_UPDATE"
149
- ____exports.ModCallbackCustom.POST_SPIKES_RENDER = 70
151
+ ____exports.ModCallbackCustom.POST_SPIKES_RENDER = 71
150
152
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SPIKES_RENDER] = "POST_SPIKES_RENDER"
151
- ____exports.ModCallbackCustom.POST_SPIKES_UPDATE = 71
153
+ ____exports.ModCallbackCustom.POST_SPIKES_UPDATE = 72
152
154
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SPIKES_UPDATE] = "POST_SPIKES_UPDATE"
153
- ____exports.ModCallbackCustom.POST_TEAR_INIT_LATE = 72
155
+ ____exports.ModCallbackCustom.POST_TEAR_INIT_LATE = 73
154
156
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_INIT_LATE] = "POST_TEAR_INIT_LATE"
155
- ____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE = 73
157
+ ____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE = 74
156
158
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE] = "POST_TEAR_INIT_VERY_LATE"
157
- ____exports.ModCallbackCustom.POST_TNT_RENDER = 74
159
+ ____exports.ModCallbackCustom.POST_TNT_RENDER = 75
158
160
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TNT_RENDER] = "POST_TNT_RENDER"
159
- ____exports.ModCallbackCustom.POST_TNT_UPDATE = 75
161
+ ____exports.ModCallbackCustom.POST_TNT_UPDATE = 76
160
162
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TNT_UPDATE] = "POST_TNT_UPDATE"
161
- ____exports.ModCallbackCustom.POST_TRANSFORMATION = 76
163
+ ____exports.ModCallbackCustom.POST_TRANSFORMATION = 77
162
164
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TRANSFORMATION] = "POST_TRANSFORMATION"
163
- ____exports.ModCallbackCustom.POST_TRINKET_BREAK = 77
165
+ ____exports.ModCallbackCustom.POST_TRINKET_BREAK = 78
164
166
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TRINKET_BREAK] = "POST_TRINKET_BREAK"
165
- ____exports.ModCallbackCustom.PRE_BERSERK_DEATH = 78
167
+ ____exports.ModCallbackCustom.PRE_BERSERK_DEATH = 79
166
168
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_BERSERK_DEATH] = "PRE_BERSERK_DEATH"
167
- ____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE = 79
169
+ ____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE = 80
168
170
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE] = "PRE_CUSTOM_REVIVE"
169
- ____exports.ModCallbackCustom.PRE_ITEM_PICKUP = 80
171
+ ____exports.ModCallbackCustom.PRE_ITEM_PICKUP = 81
170
172
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_ITEM_PICKUP] = "PRE_ITEM_PICKUP"
171
- ____exports.ModCallbackCustom.PRE_NEW_LEVEL = 81
173
+ ____exports.ModCallbackCustom.PRE_NEW_LEVEL = 82
172
174
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_NEW_LEVEL] = "PRE_NEW_LEVEL"
173
175
  return ____exports
@@ -1,13 +1,7 @@
1
- import { LevelStage } from "isaac-typescript-definitions";
2
- import { JSONRoom } from "../../interfaces/JSONRoom";
3
- /**
4
- * Helper function to register a new custom stage with the IsaacScript standard library stage
5
- * system.
6
- */
7
- export declare function registerCustomStage(name: string, baseStage: LevelStage, jsonRooms: JSONRoom[] | readonly JSONRoom[]): void;
8
1
  /**
9
2
  * Helper function to warp to a custom stage/level.
10
3
  *
11
- * Custom stages/levels must first be registered with the `registerCustomStage` function.
4
+ * Custom stages/levels must first be defined in the "tsconfig.json" file. See the documentation for
5
+ * more details: https://isaacscript.github.io/main/custom-stages/
12
6
  */
13
- export declare function setCustomStage(_name: string): void;
7
+ export declare function setCustomStage(name: string, verbose?: boolean): void;
@@ -1,23 +1,94 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local Map = ____lualib.Map
3
3
  local ____exports = {}
4
+ local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
5
+ local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
6
+ local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
7
+ local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
8
+ local RoomTransitionAnim = ____isaac_2Dtypescript_2Ddefinitions.RoomTransitionAnim
9
+ local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
10
+ local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
11
+ local ____cachedClasses = require("cachedClasses")
12
+ local game = ____cachedClasses.game
13
+ local ____log = require("functions.log")
14
+ local logError = ____log.logError
15
+ local ____rng = require("functions.rng")
16
+ local newRNG = ____rng.newRNG
17
+ local ____roomData = require("functions.roomData")
18
+ local getRoomData = ____roomData.getRoomData
19
+ local ____rooms = require("functions.rooms")
20
+ local getRooms = ____rooms.getRooms
21
+ local ____stage = require("functions.stage")
22
+ local getGotoCommand = ____stage.getGotoCommand
23
+ local setStage = ____stage.setStage
24
+ local ____util = require("features.customStage.util")
25
+ local getRandomCustomStageRoom = ____util.getRandomCustomStageRoom
4
26
  local ____v = require("features.customStage.v")
5
- local customStages = ____v.customStages
6
- --- Helper function to register a new custom stage with the IsaacScript standard library stage
7
- -- system.
8
- function ____exports.registerCustomStage(self, name, baseStage, jsonRooms)
9
- if customStages:has(name) then
10
- error(("Failed to register a custom stage of \"" .. name) .. "\" since there is already a custom stage registered by that name.")
11
- end
12
- if #jsonRooms == 0 then
13
- error(("Failed to register a custom stage of \"" .. name) .. "\" since the provided JSON room array was empty.")
14
- end
15
- local customStageData = {name = name, baseStage = baseStage}
16
- customStages:set(name, customStageData)
17
- end
27
+ local customStageCachedRoomData = ____v.customStageCachedRoomData
28
+ local customStagesMap = ____v.customStagesMap
18
29
  --- Helper function to warp to a custom stage/level.
19
30
  --
20
- -- Custom stages/levels must first be registered with the `registerCustomStage` function.
21
- function ____exports.setCustomStage(self, _name)
31
+ -- Custom stages/levels must first be defined in the "tsconfig.json" file. See the documentation for
32
+ -- more details: https://isaacscript.github.io/main/custom-stages/
33
+ function ____exports.setCustomStage(self, name, verbose)
34
+ if verbose == nil then
35
+ verbose = false
36
+ end
37
+ local customStage = customStagesMap:get(name)
38
+ if customStage == nil then
39
+ error(("Failed to set the custom stage of \"" .. name) .. "\" because it was not found in the custom stages map. (This means that you probably forgot to define it in your \"tsconfig.json\" file.) See the website for more details on how to set up custom stages.")
40
+ end
41
+ local level = game:GetLevel()
42
+ local startingRoomGridIndex = level:GetStartingRoomIndex()
43
+ local seeds = game:GetSeeds()
44
+ local startSeed = seeds:GetStartSeed()
45
+ local rng = newRNG(nil, startSeed)
46
+ setStage(nil, customStage.baseStage, customStage.baseStageType)
47
+ for ____, room in ipairs(getRooms(nil)) do
48
+ do
49
+ if room.SafeGridIndex == startingRoomGridIndex then
50
+ goto __continue4
51
+ end
52
+ if room.Data == nil then
53
+ goto __continue4
54
+ end
55
+ local roomType = room.Data.Type
56
+ local roomShapeMap = customStage.roomTypeMap:get(roomType)
57
+ if roomShapeMap == nil then
58
+ if roomType == RoomType.DEFAULT then
59
+ logError((((("Failed to find any custom rooms for RoomType." .. tostring(RoomType[roomType])) .. " (") .. tostring(roomType)) .. ") for custom stage: ") .. name)
60
+ end
61
+ goto __continue4
62
+ end
63
+ local roomShape = room.Data.Shape
64
+ local roomDoorSlotFlagMap = roomShapeMap:get(roomShape)
65
+ if roomDoorSlotFlagMap == nil then
66
+ logError((((((((("Failed to find any custom rooms for RoomType." .. tostring(RoomType[roomType])) .. " (") .. tostring(roomType)) .. ") + RoomShape.") .. tostring(RoomShape[roomShape])) .. " (") .. tostring(roomShape)) .. ") for custom stage: ") .. name)
67
+ goto __continue4
68
+ end
69
+ local doorSlotFlags = room.Data.Doors
70
+ local roomsMetadata = roomDoorSlotFlagMap:get(doorSlotFlags)
71
+ if roomsMetadata == nil then
72
+ logError((((((((((("Failed to find any custom rooms for RoomType." .. tostring(RoomType[roomType])) .. " (") .. tostring(roomType)) .. ") + RoomShape.") .. tostring(RoomShape[roomShape])) .. " (") .. tostring(roomShape)) .. ") + DoorSlotFlags ") .. tostring(doorSlotFlags)) .. " for custom stage: ") .. name)
73
+ goto __continue4
74
+ end
75
+ local randomRoom = getRandomCustomStageRoom(nil, roomsMetadata, rng, verbose)
76
+ local newRoomData = customStageCachedRoomData:get(randomRoom.variant)
77
+ if newRoomData == nil then
78
+ local command = getGotoCommand(nil, roomType, randomRoom.variant)
79
+ Isaac.ExecuteCommand(command)
80
+ newRoomData = getRoomData(nil, GridRoom.DEBUG)
81
+ if newRoomData == nil then
82
+ logError((("Failed to get the room data for room variant " .. tostring(randomRoom.variant)) .. " for custom stage: ") .. name)
83
+ goto __continue4
84
+ end
85
+ customStageCachedRoomData:set(randomRoom.variant, newRoomData)
86
+ end
87
+ room.Data = newRoomData
88
+ end
89
+ ::__continue4::
90
+ end
91
+ level:SetStage(-1, StageType.ORIGINAL)
92
+ game:StartRoomTransition(startingRoomGridIndex, Direction.NO_DIRECTION, RoomTransitionAnim.FADE)
22
93
  end
23
94
  return ____exports
@@ -0,0 +1 @@
1
+ export declare function customStageInit(): void;
@@ -0,0 +1,48 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local Map = ____lualib.Map
3
+ local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
4
+ local __TS__New = ____lualib.__TS__New
5
+ local ____exports = {}
6
+ local getRoomTypeMap
7
+ local ____array = require("functions.array")
8
+ local isArray = ____array.isArray
9
+ local metadataJSON = require("features.customStage.metadata")
10
+ local ____v = require("features.customStage.v")
11
+ local customStagesMap = ____v.customStagesMap
12
+ function getRoomTypeMap(self, customStageLua)
13
+ local roomTypeMap = __TS__New(Map)
14
+ for ____, roomMetadata in ipairs(customStageLua.roomsMetadata) do
15
+ local roomType = roomMetadata.type
16
+ local roomShapeMap = roomTypeMap:get(roomType)
17
+ if roomShapeMap == nil then
18
+ roomShapeMap = __TS__New(Map)
19
+ roomTypeMap:set(roomType, roomShapeMap)
20
+ end
21
+ local roomShape = roomMetadata.shape
22
+ local roomDoorSlotFlagMap = roomShapeMap:get(roomShape)
23
+ if roomDoorSlotFlagMap == nil then
24
+ roomDoorSlotFlagMap = __TS__New(Map)
25
+ roomShapeMap:set(roomShape, roomDoorSlotFlagMap)
26
+ end
27
+ local doorSlotFlags = roomMetadata.doorSlotFlags
28
+ local rooms = roomDoorSlotFlagMap:get(doorSlotFlags)
29
+ if rooms == nil then
30
+ rooms = {}
31
+ roomDoorSlotFlagMap:set(doorSlotFlags, rooms)
32
+ end
33
+ rooms[#rooms + 1] = roomMetadata
34
+ end
35
+ return roomTypeMap
36
+ end
37
+ function ____exports.customStageInit(self)
38
+ local customStagesLua = metadataJSON
39
+ if not isArray(nil, customStagesLua) then
40
+ error("The IsaacScript standard library attempted to read the custom stage metadata from the \"metadata.lua\" file, but it was not an array.")
41
+ end
42
+ for ____, customStageLua in ipairs(customStagesLua) do
43
+ local roomTypeMap = getRoomTypeMap(nil, customStageLua)
44
+ local customStage = __TS__ObjectAssign({}, customStageLua, {roomTypeMap = roomTypeMap})
45
+ customStagesMap:set(customStage.name, customStage)
46
+ end
47
+ end
48
+ return ____exports
@@ -0,0 +1 @@
1
+ return {}
@@ -0,0 +1,11 @@
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ /// <reference types="isaac-typescript-definitions" />
3
+ import { CustomStageRoomMetadata } from "../../interfaces/CustomStageLua";
4
+ /**
5
+ * Helper function to get a random custom stage room from an array of custom stage rooms.
6
+ *
7
+ * Note that this function does not simply choose a random element in the provided array; it will
8
+ * properly account for each room weight using the algorithm from:
9
+ * https://stackoverflow.com/questions/1761626/weighted-random-numbers
10
+ */
11
+ export declare function getRandomCustomStageRoom(roomsMetadata: readonly CustomStageRoomMetadata[], seedOrRNG?: Seed | RNG, verbose?: boolean): CustomStageRoomMetadata;
@@ -0,0 +1,51 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
3
+ local ____exports = {}
4
+ local getTotalWeightOfCustomStageRooms, getCustomStageRoomWithChosenWeight
5
+ local ____array = require("functions.array")
6
+ local sumArray = ____array.sumArray
7
+ local ____log = require("functions.log")
8
+ local log = ____log.log
9
+ local ____random = require("functions.random")
10
+ local getRandomFloat = ____random.getRandomFloat
11
+ local ____rng = require("functions.rng")
12
+ local getRandomSeed = ____rng.getRandomSeed
13
+ function getTotalWeightOfCustomStageRooms(self, roomsMetadata)
14
+ local weights = __TS__ArrayMap(
15
+ roomsMetadata,
16
+ function(____, roomMetadata) return roomMetadata.weight end
17
+ )
18
+ return sumArray(nil, weights)
19
+ end
20
+ function getCustomStageRoomWithChosenWeight(self, roomsMetadata, chosenWeight)
21
+ for ____, roomMetadata in ipairs(roomsMetadata) do
22
+ if chosenWeight < roomMetadata.weight then
23
+ return roomMetadata
24
+ end
25
+ chosenWeight = chosenWeight - roomMetadata.weight
26
+ end
27
+ error("Failed to get a custom stage room with chosen weight: " .. tostring(chosenWeight))
28
+ end
29
+ --- Helper function to get a random custom stage room from an array of custom stage rooms.
30
+ --
31
+ -- Note that this function does not simply choose a random element in the provided array; it will
32
+ -- properly account for each room weight using the algorithm from:
33
+ -- https://stackoverflow.com/questions/1761626/weighted-random-numbers
34
+ function ____exports.getRandomCustomStageRoom(self, roomsMetadata, seedOrRNG, verbose)
35
+ if seedOrRNG == nil then
36
+ seedOrRNG = getRandomSeed(nil)
37
+ end
38
+ if verbose == nil then
39
+ verbose = false
40
+ end
41
+ local totalWeight = getTotalWeightOfCustomStageRooms(nil, roomsMetadata)
42
+ if verbose then
43
+ log("Total weight of the custom stage rooms provided: " .. tostring(totalWeight))
44
+ end
45
+ local chosenWeight = getRandomFloat(nil, 0, totalWeight, seedOrRNG)
46
+ if verbose then
47
+ log("Randomly chose weight for custom stage room: " .. tostring(chosenWeight))
48
+ end
49
+ return getCustomStageRoomWithChosenWeight(nil, roomsMetadata, chosenWeight)
50
+ end
51
+ return ____exports
@@ -1,2 +1,6 @@
1
- import { CustomStageData } from "../../interfaces/CustomStageData";
2
- export declare const customStages: Map<string, CustomStageData>;
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ import { CustomStage } from "../../interfaces/CustomStage";
3
+ /** Indexed by custom stage name. */
4
+ export declare const customStagesMap: Map<string, CustomStage>;
5
+ /** Indexed by room variant. */
6
+ export declare const customStageCachedRoomData: Map<number, Readonly<RoomConfig>>;
@@ -2,5 +2,8 @@ local ____lualib = require("lualib_bundle")
2
2
  local Map = ____lualib.Map
3
3
  local __TS__New = ____lualib.__TS__New
4
4
  local ____exports = {}
5
- ____exports.customStages = __TS__New(Map)
5
+ --- Indexed by custom stage name.
6
+ ____exports.customStagesMap = __TS__New(Map)
7
+ --- Indexed by room variant.
8
+ ____exports.customStageCachedRoomData = __TS__New(Map)
6
9
  return ____exports
@@ -1,6 +1,6 @@
1
1
  /// <reference types="isaac-typescript-definitions" />
2
2
  /// <reference types="isaac-typescript-definitions" />
3
- import { JSONRoom } from "../interfaces/JSONRoom";
3
+ import { JSONRoom } from "../interfaces/JSONRoomsFile";
4
4
  /**
5
5
  * Helper function to deconstruct a vanilla room and set up a custom room in its place.
6
6
  * Specifically, this will clear the current room of all entities and grid entities, and then spawn
@@ -47,10 +47,10 @@ export declare function isSin(npc: EntityNPC): boolean;
47
47
  * Gurglings/Turdlings with 2 copies, and other multi-segment bosses with 4 segments. You can
48
48
  * customize this via the "numSegments" argument.
49
49
  */
50
- export declare function spawnBoss(entityType: EntityType, variant: int, subType: int, position: Vector, velocity?: Readonly<Vector>, spawner?: Entity | undefined, seedOrRNG?: Seed | RNG | undefined, numSegments?: int): EntityNPC;
50
+ export declare function spawnBoss(entityType: EntityType, variant: int, subType: int, position: Vector, velocity?: Vector, spawner?: Entity | undefined, seedOrRNG?: Seed | RNG | undefined, numSegments?: int): EntityNPC;
51
51
  /**
52
52
  * Helper function to spawn a boss with a specific seed.
53
53
  *
54
54
  * For more information, see the documentation for the `spawnBoss` function.
55
55
  */
56
- export declare function spawnBossWithSeed(entityType: EntityType, variant: int, subType: int, position: Vector, seedOrRNG: Seed | RNG, velocity?: Readonly<Vector>, spawner?: Entity | undefined, numSegments?: int): EntityNPC;
56
+ export declare function spawnBossWithSeed(entityType: EntityType, variant: int, subType: int, position: Vector, seedOrRNG: Seed | RNG, velocity?: Vector, spawner?: Entity | undefined, numSegments?: int): EntityNPC;
@@ -53,6 +53,10 @@ export declare function getDoors(...roomTypes: RoomType[]): GridEntityDoor[];
53
53
  export declare function getDoorsToRoomIndex(...roomGridIndex: int[]): GridEntityDoor[];
54
54
  export declare function getOppositeDoorSlot(doorSlot: DoorSlot): DoorSlot | undefined;
55
55
  export declare function getRepentanceDoor(): GridEntityDoor | undefined;
56
+ /**
57
+ * Helper function to get the corresponding door slot for a given room shape and grid coordinates.
58
+ */
59
+ export declare function getRoomShapeDoorSlot(roomShape: RoomShape, x: int, y: int): DoorSlot | undefined;
56
60
  /**
57
61
  * Helper function to get the room grid coordinates for a specific room shape and door slot
58
62
  * combination.
@@ -5,6 +5,7 @@ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
5
5
  local __TS__New = ____lualib.__TS__New
6
6
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
7
7
  local __TS__ArrayFind = ____lualib.__TS__ArrayFind
8
+ local __TS__Iterator = ____lualib.__TS__Iterator
8
9
  local ____exports = {}
9
10
  local ROOM_ENTRY_OFFSET_FROM_DOOR
10
11
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
@@ -193,6 +194,19 @@ function ____exports.getRepentanceDoor(self)
193
194
  function(____, door) return ____exports.isRepentanceDoor(nil, door) end
194
195
  )
195
196
  end
197
+ --- Helper function to get the corresponding door slot for a given room shape and grid coordinates.
198
+ function ____exports.getRoomShapeDoorSlot(self, roomShape, x, y)
199
+ local coordinatesMap = ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES[roomShape]
200
+ for ____, ____value in __TS__Iterator(coordinatesMap:entries()) do
201
+ local doorSlot = ____value[1]
202
+ local doorX = ____value[2][1]
203
+ local doorY = ____value[2][2]
204
+ if x == doorX and y == doorY then
205
+ return doorSlot
206
+ end
207
+ end
208
+ return nil
209
+ end
196
210
  --- Helper function to get the room grid coordinates for a specific room shape and door slot
197
211
  -- combination.
198
212
  function ____exports.getRoomShapeDoorSlotCoordinates(self, roomShape, doorSlot)
@@ -142,9 +142,9 @@ export declare function setEntityRandomColor(entity: Entity): void;
142
142
  *
143
143
  * Also see the `spawnWithSeed` helper function.
144
144
  */
145
- export declare function spawn(entityType: EntityType, variant: int, subType: int, position: Vector, velocity?: Readonly<Vector>, spawner?: Entity | undefined, seedOrRNG?: Seed | RNG | undefined): Entity;
145
+ export declare function spawn(entityType: EntityType, variant: int, subType: int, position: Vector, velocity?: Vector, spawner?: Entity | undefined, seedOrRNG?: Seed | RNG | undefined): Entity;
146
146
  /**
147
147
  * Helper function to spawn an entity. Use this instead of the `Game.Spawn` method if you do not
148
148
  * need to specify the velocity or spawner.
149
149
  */
150
- export declare function spawnWithSeed(entityType: EntityType, variant: int, subType: int, position: Vector, seedOrRNG: Seed | RNG, velocity?: Readonly<Vector>, spawner?: Entity | undefined): Entity;
150
+ export declare function spawnWithSeed(entityType: EntityType, variant: int, subType: int, position: Vector, seedOrRNG: Seed | RNG, velocity?: Vector, spawner?: Entity | undefined): Entity;