isaacscript-common 82.0.2 → 83.1.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 (35) hide show
  1. package/dist/functions/bosses.d.ts +25 -22
  2. package/dist/functions/bosses.d.ts.map +1 -1
  3. package/dist/functions/bosses.lua +36 -36
  4. package/dist/functions/stage.d.ts +17 -5
  5. package/dist/functions/stage.d.ts.map +1 -1
  6. package/dist/functions/stage.lua +70 -23
  7. package/dist/index.rollup.d.ts +46 -28
  8. package/dist/isaacscript-common.lua +397 -332
  9. package/dist/objects/stageIDNames.d.ts +40 -0
  10. package/dist/objects/stageIDNames.d.ts.map +1 -0
  11. package/dist/objects/stageIDNames.lua +41 -0
  12. package/dist/objects/stageToStageID.d.ts +2 -1
  13. package/dist/objects/stageToStageID.d.ts.map +1 -1
  14. package/dist/objects/stageToStageID.lua +29 -0
  15. package/dist/objects/versusScreenBackgroundColors.d.ts +0 -6
  16. package/dist/objects/versusScreenBackgroundColors.d.ts.map +1 -1
  17. package/dist/objects/versusScreenBackgroundColors.lua +2 -8
  18. package/dist/objects/versusScreenDirtSpotColors.d.ts +0 -6
  19. package/dist/objects/versusScreenDirtSpotColors.d.ts.map +1 -1
  20. package/dist/objects/versusScreenDirtSpotColors.lua +2 -8
  21. package/dist/sets/bossSets.d.ts +3 -3
  22. package/dist/sets/bossSets.d.ts.map +1 -1
  23. package/dist/sets/bossSets.lua +197 -119
  24. package/package.json +2 -2
  25. package/src/functions/bosses.ts +42 -38
  26. package/src/functions/stage.ts +62 -8
  27. package/src/objects/stageIDNames.ts +41 -0
  28. package/src/objects/stageToStageID.ts +33 -1
  29. package/src/objects/versusScreenBackgroundColors.ts +2 -8
  30. package/src/objects/versusScreenDirtSpotColors.ts +2 -8
  31. package/src/sets/bossSets.ts +143 -136
  32. package/dist/objects/levelNames.d.ts +0 -115
  33. package/dist/objects/levelNames.d.ts.map +0 -1
  34. package/dist/objects/levelNames.lua +0 -117
  35. package/src/objects/levelNames.ts +0 -141
