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.
- package/callbacks/postCollectibleEmpty.d.ts +1 -0
- package/callbacks/postCollectibleEmpty.lua +40 -0
- package/callbacks/subscriptions/postCollectibleEmpty.d.ts +5 -0
- package/callbacks/subscriptions/postCollectibleEmpty.lua +29 -0
- package/classes/DefaultMap.lua +2 -2
- package/enums/ModCallbackCustom.d.ts +92 -77
- package/enums/ModCallbackCustom.lua +79 -77
- package/features/customStage/exports.d.ts +3 -9
- package/features/customStage/exports.lua +86 -15
- package/features/customStage/init.d.ts +1 -0
- package/features/customStage/init.lua +48 -0
- package/features/customStage/metadata.lua +1 -0
- package/features/customStage/util.d.ts +11 -0
- package/features/customStage/util.lua +51 -0
- package/features/customStage/v.d.ts +6 -2
- package/features/customStage/v.lua +4 -1
- package/features/deployJSONRoom.d.ts +1 -1
- package/functions/boss.d.ts +2 -2
- package/functions/doors.d.ts +4 -0
- package/functions/doors.lua +14 -0
- package/functions/entity.d.ts +2 -2
- package/functions/entitySpecific.d.ts +20 -20
- package/functions/familiars.d.ts +2 -0
- package/functions/familiars.lua +16 -0
- package/functions/jsonRoom.d.ts +26 -4
- package/functions/jsonRoom.lua +64 -2
- package/functions/pickups.d.ts +16 -16
- package/functions/playerCenter.d.ts +6 -0
- package/functions/playerCenter.lua +57 -0
- package/functions/rooms.d.ts +1 -1
- package/functions/rooms.lua +2 -2
- package/functions/stage.d.ts +3 -3
- package/functions/stage.lua +5 -4
- package/functions/trinkets.lua +1 -1
- package/index.d.ts +1 -5
- package/initCustomCallbacks.lua +3 -0
- package/initFeatures.lua +3 -0
- package/interfaces/AddCallbackParameterCustom.d.ts +2 -0
- package/interfaces/CustomStage.d.ts +10 -0
- package/interfaces/{CustomStageData.lua → CustomStage.lua} +0 -0
- package/interfaces/CustomStageLua.d.ts +118 -0
- package/interfaces/{JSONDoor.lua → CustomStageLua.lua} +0 -0
- package/interfaces/JSONRoomsFile.d.ts +75 -0
- package/interfaces/{JSONEntity.lua → JSONRoomsFile.lua} +0 -0
- package/objects/callbackRegisterFunctions.lua +3 -0
- package/objects/roomTypeGotoPrefixes.lua +29 -29
- package/package.json +1 -1
- package/features/customStage/constants.d.ts +0 -18
- package/features/customStage/constants.lua +0 -29
- package/features/customStage/scripts/generateCustomStageRooms.d.ts +0 -27
- package/features/customStage/scripts/generateCustomStageRooms.lua +0 -126
- package/interfaces/CustomStageData.d.ts +0 -5
- package/interfaces/JSONDoor.d.ts +0 -11
- package/interfaces/JSONEntity.d.ts +0 -13
- package/interfaces/JSONRoom.d.ts +0 -26
- package/interfaces/JSONRoom.lua +0 -2
- package/interfaces/JSONRooms.d.ts +0 -11
- package/interfaces/JSONRooms.lua +0 -2
- package/interfaces/JSONSpawn.d.ts +0 -11
- 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.
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
47
|
+
____exports.ModCallbackCustom.POST_FIRST_FLIP = 19
|
|
46
48
|
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FIRST_FLIP] = "POST_FIRST_FLIP"
|
|
47
|
-
____exports.ModCallbackCustom.POST_FLIP =
|
|
49
|
+
____exports.ModCallbackCustom.POST_FLIP = 20
|
|
48
50
|
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_FLIP] = "POST_FLIP"
|
|
49
|
-
____exports.ModCallbackCustom.POST_GAME_STARTED_REORDERED =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
131
|
+
____exports.ModCallbackCustom.POST_PURCHASE = 61
|
|
130
132
|
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PURCHASE] = "POST_PURCHASE"
|
|
131
|
-
____exports.ModCallbackCustom.POST_ROCK_RENDER =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
139
|
+
____exports.ModCallbackCustom.POST_SACRIFICE = 65
|
|
138
140
|
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SACRIFICE] = "POST_SACRIFICE"
|
|
139
|
-
____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
161
|
+
____exports.ModCallbackCustom.POST_TNT_UPDATE = 76
|
|
160
162
|
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TNT_UPDATE] = "POST_TNT_UPDATE"
|
|
161
|
-
____exports.ModCallbackCustom.POST_TRANSFORMATION =
|
|
163
|
+
____exports.ModCallbackCustom.POST_TRANSFORMATION = 77
|
|
162
164
|
____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TRANSFORMATION] = "POST_TRANSFORMATION"
|
|
163
|
-
____exports.ModCallbackCustom.POST_TRINKET_BREAK =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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(
|
|
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
|
|
6
|
-
|
|
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
|
|
21
|
-
|
|
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
|
-
|
|
2
|
-
|
|
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
|
-
|
|
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/
|
|
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
|
package/functions/boss.d.ts
CHANGED
|
@@ -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?:
|
|
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?:
|
|
56
|
+
export declare function spawnBossWithSeed(entityType: EntityType, variant: int, subType: int, position: Vector, seedOrRNG: Seed | RNG, velocity?: Vector, spawner?: Entity | undefined, numSegments?: int): EntityNPC;
|
package/functions/doors.d.ts
CHANGED
|
@@ -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.
|
package/functions/doors.lua
CHANGED
|
@@ -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)
|
package/functions/entity.d.ts
CHANGED
|
@@ -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?:
|
|
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?:
|
|
150
|
+
export declare function spawnWithSeed(entityType: EntityType, variant: int, subType: int, position: Vector, seedOrRNG: Seed | RNG, velocity?: Vector, spawner?: Entity | undefined): Entity;
|