@@ -1,6 +1,6 @@
1
1
  --[[
2
2
 
3
- isaacscript-common 82.0.1
3
+ isaacscript-common 83.0.0
4
4
 
5
5
  This is the "isaacscript-common" library, which was created with the IsaacScript tool.
6
6
 
@@ -11011,9 +11011,20 @@ return ____exports
11011
11011
  end,
11012
11012
  ["lua_modules.isaac-typescript-definitions.dist.enums.StageID"] = function(...)
11013
11013
  local ____exports = {}
11014
- --- Corresponds to the filename used in the XML/STB file for the room.
11014
+ --- Corresponds to the filename used in the XML/STB file for the room. It also matches the "id"
11015
+ -- attribute in the "stages.xml" file.
11015
11016
  --
11016
- -- This enum is contiguous. (Every value is satisfied between 0 and 36, inclusive.)
11017
+ -- This enum is not contiguous. In other words, the enum ranges from `StageID.SPECIAL_ROOMS` (0) to
11018
+ -- `StageID.BACKWARDS` (36), but there is no corresponding `StageID` with the following values:
11019
+ --
11020
+ -- - 18 (corresponds to Afterbirth+ "18.greed special.stb")
11021
+ -- - 19 (corresponds to Afterbirth+ "19.greed basement.stb")
11022
+ -- - 20 (corresponds to Afterbirth+ "20.greed caves.stb")
11023
+ -- - 21 (corresponds to Afterbirth+ "21.greed depths.stb")
11024
+ -- - 22 (corresponds to Afterbirth+ "22.greed womb.stb")
11025
+ -- - 23 (corresponds to Afterbirth+ "23.greed sheol.stb")
11026
+ --
11027
+ -- (These values are now unused in Repentance.)
11017
11028
  ____exports.StageID = {}
11018
11029
  ____exports.StageID.SPECIAL_ROOMS = 0
11019
11030
  ____exports.StageID[____exports.StageID.SPECIAL_ROOMS] = "SPECIAL_ROOMS"
@@ -11051,22 +11062,10 @@ ____exports.StageID.DARK_ROOM = 16
11051
11062
  ____exports.StageID[____exports.StageID.DARK_ROOM] = "DARK_ROOM"
11052
11063
  ____exports.StageID.CHEST = 17
11053
11064
  ____exports.StageID[____exports.StageID.CHEST] = "CHEST"
11054
- ____exports.StageID.SPECIAL_ROOMS_GREED_MODE = 18
11055
- ____exports.StageID[____exports.StageID.SPECIAL_ROOMS_GREED_MODE] = "SPECIAL_ROOMS_GREED_MODE"
11056
- ____exports.StageID.BASEMENT_GREED_MODE = 19
11057
- ____exports.StageID[____exports.StageID.BASEMENT_GREED_MODE] = "BASEMENT_GREED_MODE"
11058
- ____exports.StageID.CAVES_GREED_MODE = 20
11059
- ____exports.StageID[____exports.StageID.CAVES_GREED_MODE] = "CAVES_GREED_MODE"
11060
- ____exports.StageID.DEPTHS_GREED_MODE = 21
11061
- ____exports.StageID[____exports.StageID.DEPTHS_GREED_MODE] = "DEPTHS_GREED_MODE"
11062
- ____exports.StageID.WOMB_GREED_MODE = 22
11063
- ____exports.StageID[____exports.StageID.WOMB_GREED_MODE] = "WOMB_GREED_MODE"
11064
- ____exports.StageID.SHEOL_GREED_MODE = 23
11065
- ____exports.StageID[____exports.StageID.SHEOL_GREED_MODE] = "SHEOL_GREED_MODE"
11066
- ____exports.StageID.SHOP_GREED_MODE = 24
11067
- ____exports.StageID[____exports.StageID.SHOP_GREED_MODE] = "SHOP_GREED_MODE"
11068
- ____exports.StageID.ULTRA_GREED_GREED_MODE = 25
11069
- ____exports.StageID[____exports.StageID.ULTRA_GREED_GREED_MODE] = "ULTRA_GREED_GREED_MODE"
11065
+ ____exports.StageID.SHOP = 24
11066
+ ____exports.StageID[____exports.StageID.SHOP] = "SHOP"
11067
+ ____exports.StageID.ULTRA_GREED = 25
11068
+ ____exports.StageID[____exports.StageID.ULTRA_GREED] = "ULTRA_GREED"
11070
11069
  ____exports.StageID.VOID = 26
11071
11070
  ____exports.StageID[____exports.StageID.VOID] = "VOID"
11072
11071
  ____exports.StageID.DOWNPOUR = 27
@@ -31830,125 +31829,6 @@ function ____exports.reloadRoom(self)
31830
31829
  local roomGridIndex = getRoomGridIndex(nil)
31831
31830
  ____exports.teleport(nil, roomGridIndex, Direction.NO_DIRECTION, RoomTransitionAnim.FADE)
31832
31831
  end
31833
- return ____exports
31834
- end,
31835
- ["objects.levelNames"] = function(...)
31836
- local ____exports = {}
31837
- local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
31838
- local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
31839
- local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
31840
- --- A mapping of stage and stage types to the corresponding English level name.
31841
- --
31842
- -- This is useful because the `Level.GetName` method returns a localized version of the level name,
31843
- -- which will not display correctly on some fonts.
31844
- --
31845
- -- Note that this contains "Blue Womb" instead of "???" for stage 9.
31846
- ____exports.LEVEL_NAMES = {
31847
- [LevelStage.BASEMENT_1] = {
31848
- [StageType.ORIGINAL] = "Basement 1",
31849
- [StageType.WRATH_OF_THE_LAMB] = "Cellar 1",
31850
- [StageType.AFTERBIRTH] = "Burning Basement 1",
31851
- [StageType.GREED_MODE] = "Basement",
31852
- [StageType.REPENTANCE] = "Downpour 1",
31853
- [StageType.REPENTANCE_B] = "Dross 1"
31854
- },
31855
- [LevelStage.BASEMENT_2] = {
31856
- [StageType.ORIGINAL] = "Basement 2",
31857
- [StageType.WRATH_OF_THE_LAMB] = "Cellar 2",
31858
- [StageType.AFTERBIRTH] = "Burning Basement 2",
31859
- [StageType.GREED_MODE] = "Basement",
31860
- [StageType.REPENTANCE] = "Downpour 2",
31861
- [StageType.REPENTANCE_B] = "Dross 2"
31862
- },
31863
- [LevelStage.CAVES_1] = {
31864
- [StageType.ORIGINAL] = "Caves 1",
31865
- [StageType.WRATH_OF_THE_LAMB] = "Catacombs 1",
31866
- [StageType.AFTERBIRTH] = "Flooded Caves 1",
31867
- [StageType.GREED_MODE] = "Caves",
31868
- [StageType.REPENTANCE] = "Mines 1",
31869
- [StageType.REPENTANCE_B] = "Ashpit 1"
31870
- },
31871
- [LevelStage.CAVES_2] = {
31872
- [StageType.ORIGINAL] = "Caves 2",
31873
- [StageType.WRATH_OF_THE_LAMB] = "Catacombs 2",
31874
- [StageType.AFTERBIRTH] = "Flooded Caves 2",
31875
- [StageType.GREED_MODE] = "Caves",
31876
- [StageType.REPENTANCE] = "Mines 2",
31877
- [StageType.REPENTANCE_B] = "Ashpit 2"
31878
- },
31879
- [LevelStage.DEPTHS_1] = {
31880
- [StageType.ORIGINAL] = "Depths 1",
31881
- [StageType.WRATH_OF_THE_LAMB] = "Necropolis 1",
31882
- [StageType.AFTERBIRTH] = "Dank Depths 1",
31883
- [StageType.GREED_MODE] = "Depths",
31884
- [StageType.REPENTANCE] = "Mausoleum 1",
31885
- [StageType.REPENTANCE_B] = "Gehenna 1"
31886
- },
31887
- [LevelStage.DEPTHS_2] = {
31888
- [StageType.ORIGINAL] = "Depths 2",
31889
- [StageType.WRATH_OF_THE_LAMB] = "Necropolis 2",
31890
- [StageType.AFTERBIRTH] = "Dank Depths 2",
31891
- [StageType.GREED_MODE] = "Depths",
31892
- [StageType.REPENTANCE] = "Mausoleum 2",
31893
- [StageType.REPENTANCE_B] = "Gehenna 2"
31894
- },
31895
- [LevelStage.WOMB_1] = {
31896
- [StageType.ORIGINAL] = "Womb 1",
31897
- [StageType.WRATH_OF_THE_LAMB] = "Utero 1",
31898
- [StageType.AFTERBIRTH] = "Scarred Womb 1",
31899
- [StageType.GREED_MODE] = "Womb",
31900
- [StageType.REPENTANCE] = "Corpse 1",
31901
- [StageType.REPENTANCE_B] = "Mortis 1"
31902
- },
31903
- [LevelStage.WOMB_2] = {
31904
- [StageType.ORIGINAL] = "Womb 2",
31905
- [StageType.WRATH_OF_THE_LAMB] = "Utero 2",
31906
- [StageType.AFTERBIRTH] = "Scarred Womb 2",
31907
- [StageType.GREED_MODE] = "Womb",
31908
- [StageType.REPENTANCE] = "Corpse 2",
31909
- [StageType.REPENTANCE_B] = "Mortis 2"
31910
- },
31911
- [LevelStage.BLUE_WOMB] = {
31912
- [StageType.ORIGINAL] = "Blue Womb",
31913
- [StageType.WRATH_OF_THE_LAMB] = "Blue Womb",
31914
- [StageType.AFTERBIRTH] = "Blue Womb",
31915
- [StageType.GREED_MODE] = "Blue Womb",
31916
- [StageType.REPENTANCE] = "Blue Womb",
31917
- [StageType.REPENTANCE_B] = "Blue Womb"
31918
- },
31919
- [LevelStage.SHEOL_CATHEDRAL] = {
31920
- [StageType.ORIGINAL] = "Sheol",
31921
- [StageType.WRATH_OF_THE_LAMB] = "Cathedral",
31922
- [StageType.AFTERBIRTH] = "Undefined",
31923
- [StageType.GREED_MODE] = "Sheol",
31924
- [StageType.REPENTANCE] = "Undefined",
31925
- [StageType.REPENTANCE_B] = "Undefined"
31926
- },
31927
- [LevelStage.DARK_ROOM_CHEST] = {
31928
- [StageType.ORIGINAL] = "Dark Room",
31929
- [StageType.WRATH_OF_THE_LAMB] = "The Chest",
31930
- [StageType.AFTERBIRTH] = "Undefined",
31931
- [StageType.GREED_MODE] = "The Shop",
31932
- [StageType.REPENTANCE] = "Undefined",
31933
- [StageType.REPENTANCE_B] = "Undefined"
31934
- },
31935
- [LevelStage.VOID] = {
31936
- [StageType.ORIGINAL] = "The Void",
31937
- [StageType.WRATH_OF_THE_LAMB] = "The Void",
31938
- [StageType.AFTERBIRTH] = "The Void",
31939
- [StageType.GREED_MODE] = "The Void",
31940
- [StageType.REPENTANCE] = "The Void",
31941
- [StageType.REPENTANCE_B] = "The Void"
31942
- },
31943
- [LevelStage.HOME] = {
31944
- [StageType.ORIGINAL] = "Home",
31945
- [StageType.WRATH_OF_THE_LAMB] = "Home",
31946
- [StageType.AFTERBIRTH] = "Home",
31947
- [StageType.GREED_MODE] = "Home",
31948
- [StageType.REPENTANCE] = "Home",
31949
- [StageType.REPENTANCE_B] = "Home"
31950
- }
31951
- }
31952
31832
  return ____exports
31953
31833
  end,
31954
31834
  ["objects.roomTypeSpecialGotoPrefixes"] = function(...)
@@ -31986,14 +31866,61 @@ ____exports.ROOM_TYPE_SPECIAL_GOTO_PREFIXES = {
31986
31866
  [RoomType.BLUE] = "blue",
31987
31867
  [RoomType.ULTRA_SECRET] = "ultrasecret"
31988
31868
  }
31869
+ return ____exports
31870
+ end,
31871
+ ["objects.stageIDNames"] = function(...)
31872
+ local ____exports = {}
31873
+ local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
31874
+ local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
31875
+ --- Derived from "stages.xml". Note that unlike "stages.xml":
31876
+ --
31877
+ -- - `StageID.BLUE_WOMB` (13) is specified with a name of "Blue Womb" instead of "???".
31878
+ -- - `StageID.StageID.BACKWARDS` (36) is specified with a name of "The Ascent" instead of "???".
31879
+ ____exports.STAGE_ID_NAMES = {
31880
+ [StageID.SPECIAL_ROOMS] = "Special Rooms",
31881
+ [StageID.BASEMENT] = "Basement",
31882
+ [StageID.CELLAR] = "Cellar",
31883
+ [StageID.BURNING_BASEMENT] = "Burning Basement",
31884
+ [StageID.CAVES] = "Caves",
31885
+ [StageID.CATACOMBS] = "Catacombs",
31886
+ [StageID.FLOODED_CAVES] = "Flooded Caves",
31887
+ [StageID.DEPTHS] = "Depths",
31888
+ [StageID.NECROPOLIS] = "Necropolis",
31889
+ [StageID.DANK_DEPTHS] = "Dank Depths",
31890
+ [StageID.WOMB] = "Womb",
31891
+ [StageID.UTERO] = "Utero",
31892
+ [StageID.SCARRED_WOMB] = "Scarred Womb",
31893
+ [StageID.BLUE_WOMB] = "Blue Womb",
31894
+ [StageID.SHEOL] = "Sheol",
31895
+ [StageID.CATHEDRAL] = "Cathedral",
31896
+ [StageID.DARK_ROOM] = "Dark Room",
31897
+ [StageID.CHEST] = "Chest",
31898
+ [StageID.SHOP] = "The Shop",
31899
+ [StageID.ULTRA_GREED] = "Ultra Greed",
31900
+ [StageID.VOID] = "The Void",
31901
+ [StageID.DOWNPOUR] = "Downpour",
31902
+ [StageID.DROSS] = "Dross",
31903
+ [StageID.MINES] = "Mines",
31904
+ [StageID.ASHPIT] = "Ashpit",
31905
+ [StageID.MAUSOLEUM] = "Mausoleum",
31906
+ [StageID.GEHENNA] = "Gehenna",
31907
+ [StageID.CORPSE] = "Corpse",
31908
+ [StageID.MORTIS] = "Mortis",
31909
+ [StageID.HOME] = "Home",
31910
+ [StageID.BACKWARDS] = "The Ascent"
31911
+ }
31989
31912
  return ____exports
31990
31913
  end,
31991
31914
  ["objects.stageToStageID"] = function(...)
31915
+ local ____lualib = require("lualib_bundle")
31916
+ local __TS__New = ____lualib.__TS__New
31992
31917
  local ____exports = {}
31993
31918
  local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
31994
31919
  local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
31995
31920
  local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
31996
31921
  local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
31922
+ local ____ReadonlyMap = require("types.ReadonlyMap")
31923
+ local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
31997
31924
  local BASEMENT_TO_STAGE_ID = {
31998
31925
  [StageType.ORIGINAL] = StageID.BASEMENT,
31999
31926
  [StageType.WRATH_OF_THE_LAMB] = StageID.CELLAR,
@@ -32081,6 +32008,31 @@ ____exports.STAGE_TO_STAGE_ID = {
32081
32008
  [LevelStage.VOID] = VOID_TO_STAGE_ID,
32082
32009
  [LevelStage.HOME] = HOME_TO_STAGE_ID
32083
32010
  }
32011
+ local SHOP_TO_STAGE_ID = {
32012
+ [StageType.ORIGINAL] = StageID.SHOP,
32013
+ [StageType.WRATH_OF_THE_LAMB] = StageID.SHOP,
32014
+ [StageType.AFTERBIRTH] = StageID.SHOP,
32015
+ [StageType.GREED_MODE] = StageID.SHOP,
32016
+ [StageType.REPENTANCE] = StageID.SHOP,
32017
+ [StageType.REPENTANCE_B] = StageID.SHOP
32018
+ }
32019
+ local ULTRA_GREED_TO_STAGE_ID = {
32020
+ [StageType.ORIGINAL] = StageID.ULTRA_GREED,
32021
+ [StageType.WRATH_OF_THE_LAMB] = StageID.ULTRA_GREED,
32022
+ [StageType.AFTERBIRTH] = StageID.ULTRA_GREED,
32023
+ [StageType.GREED_MODE] = StageID.ULTRA_GREED,
32024
+ [StageType.REPENTANCE] = StageID.ULTRA_GREED,
32025
+ [StageType.REPENTANCE_B] = StageID.ULTRA_GREED
32026
+ }
32027
+ ____exports.STAGE_TO_STAGE_ID_GREED_MODE = __TS__New(ReadonlyMap, {
32028
+ {LevelStage.BASEMENT_GREED_MODE, BASEMENT_TO_STAGE_ID},
32029
+ {LevelStage.CAVES_GREED_MODE, CAVES_TO_STAGE_ID},
32030
+ {LevelStage.DEPTHS_GREED_MODE, DEPTHS_TO_STAGE_ID},
32031
+ {LevelStage.WOMB_GREED_MODE, WOMB_TO_STAGE_ID},
32032
+ {LevelStage.SHEOL_GREED_MODE, SHEOL_CATHEDRAL_TO_STAGE_ID},
32033
+ {LevelStage.SHOP_GREED_MODE, SHOP_TO_STAGE_ID},
32034
+ {LevelStage.ULTRA_GREED_GREED_MODE, ULTRA_GREED_TO_STAGE_ID}
32035
+ })
32084
32036
  return ____exports
32085
32037
  end,
32086
32038
  ["objects.stageTypeSuffixes"] = function(...)
@@ -32105,15 +32057,17 @@ local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescri
32105
32057
  local GameStateFlag = ____isaac_2Dtypescript_2Ddefinitions.GameStateFlag
32106
32058
  local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
32107
32059
  local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
32060
+ local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
32108
32061
  local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
32109
32062
  local ____cachedClasses = require("core.cachedClasses")
32110
32063
  local game = ____cachedClasses.game
32111
- local ____levelNames = require("objects.levelNames")
32112
- local LEVEL_NAMES = ____levelNames.LEVEL_NAMES
32113
32064
  local ____roomTypeSpecialGotoPrefixes = require("objects.roomTypeSpecialGotoPrefixes")
32114
32065
  local ROOM_TYPE_SPECIAL_GOTO_PREFIXES = ____roomTypeSpecialGotoPrefixes.ROOM_TYPE_SPECIAL_GOTO_PREFIXES
32066
+ local ____stageIDNames = require("objects.stageIDNames")
32067
+ local STAGE_ID_NAMES = ____stageIDNames.STAGE_ID_NAMES
32115
32068
  local ____stageToStageID = require("objects.stageToStageID")
32116
32069
  local STAGE_TO_STAGE_ID = ____stageToStageID.STAGE_TO_STAGE_ID
32070
+ local STAGE_TO_STAGE_ID_GREED_MODE = ____stageToStageID.STAGE_TO_STAGE_ID_GREED_MODE
32117
32071
  local ____stageTypeSuffixes = require("objects.stageTypeSuffixes")
32118
32072
  local STAGE_TYPE_SUFFIXES = ____stageTypeSuffixes.STAGE_TYPE_SUFFIXES
32119
32073
  local ____log = require("functions.log")
@@ -32122,6 +32076,45 @@ local ____types = require("functions.types")
32122
32076
  local asLevelStage = ____types.asLevelStage
32123
32077
  local ____utils = require("functions.utils")
32124
32078
  local inRange = ____utils.inRange
32079
+ --- Helper function to get the stage ID that corresponds to a particular stage and stage type.
32080
+ --
32081
+ -- This is useful because `getRoomStageID` will not correctly return the `StageID` if the player is
32082
+ -- in a special room.
32083
+ --
32084
+ -- This correctly handles the case of Greed Mode. In Greed Mode, if an undefined stage and stage
32085
+ -- type combination are passed, `StageID.SPECIAL_ROOMS` (0) will be returned.
32086
+ --
32087
+ -- @param stage Optional. If not specified, the stage corresponding to the current floor will be
32088
+ -- used.
32089
+ -- @param stageType Optional. If not specified, the stage type corresponding to the current floor
32090
+ -- will be used.
32091
+ function ____exports.getStageID(self, stage, stageType)
32092
+ local level = game:GetLevel()
32093
+ if stage == nil then
32094
+ stage = level:GetStage()
32095
+ end
32096
+ if stageType == nil then
32097
+ stageType = level:GetStageType()
32098
+ end
32099
+ if game:IsGreedMode() then
32100
+ local stageTypeToStageID = STAGE_TO_STAGE_ID_GREED_MODE:get(stage)
32101
+ if stageTypeToStageID == nil then
32102
+ return StageID.SPECIAL_ROOMS
32103
+ end
32104
+ return stageTypeToStageID[stageType]
32105
+ end
32106
+ local stageTypeToStageID = STAGE_TO_STAGE_ID[stage]
32107
+ return stageTypeToStageID[stageType]
32108
+ end
32109
+ --- Helper function to get the English name corresponding to a stage ID. For example, "Caves".
32110
+ --
32111
+ -- This is derived from the data in the "stages.xml" file.
32112
+ --
32113
+ -- Note that unlike "stages.xml", Blue Womb is specified with a name of "Blue Womb" instead of
32114
+ -- "???".
32115
+ function ____exports.getStageIDName(self, stageID)
32116
+ return STAGE_ID_NAMES[stageID]
32117
+ end
32125
32118
  --- Helper function to check if the provided stage type is equal to `StageType.REPENTANCE` or
32126
32119
  -- `StageType.REPENTANCE_B`.
32127
32120
  function ____exports.isRepentanceStage(self, stageType)
@@ -32214,33 +32207,39 @@ function ____exports.getLevelName(self, stage, stageType)
32214
32207
  if stageType == nil then
32215
32208
  stageType = level:GetStageType()
32216
32209
  end
32217
- local stageNames = LEVEL_NAMES[stage]
32218
- return stageNames[stageType]
32210
+ local stageID = ____exports.getStageID(nil, stage, stageType)
32211
+ local stageIDName = ____exports.getStageIDName(nil, stageID)
32212
+ local suffix
32213
+ repeat
32214
+ local ____switch14 = stage
32215
+ local ____cond14 = ____switch14 == LevelStage.BASEMENT_1 or ____switch14 == LevelStage.CAVES_1 or ____switch14 == LevelStage.DEPTHS_1 or ____switch14 == LevelStage.WOMB_1
32216
+ if ____cond14 then
32217
+ do
32218
+ suffix = " 1"
32219
+ break
32220
+ end
32221
+ end
32222
+ ____cond14 = ____cond14 or (____switch14 == LevelStage.BASEMENT_2 or ____switch14 == LevelStage.CAVES_2 or ____switch14 == LevelStage.DEPTHS_2 or ____switch14 == LevelStage.WOMB_2)
32223
+ if ____cond14 then
32224
+ do
32225
+ suffix = " 2"
32226
+ break
32227
+ end
32228
+ end
32229
+ do
32230
+ do
32231
+ suffix = ""
32232
+ break
32233
+ end
32234
+ end
32235
+ until true
32236
+ return stageIDName .. suffix
32219
32237
  end
32220
32238
  --- Alias for the `Level.GetStage` method.
32221
32239
  function ____exports.getStage(self)
32222
32240
  local level = game:GetLevel()
32223
32241
  return level:GetStage()
32224
32242
  end
32225
- --- Helper function to get the stage ID that corresponds to a particular floor. It does this by
32226
- -- manually converting `LevelStage` and `StageType` into `StageID`. This is useful because
32227
- -- `getRoomStageID` will not correctly return the `StageID` if the player is in a special room.
32228
- --
32229
- -- @param stage Optional. If not specified, the stage corresponding to the current floor will be
32230
- -- used.
32231
- -- @param stageType Optional. If not specified, the stage type corresponding to the current floor
32232
- -- will be used.
32233
- function ____exports.getStageID(self, stage, stageType)
32234
- local level = game:GetLevel()
32235
- if stage == nil then
32236
- stage = level:GetStage()
32237
- end
32238
- if stageType == nil then
32239
- stageType = level:GetStageType()
32240
- end
32241
- local stageTypeToStageID = STAGE_TO_STAGE_ID[stage]
32242
- return stageTypeToStageID[stageType]
32243
- end
32244
32243
  --- Alias for the `Level.GetStageType` method.
32245
32244
  function ____exports.getStageType(self)
32246
32245
  local level = game:GetLevel()
@@ -50697,10 +50696,13 @@ return ____exports
50697
50696
  end,
50698
50697
  ["sets.bossSets"] = function(...)
50699
50698
  local ____lualib = require("lualib_bundle")
50699
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
50700
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
50701
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
50700
50702
  local __TS__New = ____lualib.__TS__New
50701
50703
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
50702
- local __TS__Spread = ____lualib.__TS__Spread
50703
50704
  local Set = ____lualib.Set
50705
+ local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
50704
50706
  local __TS__Iterator = ____lualib.__TS__Iterator
50705
50707
  local ____exports = {}
50706
50708
  local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.index")
@@ -50709,8 +50711,6 @@ local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
50709
50711
  local StageID = ____isaac_2Dtypescript_2Ddefinitions.StageID
50710
50712
  local ____cachedEnumValues = require("arrays.cachedEnumValues")
50711
50713
  local BOSS_ID_VALUES = ____cachedEnumValues.BOSS_ID_VALUES
50712
- local ____set = require("functions.set")
50713
- local combineSets = ____set.combineSets
50714
50714
  local ____storyBosses = require("functions.storyBosses")
50715
50715
  local isStoryBossID = ____storyBosses.isStoryBossID
50716
50716
  local ____ReadonlyMap = require("types.ReadonlyMap")
@@ -50718,7 +50718,7 @@ local ReadonlyMap = ____ReadonlyMap.ReadonlyMap
50718
50718
  local ____ReadonlySet = require("types.ReadonlySet")
50719
50719
  local ReadonlySet = ____ReadonlySet.ReadonlySet
50720
50720
  --- For `StageID.BASEMENT` (1).
50721
- local BASEMENT_BOSSES_SET = __TS__New(ReadonlySet, {
50721
+ local BASEMENT_BOSSES = {
50722
50722
  BossID.MONSTRO,
50723
50723
  BossID.LARRY_JR,
50724
50724
  BossID.FAMINE,
@@ -50733,9 +50733,9 @@ local BASEMENT_BOSSES_SET = __TS__New(ReadonlySet, {
50733
50733
  BossID.DANGLE,
50734
50734
  BossID.TURDLING,
50735
50735
  BossID.BABY_PLUM
50736
- })
50736
+ }
50737
50737
  --- For `StageID.CELLAR` (2).
50738
- local CELLAR_BOSSES_SET = __TS__New(ReadonlySet, {
50738
+ local CELLAR_BOSSES = {
50739
50739
  BossID.FAMINE,
50740
50740
  BossID.DUKE_OF_FLIES,
50741
50741
  BossID.HEADLESS_HORSEMAN,
@@ -50747,9 +50747,9 @@ local CELLAR_BOSSES_SET = __TS__New(ReadonlySet, {
50747
50747
  BossID.LITTLE_HORN,
50748
50748
  BossID.RAG_MAN,
50749
50749
  BossID.BABY_PLUM
50750
- })
50750
+ }
50751
50751
  --- For `StageID.BURNING_BASEMENT` (3).
50752
- local BURNING_BASEMENT_BOSSES_SET = __TS__New(ReadonlySet, {
50752
+ local BURNING_BASEMENT_BOSSES = {
50753
50753
  BossID.MONSTRO,
50754
50754
  BossID.LARRY_JR,
50755
50755
  BossID.FAMINE,
@@ -50765,28 +50765,42 @@ local BURNING_BASEMENT_BOSSES_SET = __TS__New(ReadonlySet, {
50765
50765
  BossID.DANGLE,
50766
50766
  BossID.TURDLING,
50767
50767
  BossID.BABY_PLUM
50768
- })
50768
+ }
50769
50769
  --- For `StageID.DOWNPOUR` (27).
50770
- local DOWNPOUR_BOSSES_SET = __TS__New(ReadonlySet, {BossID.LIL_BLUB, BossID.WORMWOOD, BossID.RAINMAKER, BossID.MIN_MIN})
50770
+ local DOWNPOUR_BOSSES = {BossID.LIL_BLUB, BossID.WORMWOOD, BossID.RAINMAKER, BossID.MIN_MIN}
50771
50771
  --- For `StageID.DROSS` (28).
50772
- local DROSS_BOSSES_SET = __TS__New(ReadonlySet, {
50772
+ local DROSS_BOSSES = {
50773
50773
  BossID.LIL_BLUB,
50774
50774
  BossID.WORMWOOD,
50775
50775
  BossID.CLOG,
50776
50776
  BossID.COLOSTOMIA,
50777
50777
  BossID.TURDLET
50778
- })
50778
+ }
50779
+ local ____ReadonlySet_1 = ReadonlySet
50780
+ local ____array_0 = __TS__SparseArrayNew(table.unpack(BASEMENT_BOSSES))
50781
+ __TS__SparseArrayPush(
50782
+ ____array_0,
50783
+ table.unpack(CELLAR_BOSSES)
50784
+ )
50785
+ __TS__SparseArrayPush(
50786
+ ____array_0,
50787
+ table.unpack(BURNING_BASEMENT_BOSSES)
50788
+ )
50789
+ __TS__SparseArrayPush(
50790
+ ____array_0,
50791
+ table.unpack(DOWNPOUR_BOSSES)
50792
+ )
50793
+ __TS__SparseArrayPush(
50794
+ ____array_0,
50795
+ table.unpack(DROSS_BOSSES)
50796
+ )
50779
50797
  --- The set of unique bosses for Basement, Cellar, Burning Basement, Downpour, and Dross.
50780
- local ALL_BASEMENT_BOSSES_SET = combineSets(
50781
- nil,
50782
- BASEMENT_BOSSES_SET,
50783
- CELLAR_BOSSES_SET,
50784
- BURNING_BASEMENT_BOSSES_SET,
50785
- DOWNPOUR_BOSSES_SET,
50786
- DROSS_BOSSES_SET
50798
+ local ALL_BASEMENT_BOSSES_SET = __TS__New(
50799
+ ____ReadonlySet_1,
50800
+ {__TS__SparseArraySpread(____array_0)}
50787
50801
  )
50788
50802
  --- For `StageID.CAVES` (4).
50789
- local CAVES_BOSSES_SET = __TS__New(ReadonlySet, {
50803
+ local CAVES_BOSSES = {
50790
50804
  BossID.CHUB,
50791
50805
  BossID.GURDY,
50792
50806
  BossID.PESTILENCE,
@@ -50802,9 +50816,9 @@ local CAVES_BOSSES_SET = __TS__New(ReadonlySet, {
50802
50816
  BossID.RAG_MEGA,
50803
50817
  BossID.BIG_HORN,
50804
50818
  BossID.BUMBINO
50805
- })
50819
+ }
50806
50820
  --- For `StageID.CATACOMBS` (5).
50807
- local CATACOMBS_BOSSES_SET = __TS__New(ReadonlySet, {
50821
+ local CATACOMBS_BOSSES = {
50808
50822
  BossID.PESTILENCE,
50809
50823
  BossID.PEEP,
50810
50824
  BossID.HEADLESS_HORSEMAN,
@@ -50821,9 +50835,9 @@ local CATACOMBS_BOSSES_SET = __TS__New(ReadonlySet, {
50821
50835
  BossID.RAG_MEGA,
50822
50836
  BossID.BIG_HORN,
50823
50837
  BossID.BUMBINO
50824
- })
50838
+ }
50825
50839
  --- For `StageID.FLOODED_CAVES` (6).
50826
- local FLOODED_CAVES_BOSSES_SET = __TS__New(ReadonlySet, {
50840
+ local FLOODED_CAVES_BOSSES = {
50827
50841
  BossID.CHUB,
50828
50842
  BossID.GURDY,
50829
50843
  BossID.PESTILENCE,
@@ -50841,30 +50855,44 @@ local FLOODED_CAVES_BOSSES_SET = __TS__New(ReadonlySet, {
50841
50855
  BossID.RAG_MEGA,
50842
50856
  BossID.BIG_HORN,
50843
50857
  BossID.BUMBINO
50844
- })
50858
+ }
50845
50859
  --- For `StageID.MINES` (29).
50846
- local MINES_BOSSES_SET = __TS__New(ReadonlySet, {BossID.REAP_CREEP, BossID.TUFF_TWINS, BossID.HORNFEL, BossID.GREAT_GIDEON})
50860
+ local MINES_BOSSES = {BossID.REAP_CREEP, BossID.TUFF_TWINS, BossID.HORNFEL, BossID.GREAT_GIDEON}
50847
50861
  --- For `StageID.ASHPIT` (30).
50848
- local ASHPIT_BOSSES_SET = __TS__New(ReadonlySet, {
50862
+ local ASHPIT_BOSSES = {
50849
50863
  BossID.PILE,
50850
50864
  BossID.GREAT_GIDEON,
50851
50865
  BossID.SINGE,
50852
50866
  BossID.SHELL,
50853
50867
  BossID.CLUTCH
50854
- })
50868
+ }
50869
+ local ____ReadonlySet_3 = ReadonlySet
50870
+ local ____array_2 = __TS__SparseArrayNew(table.unpack(CAVES_BOSSES))
50871
+ __TS__SparseArrayPush(
50872
+ ____array_2,
50873
+ table.unpack(CATACOMBS_BOSSES)
50874
+ )
50875
+ __TS__SparseArrayPush(
50876
+ ____array_2,
50877
+ table.unpack(FLOODED_CAVES_BOSSES)
50878
+ )
50879
+ __TS__SparseArrayPush(
50880
+ ____array_2,
50881
+ table.unpack(MINES_BOSSES)
50882
+ )
50883
+ __TS__SparseArrayPush(
50884
+ ____array_2,
50885
+ table.unpack(ASHPIT_BOSSES)
50886
+ )
50855
50887
  --- The set of unique bosses for Caves, Catacombs, Flooded Caves, Mines, and Ashpit.
50856
- local ALL_CAVES_BOSSES_SET = combineSets(
50857
- nil,
50858
- CAVES_BOSSES_SET,
50859
- CATACOMBS_BOSSES_SET,
50860
- FLOODED_CAVES_BOSSES_SET,
50861
- MINES_BOSSES_SET,
50862
- ASHPIT_BOSSES_SET
50888
+ local ALL_CAVES_BOSSES_SET = __TS__New(
50889
+ ____ReadonlySet_3,
50890
+ {__TS__SparseArraySpread(____array_2)}
50863
50891
  )
50864
50892
  --- For `StageID.DEPTHS` (7).
50865
50893
  --
50866
50894
  -- Note that this set includes Mom, even though they are not technically in the boss pool.
50867
- local DEPTHS_BOSSES_SET = __TS__New(ReadonlySet, {
50895
+ local DEPTHS_BOSSES = {
50868
50896
  BossID.MONSTRO_2,
50869
50897
  BossID.MOM,
50870
50898
  BossID.WAR,
@@ -50877,11 +50905,11 @@ local DEPTHS_BOSSES_SET = __TS__New(ReadonlySet, {
50877
50905
  BossID.BROWNIE,
50878
50906
  BossID.SISTERS_VIS,
50879
50907
  BossID.REAP_CREEP
50880
- })
50908
+ }
50881
50909
  --- For `StageID.NECROPOLIS` (8).
50882
50910
  --
50883
50911
  -- Note that this set includes Mom, even though they are not technically in the boss pool.
50884
- local NECROPOLIS_BOSSES_SET = __TS__New(ReadonlySet, {
50912
+ local NECROPOLIS_BOSSES = {
50885
50913
  BossID.MOM,
50886
50914
  BossID.WAR,
50887
50915
  BossID.LOKI,
@@ -50893,11 +50921,11 @@ local NECROPOLIS_BOSSES_SET = __TS__New(ReadonlySet, {
50893
50921
  BossID.BROWNIE,
50894
50922
  BossID.SISTERS_VIS,
50895
50923
  BossID.PILE
50896
- })
50924
+ }
50897
50925
  --- For `StageID.DANK_DEPTHS` (9).
50898
50926
  --
50899
50927
  -- Note that this set includes Mom, even though they are not technically in the boss pool.
50900
- local DANK_DEPTHS_BOSSES_SET = __TS__New(ReadonlySet, {
50928
+ local DANK_DEPTHS_BOSSES = {
50901
50929
  BossID.MONSTRO_2,
50902
50930
  BossID.MOM,
50903
50931
  BossID.WAR,
@@ -50910,29 +50938,43 @@ local DANK_DEPTHS_BOSSES_SET = __TS__New(ReadonlySet, {
50910
50938
  BossID.BROWNIE,
50911
50939
  BossID.SISTERS_VIS,
50912
50940
  BossID.REAP_CREEP
50913
- })
50941
+ }
50914
50942
  --- For `StageID.MAUSOLEUM` (31).
50915
50943
  --
50916
50944
  -- Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
50917
- local MAUSOLEUM_BOSSES_SET = __TS__New(ReadonlySet, {BossID.SIREN, BossID.HERETIC, BossID.MAUSOLEUM_MOM})
50945
+ local MAUSOLEUM_BOSSES = {BossID.SIREN, BossID.HERETIC, BossID.MAUSOLEUM_MOM}
50918
50946
  --- For `StageID.GEHENNA` (32).
50919
50947
  --
50920
50948
  -- Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
50921
- local GEHENNA_BOSSES_SET = __TS__New(ReadonlySet, {BossID.VISAGE, BossID.MAUSOLEUM_MOM, BossID.HORNY_BOYS})
50949
+ local GEHENNA_BOSSES = {BossID.VISAGE, BossID.MAUSOLEUM_MOM, BossID.HORNY_BOYS}
50950
+ local ____ReadonlySet_5 = ReadonlySet
50951
+ local ____array_4 = __TS__SparseArrayNew(table.unpack(DEPTHS_BOSSES))
50952
+ __TS__SparseArrayPush(
50953
+ ____array_4,
50954
+ table.unpack(NECROPOLIS_BOSSES)
50955
+ )
50956
+ __TS__SparseArrayPush(
50957
+ ____array_4,
50958
+ table.unpack(DANK_DEPTHS_BOSSES)
50959
+ )
50960
+ __TS__SparseArrayPush(
50961
+ ____array_4,
50962
+ table.unpack(MAUSOLEUM_BOSSES)
50963
+ )
50964
+ __TS__SparseArrayPush(
50965
+ ____array_4,
50966
+ table.unpack(GEHENNA_BOSSES)
50967
+ )
50922
50968
  --- The set of unique bosses for Depths, Necropolis, Dank Depths, Mausoleum, and Gehenna.
50923
- local ALL_DEPTHS_BOSSES_SET = combineSets(
50924
- nil,
50925
- DEPTHS_BOSSES_SET,
50926
- NECROPOLIS_BOSSES_SET,
50927
- DANK_DEPTHS_BOSSES_SET,
50928
- MAUSOLEUM_BOSSES_SET,
50929
- GEHENNA_BOSSES_SET
50969
+ local ALL_DEPTHS_BOSSES_SET = __TS__New(
50970
+ ____ReadonlySet_5,
50971
+ {__TS__SparseArraySpread(____array_4)}
50930
50972
  )
50931
50973
  --- For `StageID.WOMB` (10).
50932
50974
  --
50933
50975
  -- Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
50934
50976
  -- boss pool.
50935
- local WOMB_BOSSES_SET = __TS__New(ReadonlySet, {
50977
+ local WOMB_BOSSES = {
50936
50978
  BossID.SCOLEX,
50937
50979
  BossID.MOMS_HEART,
50938
50980
  BossID.DEATH,
@@ -50945,12 +50987,12 @@ local WOMB_BOSSES_SET = __TS__New(ReadonlySet, {
50945
50987
  BossID.MAMA_GURDY,
50946
50988
  BossID.MR_FRED,
50947
50989
  BossID.MATRIARCH
50948
- })
50990
+ }
50949
50991
  --- For `StageID.UTERO` (11).
50950
50992
  --
50951
50993
  -- Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
50952
50994
  -- boss pool.
50953
- local UTERO_BOSSES_SET = __TS__New(ReadonlySet, {
50995
+ local UTERO_BOSSES = {
50954
50996
  BossID.MOMS_HEART,
50955
50997
  BossID.DEATH,
50956
50998
  BossID.HEADLESS_HORSEMAN,
@@ -50962,12 +51004,12 @@ local UTERO_BOSSES_SET = __TS__New(ReadonlySet, {
50962
51004
  BossID.CONQUEST,
50963
51005
  BossID.DADDY_LONG_LEGS,
50964
51006
  BossID.TRIACHNID
50965
- })
51007
+ }
50966
51008
  --- For `StageID.SCARRED_WOMB` (12).
50967
51009
  --
50968
51010
  -- Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
50969
51011
  -- boss pool.
50970
- local SCARRED_WOMB_BOSSES_SET = __TS__New(ReadonlySet, {
51012
+ local SCARRED_WOMB_BOSSES = {
50971
51013
  BossID.SCOLEX,
50972
51014
  BossID.MOMS_HEART,
50973
51015
  BossID.DEATH,
@@ -50981,59 +51023,100 @@ local SCARRED_WOMB_BOSSES_SET = __TS__New(ReadonlySet, {
50981
51023
  BossID.MAMA_GURDY,
50982
51024
  BossID.MR_FRED,
50983
51025
  BossID.MATRIARCH
50984
- })
51026
+ }
50985
51027
  --- For `StageID.CORPSE` (33).
50986
51028
  --
50987
51029
  -- Note that this set includes Mother, even though she is not technically in the boss pool.
50988
- local CORPSE_BOSSES_SET = __TS__New(ReadonlySet, {BossID.SCOURGE, BossID.CHIMERA, BossID.ROTGUT, BossID.MOTHER})
51030
+ local CORPSE_BOSSES = {BossID.SCOURGE, BossID.CHIMERA, BossID.ROTGUT, BossID.MOTHER}
51031
+ local ____ReadonlySet_7 = ReadonlySet
51032
+ local ____array_6 = __TS__SparseArrayNew(table.unpack(WOMB_BOSSES))
51033
+ __TS__SparseArrayPush(
51034
+ ____array_6,
51035
+ table.unpack(UTERO_BOSSES)
51036
+ )
51037
+ __TS__SparseArrayPush(
51038
+ ____array_6,
51039
+ table.unpack(SCARRED_WOMB_BOSSES)
51040
+ )
51041
+ __TS__SparseArrayPush(
51042
+ ____array_6,
51043
+ table.unpack(CORPSE_BOSSES)
51044
+ )
50989
51045
  --- The set of unique bosses for Womb, Utero, Scarred Womb, and Corpse.
50990
- local ALL_WOMB_BOSSES_SET = combineSets(
50991
- nil,
50992
- WOMB_BOSSES_SET,
50993
- UTERO_BOSSES_SET,
50994
- SCARRED_WOMB_BOSSES_SET,
50995
- CORPSE_BOSSES_SET
51046
+ local ALL_WOMB_BOSSES_SET = __TS__New(
51047
+ ____ReadonlySet_7,
51048
+ {__TS__SparseArraySpread(____array_6)}
51049
+ )
51050
+ local BLUE_WOMB_BOSSES = {BossID.HUSH}
51051
+ local ALL_BLUE_WOMB_BOSSES_SET = __TS__New(
51052
+ ReadonlySet,
51053
+ {table.unpack(BLUE_WOMB_BOSSES)}
51054
+ )
51055
+ local SHEOL_BOSSES = {BossID.SATAN}
51056
+ local CATHEDRAL_BOSSES = {BossID.ISAAC}
51057
+ local ____ReadonlySet_9 = ReadonlySet
51058
+ local ____array_8 = __TS__SparseArrayNew(table.unpack(SHEOL_BOSSES))
51059
+ __TS__SparseArrayPush(
51060
+ ____array_8,
51061
+ table.unpack(CATHEDRAL_BOSSES)
51062
+ )
51063
+ local ALL_STAGE_10_BOSSES_SET = __TS__New(
51064
+ ____ReadonlySet_9,
51065
+ {__TS__SparseArraySpread(____array_8)}
50996
51066
  )
50997
- local BLUE_WOMB_BOSSES_SET = __TS__New(ReadonlySet, {BossID.HUSH})
50998
- local SHEOL_BOSSES_SET = __TS__New(ReadonlySet, {BossID.SATAN})
50999
- local CATHEDRAL_BOSSES_SET = __TS__New(ReadonlySet, {BossID.ISAAC})
51000
- local ALL_STAGE_10_BOSSES_SET = combineSets(nil, SHEOL_BOSSES_SET, CATHEDRAL_BOSSES_SET)
51001
51067
  --- Note that this set includes Mega Satan, even though they are not technically in the boss pool.
51002
- local DARK_ROOM_BOSSES_SET = __TS__New(ReadonlySet, {BossID.LAMB, BossID.MEGA_SATAN})
51068
+ local DARK_ROOM_BOSSES = {BossID.LAMB, BossID.MEGA_SATAN}
51003
51069
  --- Note that this set includes Mega Satan, even though they are not technically in the boss pool.
51004
- local CHEST_BOSSES_SET = __TS__New(ReadonlySet, {BossID.BLUE_BABY, BossID.MEGA_SATAN})
51005
- local ALL_STAGE_11_BOSSES_SET = combineSets(nil, DARK_ROOM_BOSSES_SET, CHEST_BOSSES_SET)
51006
- local VOID_BOSSES_SET = __TS__New(ReadonlySet, {BossID.DELIRIUM})
51070
+ local CHEST_BOSSES = {BossID.BLUE_BABY, BossID.MEGA_SATAN}
51071
+ local ____ReadonlySet_11 = ReadonlySet
51072
+ local ____array_10 = __TS__SparseArrayNew(table.unpack(DARK_ROOM_BOSSES))
51073
+ __TS__SparseArrayPush(
51074
+ ____array_10,
51075
+ table.unpack(CHEST_BOSSES)
51076
+ )
51077
+ local ALL_STAGE_11_BOSSES_SET = __TS__New(
51078
+ ____ReadonlySet_11,
51079
+ {__TS__SparseArraySpread(____array_10)}
51080
+ )
51081
+ local VOID_BOSSES = {BossID.DELIRIUM}
51082
+ local ALL_VOID_BOSSES_SET = __TS__New(
51083
+ ReadonlySet,
51084
+ {table.unpack(VOID_BOSSES)}
51085
+ )
51007
51086
  --- Includes Dogma and The Beast. Does not include Ultra Famine, Ultra Pestilence, Ultra War, and
51008
51087
  -- Ultra Death (since they do not have boss IDs).
51009
- local HOME_BOSSES_SET = __TS__New(ReadonlySet, {BossID.DOGMA, BossID.BEAST})
51010
- ____exports.STAGE_ID_TO_BOSS_SET_MAP = __TS__New(ReadonlyMap, {
51011
- {StageID.BASEMENT, BASEMENT_BOSSES_SET},
51012
- {StageID.CELLAR, CELLAR_BOSSES_SET},
51013
- {StageID.BURNING_BASEMENT, BURNING_BASEMENT_BOSSES_SET},
51014
- {StageID.DOWNPOUR, DOWNPOUR_BOSSES_SET},
51015
- {StageID.DROSS, DROSS_BOSSES_SET},
51016
- {StageID.CAVES, CAVES_BOSSES_SET},
51017
- {StageID.CATACOMBS, CATACOMBS_BOSSES_SET},
51018
- {StageID.FLOODED_CAVES, FLOODED_CAVES_BOSSES_SET},
51019
- {StageID.MINES, MINES_BOSSES_SET},
51020
- {StageID.ASHPIT, ASHPIT_BOSSES_SET},
51021
- {StageID.DEPTHS, DEPTHS_BOSSES_SET},
51022
- {StageID.NECROPOLIS, NECROPOLIS_BOSSES_SET},
51023
- {StageID.DANK_DEPTHS, DANK_DEPTHS_BOSSES_SET},
51024
- {StageID.MAUSOLEUM, MAUSOLEUM_BOSSES_SET},
51025
- {StageID.GEHENNA, GEHENNA_BOSSES_SET},
51026
- {StageID.WOMB, WOMB_BOSSES_SET},
51027
- {StageID.UTERO, UTERO_BOSSES_SET},
51028
- {StageID.SCARRED_WOMB, SCARRED_WOMB_BOSSES_SET},
51029
- {StageID.CORPSE, CORPSE_BOSSES_SET},
51030
- {StageID.BLUE_WOMB, BLUE_WOMB_BOSSES_SET},
51031
- {StageID.SHEOL, SHEOL_BOSSES_SET},
51032
- {StageID.CATHEDRAL, CATHEDRAL_BOSSES_SET},
51033
- {StageID.DARK_ROOM, DARK_ROOM_BOSSES_SET},
51034
- {StageID.CHEST, CHEST_BOSSES_SET},
51035
- {StageID.VOID, VOID_BOSSES_SET},
51036
- {StageID.HOME, HOME_BOSSES_SET}
51088
+ local HOME_BOSSES = {BossID.DOGMA, BossID.BEAST}
51089
+ local ALL_HOME_BOSSES_SET = __TS__New(
51090
+ ReadonlySet,
51091
+ {table.unpack(HOME_BOSSES)}
51092
+ )
51093
+ ____exports.STAGE_ID_TO_BOSS_IDS = __TS__New(ReadonlyMap, {
51094
+ {StageID.BASEMENT, BASEMENT_BOSSES},
51095
+ {StageID.CELLAR, CELLAR_BOSSES},
51096
+ {StageID.BURNING_BASEMENT, BURNING_BASEMENT_BOSSES},
51097
+ {StageID.DOWNPOUR, DOWNPOUR_BOSSES},
51098
+ {StageID.DROSS, DROSS_BOSSES},
51099
+ {StageID.CAVES, CAVES_BOSSES},
51100
+ {StageID.CATACOMBS, CATACOMBS_BOSSES},
51101
+ {StageID.FLOODED_CAVES, FLOODED_CAVES_BOSSES},
51102
+ {StageID.MINES, MINES_BOSSES},
51103
+ {StageID.ASHPIT, ASHPIT_BOSSES},
51104
+ {StageID.DEPTHS, DEPTHS_BOSSES},
51105
+ {StageID.NECROPOLIS, NECROPOLIS_BOSSES},
51106
+ {StageID.DANK_DEPTHS, DANK_DEPTHS_BOSSES},
51107
+ {StageID.MAUSOLEUM, MAUSOLEUM_BOSSES},
51108
+ {StageID.GEHENNA, GEHENNA_BOSSES},
51109
+ {StageID.WOMB, WOMB_BOSSES},
51110
+ {StageID.UTERO, UTERO_BOSSES},
51111
+ {StageID.SCARRED_WOMB, SCARRED_WOMB_BOSSES},
51112
+ {StageID.CORPSE, CORPSE_BOSSES},
51113
+ {StageID.BLUE_WOMB, BLUE_WOMB_BOSSES},
51114
+ {StageID.SHEOL, SHEOL_BOSSES},
51115
+ {StageID.CATHEDRAL, CATHEDRAL_BOSSES},
51116
+ {StageID.DARK_ROOM, DARK_ROOM_BOSSES},
51117
+ {StageID.CHEST, CHEST_BOSSES},
51118
+ {StageID.VOID, VOID_BOSSES},
51119
+ {StageID.HOME, HOME_BOSSES}
51037
51120
  })
51038
51121
  ____exports.STAGE_TO_COMBINED_BOSS_SET_MAP = __TS__New(ReadonlyMap, {
51039
51122
  {LevelStage.BASEMENT_1, ALL_BASEMENT_BOSSES_SET},
@@ -51044,42 +51127,36 @@ ____exports.STAGE_TO_COMBINED_BOSS_SET_MAP = __TS__New(ReadonlyMap, {
51044
51127
  {LevelStage.DEPTHS_2, ALL_DEPTHS_BOSSES_SET},
51045
51128
  {LevelStage.WOMB_1, ALL_WOMB_BOSSES_SET},
51046
51129
  {LevelStage.WOMB_2, ALL_WOMB_BOSSES_SET},
51047
- {LevelStage.BLUE_WOMB, BLUE_WOMB_BOSSES_SET},
51130
+ {LevelStage.BLUE_WOMB, ALL_BLUE_WOMB_BOSSES_SET},
51048
51131
  {LevelStage.SHEOL_CATHEDRAL, ALL_STAGE_10_BOSSES_SET},
51049
51132
  {LevelStage.DARK_ROOM_CHEST, ALL_STAGE_11_BOSSES_SET},
51050
- {LevelStage.VOID, VOID_BOSSES_SET},
51051
- {LevelStage.HOME, HOME_BOSSES_SET}
51133
+ {LevelStage.VOID, ALL_VOID_BOSSES_SET},
51134
+ {LevelStage.HOME, ALL_HOME_BOSSES_SET}
51052
51135
  })
51053
- ____exports.ALL_BOSSES_SET = __TS__New(
51054
- ReadonlySet,
51055
- __TS__ArrayFilter(
51056
- BOSS_ID_VALUES,
51057
- function(____, bossID) return bossID ~= BossID.RAGLICH end
51058
- )
51136
+ ____exports.ALL_BOSSES = __TS__ArrayFilter(
51137
+ BOSS_ID_VALUES,
51138
+ function(____, bossID) return bossID ~= BossID.RAGLICH end
51059
51139
  )
51060
- ____exports.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = __TS__New(
51061
- ReadonlySet,
51062
- __TS__ArrayFilter(
51063
- {__TS__Spread(____exports.ALL_BOSSES_SET)},
51064
- function(____, bossID) return not isStoryBossID(nil, bossID) end
51065
- )
51140
+ ____exports.NON_STORY_BOSSES = __TS__ArrayFilter(
51141
+ ____exports.ALL_BOSSES,
51142
+ function(____, bossID) return not isStoryBossID(nil, bossID) end
51066
51143
  )
51067
51144
  ____exports.BOSS_ID_TO_STAGE_IDS = (function()
51068
51145
  local partialBossIDsToStageIDs = {}
51069
51146
  for ____, bossID in ipairs(BOSS_ID_VALUES) do
51070
51147
  local stageIDs = __TS__New(Set)
51071
- for ____, ____value in __TS__Iterator(____exports.STAGE_ID_TO_BOSS_SET_MAP) do
51148
+ for ____, ____value in __TS__Iterator(____exports.STAGE_ID_TO_BOSS_IDS) do
51072
51149
  local stageID = ____value[1]
51073
- local bossSet = ____value[2]
51074
- if bossSet:has(bossID) then
51150
+ local bossIDs = ____value[2]
51151
+ if __TS__ArrayIncludes(bossIDs, bossID) then
51075
51152
  stageIDs:add(stageID)
51076
51153
  end
51077
51154
  end
51078
51155
  partialBossIDsToStageIDs[bossID] = stageIDs
51079
51156
  end
51080
51157
  local bossIDsToStageIDs = partialBossIDsToStageIDs
51081
- bossIDsToStageIDs[BossID.ULTRA_GREED]:add(StageID.ULTRA_GREED_GREED_MODE)
51082
- bossIDsToStageIDs[BossID.ULTRA_GREEDIER]:add(StageID.ULTRA_GREED_GREED_MODE)
51158
+ bossIDsToStageIDs[BossID.ULTRA_GREED]:add(StageID.ULTRA_GREED)
51159
+ bossIDsToStageIDs[BossID.ULTRA_GREEDIER]:add(StageID.ULTRA_GREED)
51083
51160
  bossIDsToStageIDs[BossID.MAUSOLEUM_MOMS_HEART]:add(StageID.MAUSOLEUM)
51084
51161
  bossIDsToStageIDs[BossID.MAUSOLEUM_MOMS_HEART]:add(StageID.GEHENNA)
51085
51162
  return bossIDsToStageIDs
@@ -51306,10 +51383,10 @@ local ____bossNames = require("objects.bossNames")
51306
51383
  local BOSS_NAMES = ____bossNames.BOSS_NAMES
51307
51384
  local DEFAULT_BOSS_NAME = ____bossNames.DEFAULT_BOSS_NAME
51308
51385
  local ____bossSets = require("sets.bossSets")
51309
- local ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = ____bossSets.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
51310
- local ALL_BOSSES_SET = ____bossSets.ALL_BOSSES_SET
51386
+ local ALL_BOSSES = ____bossSets.ALL_BOSSES
51311
51387
  local BOSS_ID_TO_STAGE_IDS = ____bossSets.BOSS_ID_TO_STAGE_IDS
51312
- local STAGE_ID_TO_BOSS_SET_MAP = ____bossSets.STAGE_ID_TO_BOSS_SET_MAP
51388
+ local NON_STORY_BOSSES = ____bossSets.NON_STORY_BOSSES
51389
+ local STAGE_ID_TO_BOSS_IDS = ____bossSets.STAGE_ID_TO_BOSS_IDS
51313
51390
  local STAGE_TO_COMBINED_BOSS_SET_MAP = ____bossSets.STAGE_TO_COMBINED_BOSS_SET_MAP
51314
51391
  local ____repentanceBossIDsSet = require("sets.repentanceBossIDsSet")
51315
51392
  local REPENTANCE_ONLY_BOSS_IDS_SET = ____repentanceBossIDsSet.REPENTANCE_ONLY_BOSS_IDS_SET
@@ -51376,8 +51453,8 @@ function ____exports.getAliveBosses(self, entityType, variant, subType, ignoreFr
51376
51453
  function(____, aliveNPC) return aliveNPC:IsBoss() end
51377
51454
  )
51378
51455
  end
51379
- --- Helper function to get the set of every boss in the game (which is derived from the `BossID`
51380
- -- enum).
51456
+ --- Helper function to get an array with every boss in the game. This is derived from the `BossID`
51457
+ -- enum.
51381
51458
  --
51382
51459
  -- This includes:
51383
51460
  -- - Ultra Greed
@@ -51390,15 +51467,15 @@ end
51390
51467
  -- - sub-bosses of The Beast fight (e.g. Ultra Famine, Ultra Pestilence, Ultra War, Ultra Death)
51391
51468
  -- - bosses that do not have any Boss Rooms defined due to being unfinished (e.g. Raglich)
51392
51469
  --
51393
- -- Also see the `getBossSet` and `getCombinedBossSet` functions.
51394
- --
51395
- -- @param includeStoryBosses Optional. Whether to include "story" bosses like Mom and It Lives.
51396
- -- Default is true.
51397
- function ____exports.getAllBossesSet(self, includeStoryBosses)
51398
- if includeStoryBosses == nil then
51399
- includeStoryBosses = true
51400
- end
51401
- return includeStoryBosses and ALL_BOSSES_SET or ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
51470
+ -- Also see the `getAllNonStoryBosses` function.
51471
+ function ____exports.getAllBosses(self)
51472
+ return ALL_BOSSES
51473
+ end
51474
+ --- Helper function to get an array with every boss in the game. This is derived from the `BossID`
51475
+ -- enum. This is the same thing as the `getAllBosses` helper function, but with story bosses
51476
+ -- filtered out.
51477
+ function ____exports.getAllNonStoryBosses(self)
51478
+ return NON_STORY_BOSSES
51402
51479
  end
51403
51480
  --- Helper function to get the boss ID corresponding to the current room. Returns undefined if the
51404
51481
  -- current room is not a Boss Room.
@@ -51426,18 +51503,26 @@ function ____exports.getBossIDFromEntityTypeVariant(self, entityType, variant)
51426
51503
  local entityTypeVariant = (tostring(entityType) .. ".") .. tostring(variant)
51427
51504
  return ENTITY_TYPE_VARIANT_TO_BOSS_ID_MAP:get(entityTypeVariant)
51428
51505
  end
51506
+ --- Helper function to get the set of vanilla bosses for a particular stage across all of the stage
51507
+ -- types. For example, specifying `LevelStage.BASEMENT_2` will return a set with all of the bosses
51508
+ -- for Basement, Cellar, Burning Basement, Downpour, and Dross.
51509
+ --
51510
+ -- Also see the `getAllBossesSet` and `getBossIDsForStageID` functions.
51511
+ function ____exports.getBossIDsForStage(self, stage)
51512
+ return STAGE_TO_COMBINED_BOSS_SET_MAP:get(stage)
51513
+ end
51514
+ --- Helper function to get the set of vanilla bosses that can randomly appear on a particular stage
51515
+ -- ID.
51516
+ --
51517
+ -- Also see the `getAllBossesSet` and `getBossIDsForStage` functions.
51518
+ function ____exports.getBossIDsForStageID(self, stageID)
51519
+ return STAGE_ID_TO_BOSS_IDS:get(stageID)
51520
+ end
51429
51521
  --- Helper function to get the proper English name for a boss. For example, the name for
51430
51522
  -- `BossID.WRETCHED` (36) is "The Wretched".
51431
51523
  function ____exports.getBossName(self, bossID)
51432
51524
  return BOSS_NAMES[bossID] or DEFAULT_BOSS_NAME
51433
51525
  end
51434
- --- Helper function to get the set of vanilla bosses for a particular stage and stage type
51435
- -- combination.
51436
- --
51437
- -- Also see the `getAllBossesSet` and `getCombinedBossSet` functions.
51438
- function ____exports.getBossSet(self, stageID)
51439
- return STAGE_ID_TO_BOSS_SET_MAP:get(stageID)
51440
- end
51441
51526
  --- Helper function to get the set of stage IDs that a particular boss naturally appears in.
51442
51527
  function ____exports.getBossStageIDs(self, bossID)
51443
51528
  return BOSS_ID_TO_STAGE_IDS[bossID]
@@ -51467,14 +51552,6 @@ function ____exports.getBosses(self, entityType, variant, subType, ignoreFriendl
51467
51552
  function(____, npc) return npc:IsBoss() end
51468
51553
  )
51469
51554
  end
51470
- --- Helper function to get the set of vanilla bosses for a particular stage across all of the stage
51471
- -- types. For example, specifying `LevelStage.BASEMENT_2` will return a set with all of the bosses
51472
- -- for Basement, Cellar, Burning Basement, Downpour, and Dross.
51473
- --
51474
- -- Also see the `getAllBossesSet` and `getBossSet` functions.
51475
- function ____exports.getCombinedBossSet(self, stage)
51476
- return STAGE_TO_COMBINED_BOSS_SET_MAP:get(stage)
51477
- end
51478
51555
  function ____exports.getEntityTypeVariantFromBossID(self, bossID)
51479
51556
  return BOSS_ID_TO_ENTITY_TYPE_VARIANT[bossID]
51480
51557
  end
@@ -51495,21 +51572,21 @@ local function getNumBossSegments(self, entityType, variant, numSegments)
51495
51572
  return numSegments
51496
51573
  end
51497
51574
  repeat
51498
- local ____switch22 = entityType
51499
- local ____cond22 = ____switch22 == EntityType.CHUB
51500
- if ____cond22 then
51575
+ local ____switch23 = entityType
51576
+ local ____cond23 = ____switch23 == EntityType.CHUB
51577
+ if ____cond23 then
51501
51578
  do
51502
51579
  return 3
51503
51580
  end
51504
51581
  end
51505
- ____cond22 = ____cond22 or ____switch22 == EntityType.LOKI
51506
- if ____cond22 then
51582
+ ____cond23 = ____cond23 or ____switch23 == EntityType.LOKI
51583
+ if ____cond23 then
51507
51584
  do
51508
51585
  return variant == LokiVariant.LOKII and 2 or 1
51509
51586
  end
51510
51587
  end
51511
- ____cond22 = ____cond22 or ____switch22 == EntityType.GURGLING
51512
- if ____cond22 then
51588
+ ____cond23 = ____cond23 or ____switch23 == EntityType.GURGLING
51589
+ if ____cond23 then
51513
51590
  do
51514
51591
  return 2
51515
51592
  end
@@ -51996,14 +52073,8 @@ ____exports.VERSUS_SCREEN_BACKGROUND_COLORS = {
51996
52073
  [StageID.CATHEDRAL] = newReadonlyColor(nil, 6 / 255, 13 / 255, 17 / 255),
51997
52074
  [StageID.DARK_ROOM] = newReadonlyColor(nil, 9 / 255, 4 / 255, 3 / 255),
51998
52075
  [StageID.CHEST] = newReadonlyColor(nil, 15 / 255, 9 / 255, 6 / 255),
51999
- [StageID.SPECIAL_ROOMS_GREED_MODE] = DEFAULT_COLOR,
52000
- [StageID.BASEMENT_GREED_MODE] = BASEMENT_COLOR,
52001
- [StageID.CAVES_GREED_MODE] = CAVES_COLOR,
52002
- [StageID.DEPTHS_GREED_MODE] = DEPTHS_COLOR,
52003
- [StageID.WOMB_GREED_MODE] = WOMB_COLOR,
52004
- [StageID.SHEOL_GREED_MODE] = SHEOL_COLOR,
52005
- [StageID.SHOP_GREED_MODE] = DEFAULT_COLOR,
52006
- [StageID.ULTRA_GREED_GREED_MODE] = DEFAULT_COLOR,
52076
+ [StageID.SHOP] = DEFAULT_COLOR,
52077
+ [StageID.ULTRA_GREED] = DEFAULT_COLOR,
52007
52078
  [StageID.VOID] = newReadonlyColor(nil, 0, 0, 0),
52008
52079
  [StageID.DOWNPOUR] = newReadonlyColor(nil, 29 / 255, 30 / 255, 32 / 255),
52009
52080
  [StageID.DROSS] = newReadonlyColor(nil, 35 / 255, 35 / 255, 29 / 255),
@@ -52051,14 +52122,8 @@ ____exports.VERSUS_SCREEN_DIRT_SPOT_COLORS = {
52051
52122
  [StageID.CATHEDRAL] = newReadonlyColor(nil, 44 / 255, 100 / 255, 111 / 255),
52052
52123
  [StageID.DARK_ROOM] = newReadonlyColor(nil, 80 / 255, 38 / 255, 20 / 255),
52053
52124
  [StageID.CHEST] = newReadonlyColor(nil, 175 / 255, 108 / 255, 72 / 255),
52054
- [StageID.SPECIAL_ROOMS_GREED_MODE] = DEFAULT_COLOR,
52055
- [StageID.BASEMENT_GREED_MODE] = BASEMENT_COLOR,
52056
- [StageID.CAVES_GREED_MODE] = CAVES_COLOR,
52057
- [StageID.DEPTHS_GREED_MODE] = DEPTHS_COLOR,
52058
- [StageID.WOMB_GREED_MODE] = WOMB_COLOR,
52059
- [StageID.SHEOL_GREED_MODE] = SHEOL_COLOR,
52060
- [StageID.SHOP_GREED_MODE] = DEFAULT_COLOR,
52061
- [StageID.ULTRA_GREED_GREED_MODE] = DEFAULT_COLOR,
52125
+ [StageID.SHOP] = DEFAULT_COLOR,
52126
+ [StageID.ULTRA_GREED] = DEFAULT_COLOR,
52062
52127
  [StageID.VOID] = newReadonlyColor(nil, 70 / 255, 5 / 255, 5 / 255),
52063
52128
  [StageID.DOWNPOUR] = newReadonlyColor(nil, 149 / 255, 157 / 255, 167 / 255),
52064
52129
  [StageID.DROSS] = newReadonlyColor(nil, 179 / 255, 179 / 255, 143 / 255),