isaacscript-common 51.1.1 → 51.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.
@@ -4904,6 +4904,8 @@ export declare function getBooleansFromTable(luaMap: LuaMap<string, unknown>, ob
4904
4904
  */
4905
4905
  export declare function getBosses(entityType?: EntityType, variant?: int, subType?: int, ignoreFriendly?: boolean): EntityNPC[];
4906
4906
 
4907
+ export declare function getBossIDFromEntityTypeVariant(entityType: EntityType, variant: int): BossID | undefined;
4908
+
4907
4909
  /**
4908
4910
  * Helper function to get the path to the name file that corresponds to the graphic shown on the
4909
4911
  * versus screen for the particular boss.
@@ -5449,6 +5451,8 @@ export declare function getEntityIDFromConstituents(entityType: EntityType, vari
5449
5451
  */
5450
5452
  export declare function getEntityPositions(entities?: Entity[]): Map<PtrHash, Vector>;
5451
5453
 
5454
+ export declare function getEntityTypeVariantFromBossID(bossID: BossID): readonly [EntityType, int];
5455
+
5452
5456
  /**
5453
5457
  * Helper function to get a map containing the velocities of every entity in the current room.
5454
5458
  *
@@ -1,6 +1,6 @@
1
1
  --[[
2
2
 
3
- isaacscript-common 51.1.1
3
+ isaacscript-common 51.2.0
4
4
 
5
5
  This is the "isaacscript-common" library, which was created with the IsaacScript tool.
6
6
 
@@ -43811,6 +43811,149 @@ function ____exports.getRandomBossRoomFromPool(self, roomsMetadata, bossPool, se
43811
43811
  )
43812
43812
  return ____exports.getRandomCustomStageRoom(nil, roomsMetadataForBoss, seedOrRNG, verbose)
43813
43813
  end
43814
+ return ____exports
43815
+ end,
43816
+ ["src.objects.bossIDToEntityTypeVariant"] = function(...)
43817
+ local ____exports = {}
43818
+ local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.src.index")
43819
+ local BeastVariant = ____isaac_2Dtypescript_2Ddefinitions.BeastVariant
43820
+ local BigHornVariant = ____isaac_2Dtypescript_2Ddefinitions.BigHornVariant
43821
+ local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
43822
+ local ChubVariant = ____isaac_2Dtypescript_2Ddefinitions.ChubVariant
43823
+ local DaddyLongLegsVariant = ____isaac_2Dtypescript_2Ddefinitions.DaddyLongLegsVariant
43824
+ local DingleVariant = ____isaac_2Dtypescript_2Ddefinitions.DingleVariant
43825
+ local DogmaVariant = ____isaac_2Dtypescript_2Ddefinitions.DogmaVariant
43826
+ local DukeOfFliesVariant = ____isaac_2Dtypescript_2Ddefinitions.DukeOfFliesVariant
43827
+ local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
43828
+ local FallenVariant = ____isaac_2Dtypescript_2Ddefinitions.FallenVariant
43829
+ local FistulaVariant = ____isaac_2Dtypescript_2Ddefinitions.FistulaVariant
43830
+ local GeminiVariant = ____isaac_2Dtypescript_2Ddefinitions.GeminiVariant
43831
+ local GurglingVariant = ____isaac_2Dtypescript_2Ddefinitions.GurglingVariant
43832
+ local HauntVariant = ____isaac_2Dtypescript_2Ddefinitions.HauntVariant
43833
+ local IsaacVariant = ____isaac_2Dtypescript_2Ddefinitions.IsaacVariant
43834
+ local LambVariant = ____isaac_2Dtypescript_2Ddefinitions.LambVariant
43835
+ local LarryJrVariant = ____isaac_2Dtypescript_2Ddefinitions.LarryJrVariant
43836
+ local LittleHornVariant = ____isaac_2Dtypescript_2Ddefinitions.LittleHornVariant
43837
+ local LokiVariant = ____isaac_2Dtypescript_2Ddefinitions.LokiVariant
43838
+ local MamaGurdyVariant = ____isaac_2Dtypescript_2Ddefinitions.MamaGurdyVariant
43839
+ local MegaSatanVariant = ____isaac_2Dtypescript_2Ddefinitions.MegaSatanVariant
43840
+ local MomVariant = ____isaac_2Dtypescript_2Ddefinitions.MomVariant
43841
+ local MomsHeartVariant = ____isaac_2Dtypescript_2Ddefinitions.MomsHeartVariant
43842
+ local Monstro2Variant = ____isaac_2Dtypescript_2Ddefinitions.Monstro2Variant
43843
+ local MotherVariant = ____isaac_2Dtypescript_2Ddefinitions.MotherVariant
43844
+ local PeepVariant = ____isaac_2Dtypescript_2Ddefinitions.PeepVariant
43845
+ local PinVariant = ____isaac_2Dtypescript_2Ddefinitions.PinVariant
43846
+ local PolycephalusVariant = ____isaac_2Dtypescript_2Ddefinitions.PolycephalusVariant
43847
+ local RagManVariant = ____isaac_2Dtypescript_2Ddefinitions.RagManVariant
43848
+ local RagMegaVariant = ____isaac_2Dtypescript_2Ddefinitions.RagMegaVariant
43849
+ local RaglichVariant = ____isaac_2Dtypescript_2Ddefinitions.RaglichVariant
43850
+ local SatanVariant = ____isaac_2Dtypescript_2Ddefinitions.SatanVariant
43851
+ local UltraGreedVariant = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedVariant
43852
+ local WarVariant = ____isaac_2Dtypescript_2Ddefinitions.WarVariant
43853
+ local WidowVariant = ____isaac_2Dtypescript_2Ddefinitions.WidowVariant
43854
+ ____exports.BOSS_ID_TO_ENTITY_TYPE_VARIANT = {
43855
+ [BossID.MONSTRO] = {EntityType.MONSTRO, 0},
43856
+ [BossID.LARRY_JR] = {EntityType.LARRY_JR, LarryJrVariant.LARRY_JR},
43857
+ [BossID.CHUB] = {EntityType.CHUB, ChubVariant.CHUB},
43858
+ [BossID.GURDY] = {EntityType.GURDY, 0},
43859
+ [BossID.MONSTRO_2] = {EntityType.MONSTRO_2, Monstro2Variant.MONSTRO_2},
43860
+ [BossID.MOM] = {EntityType.MOM, MomVariant.MOM},
43861
+ [BossID.SCOLEX] = {EntityType.PIN, PinVariant.SCOLEX},
43862
+ [BossID.MOMS_HEART] = {EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART},
43863
+ [BossID.FAMINE] = {EntityType.FAMINE, 0},
43864
+ [BossID.PESTILENCE] = {EntityType.PESTILENCE, 0},
43865
+ [BossID.WAR] = {EntityType.WAR, WarVariant.WAR},
43866
+ [BossID.DEATH] = {EntityType.DEATH, 0},
43867
+ [BossID.DUKE_OF_FLIES] = {EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.DUKE_OF_FLIES},
43868
+ [BossID.PEEP] = {EntityType.PEEP, PeepVariant.PEEP},
43869
+ [BossID.LOKI] = {EntityType.LOKI, LokiVariant.LOKI},
43870
+ [BossID.BLASTOCYST] = {EntityType.BLASTOCYST_BIG, 0},
43871
+ [BossID.GEMINI] = {EntityType.GEMINI, GeminiVariant.GEMINI},
43872
+ [BossID.FISTULA] = {EntityType.FISTULA_BIG, FistulaVariant.FISTULA},
43873
+ [BossID.GISH] = {EntityType.MONSTRO_2, Monstro2Variant.GISH},
43874
+ [BossID.STEVEN] = {EntityType.GEMINI, GeminiVariant.STEVEN},
43875
+ [BossID.CHAD] = {EntityType.CHUB, ChubVariant.CHAD},
43876
+ [BossID.HEADLESS_HORSEMAN] = {EntityType.HEADLESS_HORSEMAN, 0},
43877
+ [BossID.FALLEN] = {EntityType.FALLEN, FallenVariant.FALLEN},
43878
+ [BossID.SATAN] = {EntityType.SATAN, SatanVariant.SATAN},
43879
+ [BossID.IT_LIVES] = {EntityType.MOMS_HEART, MomsHeartVariant.IT_LIVES},
43880
+ [BossID.HOLLOW] = {EntityType.LARRY_JR, LarryJrVariant.HOLLOW},
43881
+ [BossID.CARRION_QUEEN] = {EntityType.CHUB, ChubVariant.CARRION_QUEEN},
43882
+ [BossID.GURDY_JR] = {EntityType.GURDY_JR, 0},
43883
+ [BossID.HUSK] = {EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.HUSK},
43884
+ [BossID.BLOAT] = {EntityType.PEEP, PeepVariant.BLOAT},
43885
+ [BossID.LOKII] = {EntityType.LOKI, LokiVariant.LOKII},
43886
+ [BossID.BLIGHTED_OVUM] = {EntityType.GEMINI, GeminiVariant.BLIGHTED_OVUM},
43887
+ [BossID.TERATOMA] = {EntityType.FISTULA_BIG, FistulaVariant.TERATOMA},
43888
+ [BossID.WIDOW] = {EntityType.WIDOW, WidowVariant.WIDOW},
43889
+ [BossID.MASK_OF_INFAMY] = {EntityType.MASK_OF_INFAMY, 0},
43890
+ [BossID.WRETCHED] = {EntityType.WIDOW, WidowVariant.WRETCHED},
43891
+ [BossID.PIN] = {EntityType.PIN, PinVariant.PIN},
43892
+ [BossID.CONQUEST] = {EntityType.WAR, WarVariant.CONQUEST},
43893
+ [BossID.ISAAC] = {EntityType.ISAAC, IsaacVariant.ISAAC},
43894
+ [BossID.BLUE_BABY] = {EntityType.ISAAC, IsaacVariant.BLUE_BABY},
43895
+ [BossID.DADDY_LONG_LEGS] = {EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.DADDY_LONG_LEGS},
43896
+ [BossID.TRIACHNID] = {EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.TRIACHNID},
43897
+ [BossID.HAUNT] = {EntityType.HAUNT, HauntVariant.HAUNT},
43898
+ [BossID.DINGLE] = {EntityType.DINGLE, DingleVariant.DINGLE},
43899
+ [BossID.MEGA_MAW] = {EntityType.MEGA_MAW, 0},
43900
+ [BossID.GATE] = {EntityType.GATE, 0},
43901
+ [BossID.MEGA_FATTY] = {EntityType.MEGA_FATTY, 0},
43902
+ [BossID.CAGE] = {EntityType.CAGE, 0},
43903
+ [BossID.MAMA_GURDY] = {EntityType.MAMA_GURDY, MamaGurdyVariant.MAMA_GURDY},
43904
+ [BossID.DARK_ONE] = {EntityType.DARK_ONE, 0},
43905
+ [BossID.ADVERSARY] = {EntityType.ADVERSARY, 0},
43906
+ [BossID.POLYCEPHALUS] = {EntityType.POLYCEPHALUS, PolycephalusVariant.POLYCEPHALUS},
43907
+ [BossID.MR_FRED] = {EntityType.MR_FRED, 0},
43908
+ [BossID.LAMB] = {EntityType.LAMB, LambVariant.LAMB},
43909
+ [BossID.MEGA_SATAN] = {EntityType.MEGA_SATAN, MegaSatanVariant.MEGA_SATAN},
43910
+ [BossID.GURGLING] = {EntityType.GURGLING, GurglingVariant.GURGLING_BOSS},
43911
+ [BossID.STAIN] = {EntityType.STAIN, 0},
43912
+ [BossID.BROWNIE] = {EntityType.BROWNIE, 0},
43913
+ [BossID.FORSAKEN] = {EntityType.FORSAKEN, 0},
43914
+ [BossID.LITTLE_HORN] = {EntityType.LITTLE_HORN, LittleHornVariant.LITTLE_HORN},
43915
+ [BossID.RAG_MAN] = {EntityType.RAG_MAN, RagManVariant.RAG_MAN},
43916
+ [BossID.ULTRA_GREED] = {EntityType.ULTRA_GREED, UltraGreedVariant.ULTRA_GREED},
43917
+ [BossID.HUSH] = {EntityType.HUSH, 0},
43918
+ [BossID.DANGLE] = {EntityType.DINGLE, DingleVariant.DANGLE},
43919
+ [BossID.TURDLING] = {EntityType.GURGLING, GurglingVariant.TURDLING},
43920
+ [BossID.FRAIL] = {EntityType.PIN, PinVariant.FRAIL},
43921
+ [BossID.RAG_MEGA] = {EntityType.RAG_MEGA, RagMegaVariant.RAG_MEGA},
43922
+ [BossID.SISTERS_VIS] = {EntityType.SISTERS_VIS, 0},
43923
+ [BossID.BIG_HORN] = {EntityType.BIG_HORN, BigHornVariant.BIG_HORN},
43924
+ [BossID.DELIRIUM] = {EntityType.DELIRIUM, 0},
43925
+ [BossID.MATRIARCH] = {EntityType.MATRIARCH, 0},
43926
+ [BossID.PILE] = {EntityType.POLYCEPHALUS, PolycephalusVariant.PILE},
43927
+ [BossID.REAP_CREEP] = {EntityType.REAP_CREEP, 0},
43928
+ [BossID.LIL_BLUB] = {EntityType.LIL_BLUB, 0},
43929
+ [BossID.WORMWOOD] = {EntityType.PIN, PinVariant.WORMWOOD},
43930
+ [BossID.RAINMAKER] = {EntityType.RAINMAKER, 0},
43931
+ [BossID.VISAGE] = {EntityType.VISAGE, 0},
43932
+ [BossID.SIREN] = {EntityType.SIREN, 0},
43933
+ [BossID.TUFF_TWINS] = {EntityType.LARRY_JR, LarryJrVariant.TUFF_TWIN},
43934
+ [BossID.HERETIC] = {EntityType.HERETIC, 0},
43935
+ [BossID.HORNFEL] = {EntityType.HORNFEL, 0},
43936
+ [BossID.GREAT_GIDEON] = {EntityType.GREAT_GIDEON, 0},
43937
+ [BossID.BABY_PLUM] = {EntityType.BABY_PLUM, 0},
43938
+ [BossID.SCOURGE] = {EntityType.SCOURGE, 0},
43939
+ [BossID.CHIMERA] = {EntityType.CHIMERA, 0},
43940
+ [BossID.ROTGUT] = {EntityType.ROTGUT, 0},
43941
+ [BossID.MOTHER] = {EntityType.MOTHER, MotherVariant.MOTHER_1},
43942
+ [BossID.MAUSOLEUM_MOM] = {EntityType.MOM, MomVariant.MOM},
43943
+ [BossID.MAUSOLEUM_MOMS_HEART] = {EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART},
43944
+ [BossID.MIN_MIN] = {EntityType.MIN_MIN, 0},
43945
+ [BossID.CLOG] = {EntityType.CLOG, 0},
43946
+ [BossID.SINGE] = {EntityType.SINGE, 0},
43947
+ [BossID.BUMBINO] = {EntityType.BUMBINO, 0},
43948
+ [BossID.COLOSTOMIA] = {EntityType.COLOSTOMIA, 0},
43949
+ [BossID.SHELL] = {EntityType.LARRY_JR, LarryJrVariant.SHELL},
43950
+ [BossID.TURDLET] = {EntityType.TURDLET, 0},
43951
+ [BossID.RAGLICH] = {EntityType.RAGLICH, RaglichVariant.RAGLICH},
43952
+ [BossID.DOGMA] = {EntityType.DOGMA, DogmaVariant.DOGMA_PHASE_1},
43953
+ [BossID.BEAST] = {EntityType.BEAST, BeastVariant.BEAST},
43954
+ [BossID.HORNY_BOYS] = {EntityType.HORNY_BOYS, 0},
43955
+ [BossID.CLUTCH] = {EntityType.CLUTCH, 0}
43956
+ }
43814
43957
  return ____exports
43815
43958
  end,
43816
43959
  ["src.sets.bossSets"] = function(...)
@@ -44155,11 +44298,13 @@ local STORY_BOSS_IDS_SET = __TS__New(ReadonlySet, {
44155
44298
  BossID.HUSH,
44156
44299
  BossID.DELIRIUM,
44157
44300
  BossID.MOTHER,
44301
+ BossID.MAUSOLEUM_MOM,
44302
+ BossID.MAUSOLEUM_MOMS_HEART,
44158
44303
  BossID.DOGMA,
44159
44304
  BossID.BEAST
44160
44305
  })
44161
- if STORY_BOSS_IDS_SET.size + 1 ~= STORY_BOSSES_SET.size then
44162
- error("The size of \"STORY_BOSS_IDS_SET\" is not the same as \"STORY_BOSSES_SET\".")
44306
+ if STORY_BOSS_IDS_SET.size + 1 - 2 ~= STORY_BOSSES_SET.size then
44307
+ error("The \"STORY_BOSS_IDS_SET\" and the \"STORY_BOSSES_SET\" do not match.")
44163
44308
  end
44164
44309
  ____exports.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = (function()
44165
44310
  local allBossesSet = copySet(nil, ____exports.ALL_BOSSES_SET)
@@ -44306,14 +44451,17 @@ return ____exports
44306
44451
  ["src.functions.bosses"] = function(...)
44307
44452
  local ____lualib = require("lualib_bundle")
44308
44453
  local __TS__New = ____lualib.__TS__New
44454
+ local Map = ____lualib.Map
44455
+ local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
44309
44456
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
44310
44457
  local ____exports = {}
44311
- local getNumBossSegments, DEFAULT_BOSS_MULTI_SEGMENTS
44312
44458
  local ____isaac_2Dtypescript_2Ddefinitions = require("lua_modules.isaac-typescript-definitions.dist.src.index")
44313
44459
  local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
44314
44460
  local LokiVariant = ____isaac_2Dtypescript_2Ddefinitions.LokiVariant
44315
44461
  local ____constants = require("src.core.constants")
44316
44462
  local VectorZero = ____constants.VectorZero
44463
+ local ____bossIDToEntityTypeVariant = require("src.objects.bossIDToEntityTypeVariant")
44464
+ local BOSS_ID_TO_ENTITY_TYPE_VARIANT = ____bossIDToEntityTypeVariant.BOSS_ID_TO_ENTITY_TYPE_VARIANT
44317
44465
  local ____bossSets = require("src.sets.bossSets")
44318
44466
  local ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = ____bossSets.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
44319
44467
  local ALL_BOSSES_SET = ____bossSets.ALL_BOSSES_SET
@@ -44334,37 +44482,6 @@ local ____types = require("src.functions.types")
44334
44482
  local asNumber = ____types.asNumber
44335
44483
  local ____utils = require("src.functions.utils")
44336
44484
  local ____repeat = ____utils["repeat"]
44337
- function getNumBossSegments(self, entityType, variant, numSegments)
44338
- if numSegments ~= nil then
44339
- return numSegments
44340
- end
44341
- repeat
44342
- local ____switch16 = entityType
44343
- local ____cond16 = ____switch16 == EntityType.CHUB
44344
- if ____cond16 then
44345
- do
44346
- return 3
44347
- end
44348
- end
44349
- ____cond16 = ____cond16 or ____switch16 == EntityType.LOKI
44350
- if ____cond16 then
44351
- do
44352
- return variant == asNumber(nil, LokiVariant.LOKII) and 2 or 1
44353
- end
44354
- end
44355
- ____cond16 = ____cond16 or ____switch16 == EntityType.GURGLING
44356
- if ____cond16 then
44357
- do
44358
- return 2
44359
- end
44360
- end
44361
- do
44362
- do
44363
- return DEFAULT_BOSS_MULTI_SEGMENTS
44364
- end
44365
- end
44366
- until true
44367
- end
44368
44485
  local BOSSES_THAT_REQUIRE_MULTIPLE_SPAWNS = __TS__New(ReadonlySet, {
44369
44486
  EntityType.LARRY_JR,
44370
44487
  EntityType.CHUB,
@@ -44372,7 +44489,19 @@ local BOSSES_THAT_REQUIRE_MULTIPLE_SPAWNS = __TS__New(ReadonlySet, {
44372
44489
  EntityType.GURGLING,
44373
44490
  EntityType.TURDLET
44374
44491
  })
44375
- DEFAULT_BOSS_MULTI_SEGMENTS = 4
44492
+ local DEFAULT_BOSS_MULTI_SEGMENTS = 4
44493
+ local ENTITY_TYPE_VARIANT_TO_BOSS_ID = (function()
44494
+ local entityTypeVariantToBossID = __TS__New(Map)
44495
+ for ____, ____value in ipairs(__TS__ObjectEntries(BOSS_ID_TO_ENTITY_TYPE_VARIANT)) do
44496
+ local bossIDRaw = ____value[1]
44497
+ local entityTypeVariant = ____value[2]
44498
+ local bossID = bossIDRaw
44499
+ local entityType, variant = table.unpack(entityTypeVariant)
44500
+ local entityTypeVariantString = (tostring(entityType) .. ".") .. tostring(variant)
44501
+ entityTypeVariantToBossID:set(entityTypeVariantString, bossID)
44502
+ end
44503
+ return entityTypeVariantToBossID
44504
+ end)(nil)
44376
44505
  function ____exports.getAliveBosses(self, entityType, variant, subType, ignoreFriendly)
44377
44506
  if entityType == nil then
44378
44507
  entityType = -1
@@ -44404,6 +44533,10 @@ function ____exports.getAllBossesSet(self, includeStoryBosses)
44404
44533
  end
44405
44534
  return includeStoryBosses and ALL_BOSSES_SET or ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
44406
44535
  end
44536
+ function ____exports.getBossIDFromEntityTypeVariant(self, entityType, variant)
44537
+ local entityTypeVariant = (tostring(entityType) .. ".") .. tostring(variant)
44538
+ return ENTITY_TYPE_VARIANT_TO_BOSS_ID:get(entityTypeVariant)
44539
+ end
44407
44540
  function ____exports.getBossSet(self, stage, stageType)
44408
44541
  local stageTypeMap = STAGE_TO_STAGE_TYPE_TO_BOSS_SET_MAP:get(stage)
44409
44542
  if stageTypeMap == nil then
@@ -44430,9 +44563,43 @@ end
44430
44563
  function ____exports.getCombinedBossSet(self, stage)
44431
44564
  return STAGE_TO_COMBINED_BOSS_SET_MAP:get(stage)
44432
44565
  end
44566
+ function ____exports.getEntityTypeVariantFromBossID(self, bossID)
44567
+ return BOSS_ID_TO_ENTITY_TYPE_VARIANT[bossID]
44568
+ end
44433
44569
  function ____exports.isSin(self, npc)
44434
44570
  return SIN_ENTITY_TYPES_SET:has(npc.Type)
44435
44571
  end
44572
+ local function getNumBossSegments(self, entityType, variant, numSegments)
44573
+ if numSegments ~= nil then
44574
+ return numSegments
44575
+ end
44576
+ repeat
44577
+ local ____switch18 = entityType
44578
+ local ____cond18 = ____switch18 == EntityType.CHUB
44579
+ if ____cond18 then
44580
+ do
44581
+ return 3
44582
+ end
44583
+ end
44584
+ ____cond18 = ____cond18 or ____switch18 == EntityType.LOKI
44585
+ if ____cond18 then
44586
+ do
44587
+ return variant == asNumber(nil, LokiVariant.LOKII) and 2 or 1
44588
+ end
44589
+ end
44590
+ ____cond18 = ____cond18 or ____switch18 == EntityType.GURGLING
44591
+ if ____cond18 then
44592
+ do
44593
+ return 2
44594
+ end
44595
+ end
44596
+ do
44597
+ do
44598
+ return DEFAULT_BOSS_MULTI_SEGMENTS
44599
+ end
44600
+ end
44601
+ until true
44602
+ end
44436
44603
  function ____exports.spawnBoss(self, entityType, variant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG, numSegments)
44437
44604
  if velocity == nil then
44438
44605
  velocity = VectorZero
@@ -30,6 +30,7 @@ export declare function getAliveBosses(entityType?: EntityType | -1, variant?: n
30
30
  * Default is true.
31
31
  */
32
32
  export declare function getAllBossesSet(includeStoryBosses?: boolean): ReadonlySet<BossID>;
33
+ export declare function getBossIDFromEntityTypeVariant(entityType: EntityType, variant: int): BossID | undefined;
33
34
  /**
34
35
  * Helper function to get the set of vanilla bosses for a particular stage and stage type
35
36
  * combination.
@@ -57,6 +58,7 @@ export declare function getBosses(entityType?: EntityType, variant?: int, subTyp
57
58
  * Also see the `getAllBossesSet` and `getBossSet` functions.
58
59
  */
59
60
  export declare function getCombinedBossSet(stage: LevelStage): ReadonlySet<BossID> | undefined;
61
+ export declare function getEntityTypeVariantFromBossID(bossID: BossID): readonly [EntityType, int];
60
62
  /** Helper function to check if the provided NPC is a Sin miniboss, such as Sloth or Lust. */
61
63
  export declare function isSin(npc: EntityNPC): boolean;
62
64
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"bosses.d.ts","sourceRoot":"","sources":["../../../src/functions/bosses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACV,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAe,MAAM,8BAA8B,CAAC;AA0BvE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,UAAU,GAAE,UAAU,GAAG,CAAC,CAAM,EAChC,OAAO,SAAK,EACZ,OAAO,SAAK,EACZ,cAAc,UAAQ,GACrB,SAAS,EAAE,CAGb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,UAAO,GACxB,WAAW,CAAC,MAAM,CAAC,CAIrB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,SAAS,GACnB,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAOjC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,GAAG,EACb,OAAO,CAAC,EAAE,GAAG,EACb,cAAc,UAAQ,GACrB,SAAS,EAAE,CAGb;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,GAChB,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAEjC;AAED,6FAA6F;AAC7F,wBAAgB,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAE7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,mBAAmB,EAAE,MAAM,GAAG,GAAG,EACjC,QAAQ,GAAE,MAAmB,EAC7B,OAAO,GAAE,MAAM,GAAG,SAAqB,EACvC,SAAS,GAAE,IAAI,GAAG,GAAG,GAAG,SAAqB,EAC7C,WAAW,CAAC,EAAE,GAAG,GAChB,SAAS,CAiCX;AAmCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,mBAAmB,EAAE,MAAM,GAAG,GAAG,EACjC,SAAS,EAAE,IAAI,GAAG,GAAG,EACrB,QAAQ,GAAE,MAAmB,EAC7B,OAAO,GAAE,MAAM,GAAG,SAAqB,EACvC,WAAW,CAAC,EAAE,GAAG,GAChB,SAAS,CAYX"}
1
+ {"version":3,"file":"bosses.d.ts","sourceRoot":"","sources":["../../../src/functions/bosses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACV,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAe,MAAM,8BAA8B,CAAC;AA0CvE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,UAAU,GAAE,UAAU,GAAG,CAAC,CAAM,EAChC,OAAO,SAAK,EACZ,OAAO,SAAK,EACZ,cAAc,UAAQ,GACrB,SAAS,EAAE,CAGb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,UAAO,GACxB,WAAW,CAAC,MAAM,CAAC,CAIrB;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,GAAG,GACX,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,SAAS,GACnB,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAOjC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,GAAG,EACb,OAAO,CAAC,EAAE,GAAG,EACb,cAAc,UAAQ,GACrB,SAAS,EAAE,CAGb;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,GAChB,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAEjC;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,GACb,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAE5B;AAED,6FAA6F;AAC7F,wBAAgB,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAE7C;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,mBAAmB,EAAE,MAAM,GAAG,GAAG,EACjC,QAAQ,GAAE,MAAmB,EAC7B,OAAO,GAAE,MAAM,GAAG,SAAqB,EACvC,SAAS,GAAE,IAAI,GAAG,GAAG,GAAG,SAAqB,EAC7C,WAAW,CAAC,EAAE,GAAG,GAChB,SAAS,CAiCX;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,mBAAmB,EAAE,MAAM,GAAG,GAAG,EACjC,SAAS,EAAE,IAAI,GAAG,GAAG,EACrB,QAAQ,GAAE,MAAmB,EAC7B,OAAO,GAAE,MAAM,GAAG,SAAqB,EACvC,WAAW,CAAC,EAAE,GAAG,GAChB,SAAS,CAYX"}
@@ -1,13 +1,16 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__New = ____lualib.__TS__New
3
+ local Map = ____lualib.Map
4
+ local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
3
5
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
4
6
  local ____exports = {}
5
- local getNumBossSegments, DEFAULT_BOSS_MULTI_SEGMENTS
6
7
  local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
7
8
  local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
8
9
  local LokiVariant = ____isaac_2Dtypescript_2Ddefinitions.LokiVariant
9
10
  local ____constants = require("src.core.constants")
10
11
  local VectorZero = ____constants.VectorZero
12
+ local ____bossIDToEntityTypeVariant = require("src.objects.bossIDToEntityTypeVariant")
13
+ local BOSS_ID_TO_ENTITY_TYPE_VARIANT = ____bossIDToEntityTypeVariant.BOSS_ID_TO_ENTITY_TYPE_VARIANT
11
14
  local ____bossSets = require("src.sets.bossSets")
12
15
  local ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = ____bossSets.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
13
16
  local ALL_BOSSES_SET = ____bossSets.ALL_BOSSES_SET
@@ -28,37 +31,6 @@ local ____types = require("src.functions.types")
28
31
  local asNumber = ____types.asNumber
29
32
  local ____utils = require("src.functions.utils")
30
33
  local ____repeat = ____utils["repeat"]
31
- function getNumBossSegments(self, entityType, variant, numSegments)
32
- if numSegments ~= nil then
33
- return numSegments
34
- end
35
- repeat
36
- local ____switch16 = entityType
37
- local ____cond16 = ____switch16 == EntityType.CHUB
38
- if ____cond16 then
39
- do
40
- return 3
41
- end
42
- end
43
- ____cond16 = ____cond16 or ____switch16 == EntityType.LOKI
44
- if ____cond16 then
45
- do
46
- return variant == asNumber(nil, LokiVariant.LOKII) and 2 or 1
47
- end
48
- end
49
- ____cond16 = ____cond16 or ____switch16 == EntityType.GURGLING
50
- if ____cond16 then
51
- do
52
- return 2
53
- end
54
- end
55
- do
56
- do
57
- return DEFAULT_BOSS_MULTI_SEGMENTS
58
- end
59
- end
60
- until true
61
- end
62
34
  local BOSSES_THAT_REQUIRE_MULTIPLE_SPAWNS = __TS__New(ReadonlySet, {
63
35
  EntityType.LARRY_JR,
64
36
  EntityType.CHUB,
@@ -66,7 +38,19 @@ local BOSSES_THAT_REQUIRE_MULTIPLE_SPAWNS = __TS__New(ReadonlySet, {
66
38
  EntityType.GURGLING,
67
39
  EntityType.TURDLET
68
40
  })
69
- DEFAULT_BOSS_MULTI_SEGMENTS = 4
41
+ local DEFAULT_BOSS_MULTI_SEGMENTS = 4
42
+ local ENTITY_TYPE_VARIANT_TO_BOSS_ID = (function()
43
+ local entityTypeVariantToBossID = __TS__New(Map)
44
+ for ____, ____value in ipairs(__TS__ObjectEntries(BOSS_ID_TO_ENTITY_TYPE_VARIANT)) do
45
+ local bossIDRaw = ____value[1]
46
+ local entityTypeVariant = ____value[2]
47
+ local bossID = bossIDRaw
48
+ local entityType, variant = table.unpack(entityTypeVariant)
49
+ local entityTypeVariantString = (tostring(entityType) .. ".") .. tostring(variant)
50
+ entityTypeVariantToBossID:set(entityTypeVariantString, bossID)
51
+ end
52
+ return entityTypeVariantToBossID
53
+ end)(nil)
70
54
  --- Helper function to get all of the non-dead bosses in the room.
71
55
  --
72
56
  -- This function will not include bosses on an internal blacklist, such as Death's scythes or Big
@@ -122,6 +106,10 @@ function ____exports.getAllBossesSet(self, includeStoryBosses)
122
106
  end
123
107
  return includeStoryBosses and ALL_BOSSES_SET or ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET
124
108
  end
109
+ function ____exports.getBossIDFromEntityTypeVariant(self, entityType, variant)
110
+ local entityTypeVariant = (tostring(entityType) .. ".") .. tostring(variant)
111
+ return ENTITY_TYPE_VARIANT_TO_BOSS_ID:get(entityTypeVariant)
112
+ end
125
113
  --- Helper function to get the set of vanilla bosses for a particular stage and stage type
126
114
  -- combination.
127
115
  --
@@ -166,10 +154,44 @@ end
166
154
  function ____exports.getCombinedBossSet(self, stage)
167
155
  return STAGE_TO_COMBINED_BOSS_SET_MAP:get(stage)
168
156
  end
157
+ function ____exports.getEntityTypeVariantFromBossID(self, bossID)
158
+ return BOSS_ID_TO_ENTITY_TYPE_VARIANT[bossID]
159
+ end
169
160
  --- Helper function to check if the provided NPC is a Sin miniboss, such as Sloth or Lust.
170
161
  function ____exports.isSin(self, npc)
171
162
  return SIN_ENTITY_TYPES_SET:has(npc.Type)
172
163
  end
164
+ local function getNumBossSegments(self, entityType, variant, numSegments)
165
+ if numSegments ~= nil then
166
+ return numSegments
167
+ end
168
+ repeat
169
+ local ____switch18 = entityType
170
+ local ____cond18 = ____switch18 == EntityType.CHUB
171
+ if ____cond18 then
172
+ do
173
+ return 3
174
+ end
175
+ end
176
+ ____cond18 = ____cond18 or ____switch18 == EntityType.LOKI
177
+ if ____cond18 then
178
+ do
179
+ return variant == asNumber(nil, LokiVariant.LOKII) and 2 or 1
180
+ end
181
+ end
182
+ ____cond18 = ____cond18 or ____switch18 == EntityType.GURGLING
183
+ if ____cond18 then
184
+ do
185
+ return 2
186
+ end
187
+ end
188
+ do
189
+ do
190
+ return DEFAULT_BOSS_MULTI_SEGMENTS
191
+ end
192
+ end
193
+ until true
194
+ end
173
195
  --- Helper function to spawn a boss.
174
196
  --
175
197
  -- Use this function instead of `spawnNPC` since it handles automatically spawning multiple segments
@@ -0,0 +1,105 @@
1
+ import { BeastVariant, BigHornVariant, ChubVariant, DaddyLongLegsVariant, DingleVariant, DogmaVariant, DukeOfFliesVariant, EntityType, FallenVariant, FistulaVariant, GeminiVariant, GurglingVariant, HauntVariant, IsaacVariant, LambVariant, LarryJrVariant, LittleHornVariant, LokiVariant, MamaGurdyVariant, MegaSatanVariant, MomVariant, MomsHeartVariant, Monstro2Variant, MotherVariant, PeepVariant, PinVariant, PolycephalusVariant, RagManVariant, RagMegaVariant, RaglichVariant, SatanVariant, UltraGreedVariant, WarVariant, WidowVariant } from "isaac-typescript-definitions";
2
+ export declare const BOSS_ID_TO_ENTITY_TYPE_VARIANT: {
3
+ readonly 1: readonly [EntityType.MONSTRO, 0];
4
+ readonly 2: readonly [EntityType.LARRY_JR, LarryJrVariant.LARRY_JR];
5
+ readonly 3: readonly [EntityType.CHUB, ChubVariant.CHUB];
6
+ readonly 4: readonly [EntityType.GURDY, 0];
7
+ readonly 5: readonly [EntityType.MONSTRO_2, Monstro2Variant.MONSTRO_2];
8
+ readonly 6: readonly [EntityType.MOM, MomVariant.MOM];
9
+ readonly 7: readonly [EntityType.PIN, PinVariant.SCOLEX];
10
+ readonly 8: readonly [EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART];
11
+ readonly 9: readonly [EntityType.FAMINE, 0];
12
+ readonly 10: readonly [EntityType.PESTILENCE, 0];
13
+ readonly 11: readonly [EntityType.WAR, WarVariant.WAR];
14
+ readonly 12: readonly [EntityType.DEATH, 0];
15
+ readonly 13: readonly [EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.DUKE_OF_FLIES];
16
+ readonly 14: readonly [EntityType.PEEP, PeepVariant.PEEP];
17
+ readonly 15: readonly [EntityType.LOKI, LokiVariant.LOKI];
18
+ readonly 16: readonly [EntityType.BLASTOCYST_BIG, 0];
19
+ readonly 17: readonly [EntityType.GEMINI, GeminiVariant.GEMINI];
20
+ readonly 18: readonly [EntityType.FISTULA_BIG, FistulaVariant.FISTULA];
21
+ readonly 19: readonly [EntityType.MONSTRO_2, Monstro2Variant.GISH];
22
+ readonly 20: readonly [EntityType.GEMINI, GeminiVariant.STEVEN];
23
+ readonly 21: readonly [EntityType.CHUB, ChubVariant.CHAD];
24
+ readonly 22: readonly [EntityType.HEADLESS_HORSEMAN, 0];
25
+ readonly 23: readonly [EntityType.FALLEN, FallenVariant.FALLEN];
26
+ readonly 24: readonly [EntityType.SATAN, SatanVariant.SATAN];
27
+ readonly 25: readonly [EntityType.MOMS_HEART, MomsHeartVariant.IT_LIVES];
28
+ readonly 26: readonly [EntityType.LARRY_JR, LarryJrVariant.HOLLOW];
29
+ readonly 27: readonly [EntityType.CHUB, ChubVariant.CARRION_QUEEN];
30
+ readonly 28: readonly [EntityType.GURDY_JR, 0];
31
+ readonly 29: readonly [EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.HUSK];
32
+ readonly 30: readonly [EntityType.PEEP, PeepVariant.BLOAT];
33
+ readonly 31: readonly [EntityType.LOKI, LokiVariant.LOKII];
34
+ readonly 32: readonly [EntityType.GEMINI, GeminiVariant.BLIGHTED_OVUM];
35
+ readonly 33: readonly [EntityType.FISTULA_BIG, FistulaVariant.TERATOMA];
36
+ readonly 34: readonly [EntityType.WIDOW, WidowVariant.WIDOW];
37
+ readonly 35: readonly [EntityType.MASK_OF_INFAMY, 0];
38
+ readonly 36: readonly [EntityType.WIDOW, WidowVariant.WRETCHED];
39
+ readonly 37: readonly [EntityType.PIN, PinVariant.PIN];
40
+ readonly 38: readonly [EntityType.WAR, WarVariant.CONQUEST];
41
+ readonly 39: readonly [EntityType.ISAAC, IsaacVariant.ISAAC];
42
+ readonly 40: readonly [EntityType.ISAAC, IsaacVariant.BLUE_BABY];
43
+ readonly 41: readonly [EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.DADDY_LONG_LEGS];
44
+ readonly 42: readonly [EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.TRIACHNID];
45
+ readonly 43: readonly [EntityType.HAUNT, HauntVariant.HAUNT];
46
+ readonly 44: readonly [EntityType.DINGLE, DingleVariant.DINGLE];
47
+ readonly 45: readonly [EntityType.MEGA_MAW, 0];
48
+ readonly 46: readonly [EntityType.GATE, 0];
49
+ readonly 47: readonly [EntityType.MEGA_FATTY, 0];
50
+ readonly 48: readonly [EntityType.CAGE, 0];
51
+ readonly 49: readonly [EntityType.MAMA_GURDY, MamaGurdyVariant.MAMA_GURDY];
52
+ readonly 50: readonly [EntityType.DARK_ONE, 0];
53
+ readonly 51: readonly [EntityType.ADVERSARY, 0];
54
+ readonly 52: readonly [EntityType.POLYCEPHALUS, PolycephalusVariant.POLYCEPHALUS];
55
+ readonly 53: readonly [EntityType.MR_FRED, 0];
56
+ readonly 54: readonly [EntityType.LAMB, LambVariant.LAMB];
57
+ readonly 55: readonly [EntityType.MEGA_SATAN, MegaSatanVariant.MEGA_SATAN];
58
+ readonly 56: readonly [EntityType.GURGLING, GurglingVariant.GURGLING_BOSS];
59
+ readonly 57: readonly [EntityType.STAIN, 0];
60
+ readonly 58: readonly [EntityType.BROWNIE, 0];
61
+ readonly 59: readonly [EntityType.FORSAKEN, 0];
62
+ readonly 60: readonly [EntityType.LITTLE_HORN, LittleHornVariant.LITTLE_HORN];
63
+ readonly 61: readonly [EntityType.RAG_MAN, RagManVariant.RAG_MAN];
64
+ readonly 62: readonly [EntityType.ULTRA_GREED, UltraGreedVariant.ULTRA_GREED];
65
+ readonly 63: readonly [EntityType.HUSH, 0];
66
+ readonly 64: readonly [EntityType.DINGLE, DingleVariant.DANGLE];
67
+ readonly 65: readonly [EntityType.GURGLING, GurglingVariant.TURDLING];
68
+ readonly 66: readonly [EntityType.PIN, PinVariant.FRAIL];
69
+ readonly 67: readonly [EntityType.RAG_MEGA, RagMegaVariant.RAG_MEGA];
70
+ readonly 68: readonly [EntityType.SISTERS_VIS, 0];
71
+ readonly 69: readonly [EntityType.BIG_HORN, BigHornVariant.BIG_HORN];
72
+ readonly 70: readonly [EntityType.DELIRIUM, 0];
73
+ readonly 72: readonly [EntityType.MATRIARCH, 0];
74
+ readonly 73: readonly [EntityType.POLYCEPHALUS, PolycephalusVariant.PILE];
75
+ readonly 74: readonly [EntityType.REAP_CREEP, 0];
76
+ readonly 75: readonly [EntityType.LIL_BLUB, 0];
77
+ readonly 76: readonly [EntityType.PIN, PinVariant.WORMWOOD];
78
+ readonly 77: readonly [EntityType.RAINMAKER, 0];
79
+ readonly 78: readonly [EntityType.VISAGE, 0];
80
+ readonly 79: readonly [EntityType.SIREN, 0];
81
+ readonly 80: readonly [EntityType.LARRY_JR, LarryJrVariant.TUFF_TWIN];
82
+ readonly 81: readonly [EntityType.HERETIC, 0];
83
+ readonly 82: readonly [EntityType.HORNFEL, 0];
84
+ readonly 83: readonly [EntityType.GREAT_GIDEON, 0];
85
+ readonly 84: readonly [EntityType.BABY_PLUM, 0];
86
+ readonly 85: readonly [EntityType.SCOURGE, 0];
87
+ readonly 86: readonly [EntityType.CHIMERA, 0];
88
+ readonly 87: readonly [EntityType.ROTGUT, 0];
89
+ readonly 88: readonly [EntityType.MOTHER, MotherVariant.MOTHER_1];
90
+ readonly 89: readonly [EntityType.MOM, MomVariant.MOM];
91
+ readonly 90: readonly [EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART];
92
+ readonly 91: readonly [EntityType.MIN_MIN, 0];
93
+ readonly 92: readonly [EntityType.CLOG, 0];
94
+ readonly 93: readonly [EntityType.SINGE, 0];
95
+ readonly 94: readonly [EntityType.BUMBINO, 0];
96
+ readonly 95: readonly [EntityType.COLOSTOMIA, 0];
97
+ readonly 96: readonly [EntityType.LARRY_JR, LarryJrVariant.SHELL];
98
+ readonly 97: readonly [EntityType.TURDLET, 0];
99
+ readonly 98: readonly [EntityType.RAGLICH, RaglichVariant.RAGLICH];
100
+ readonly 99: readonly [EntityType.DOGMA, DogmaVariant.DOGMA_PHASE_1];
101
+ readonly 100: readonly [EntityType.BEAST, BeastVariant.BEAST];
102
+ readonly 101: readonly [EntityType.HORNY_BOYS, 0];
103
+ readonly 102: readonly [EntityType.CLUTCH, 0];
104
+ };
105
+ //# sourceMappingURL=bossIDToEntityTypeVariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bossIDToEntityTypeVariant.d.ts","sourceRoot":"","sources":["../../../src/objects/bossIDToEntityTypeVariant.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,cAAc,EAEd,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,YAAY,EACb,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgUoB,CAAC"}
@@ -0,0 +1,141 @@
1
+ local ____exports = {}
2
+ local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
3
+ local BeastVariant = ____isaac_2Dtypescript_2Ddefinitions.BeastVariant
4
+ local BigHornVariant = ____isaac_2Dtypescript_2Ddefinitions.BigHornVariant
5
+ local BossID = ____isaac_2Dtypescript_2Ddefinitions.BossID
6
+ local ChubVariant = ____isaac_2Dtypescript_2Ddefinitions.ChubVariant
7
+ local DaddyLongLegsVariant = ____isaac_2Dtypescript_2Ddefinitions.DaddyLongLegsVariant
8
+ local DingleVariant = ____isaac_2Dtypescript_2Ddefinitions.DingleVariant
9
+ local DogmaVariant = ____isaac_2Dtypescript_2Ddefinitions.DogmaVariant
10
+ local DukeOfFliesVariant = ____isaac_2Dtypescript_2Ddefinitions.DukeOfFliesVariant
11
+ local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
12
+ local FallenVariant = ____isaac_2Dtypescript_2Ddefinitions.FallenVariant
13
+ local FistulaVariant = ____isaac_2Dtypescript_2Ddefinitions.FistulaVariant
14
+ local GeminiVariant = ____isaac_2Dtypescript_2Ddefinitions.GeminiVariant
15
+ local GurglingVariant = ____isaac_2Dtypescript_2Ddefinitions.GurglingVariant
16
+ local HauntVariant = ____isaac_2Dtypescript_2Ddefinitions.HauntVariant
17
+ local IsaacVariant = ____isaac_2Dtypescript_2Ddefinitions.IsaacVariant
18
+ local LambVariant = ____isaac_2Dtypescript_2Ddefinitions.LambVariant
19
+ local LarryJrVariant = ____isaac_2Dtypescript_2Ddefinitions.LarryJrVariant
20
+ local LittleHornVariant = ____isaac_2Dtypescript_2Ddefinitions.LittleHornVariant
21
+ local LokiVariant = ____isaac_2Dtypescript_2Ddefinitions.LokiVariant
22
+ local MamaGurdyVariant = ____isaac_2Dtypescript_2Ddefinitions.MamaGurdyVariant
23
+ local MegaSatanVariant = ____isaac_2Dtypescript_2Ddefinitions.MegaSatanVariant
24
+ local MomVariant = ____isaac_2Dtypescript_2Ddefinitions.MomVariant
25
+ local MomsHeartVariant = ____isaac_2Dtypescript_2Ddefinitions.MomsHeartVariant
26
+ local Monstro2Variant = ____isaac_2Dtypescript_2Ddefinitions.Monstro2Variant
27
+ local MotherVariant = ____isaac_2Dtypescript_2Ddefinitions.MotherVariant
28
+ local PeepVariant = ____isaac_2Dtypescript_2Ddefinitions.PeepVariant
29
+ local PinVariant = ____isaac_2Dtypescript_2Ddefinitions.PinVariant
30
+ local PolycephalusVariant = ____isaac_2Dtypescript_2Ddefinitions.PolycephalusVariant
31
+ local RagManVariant = ____isaac_2Dtypescript_2Ddefinitions.RagManVariant
32
+ local RagMegaVariant = ____isaac_2Dtypescript_2Ddefinitions.RagMegaVariant
33
+ local RaglichVariant = ____isaac_2Dtypescript_2Ddefinitions.RaglichVariant
34
+ local SatanVariant = ____isaac_2Dtypescript_2Ddefinitions.SatanVariant
35
+ local UltraGreedVariant = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedVariant
36
+ local WarVariant = ____isaac_2Dtypescript_2Ddefinitions.WarVariant
37
+ local WidowVariant = ____isaac_2Dtypescript_2Ddefinitions.WidowVariant
38
+ ____exports.BOSS_ID_TO_ENTITY_TYPE_VARIANT = {
39
+ [BossID.MONSTRO] = {EntityType.MONSTRO, 0},
40
+ [BossID.LARRY_JR] = {EntityType.LARRY_JR, LarryJrVariant.LARRY_JR},
41
+ [BossID.CHUB] = {EntityType.CHUB, ChubVariant.CHUB},
42
+ [BossID.GURDY] = {EntityType.GURDY, 0},
43
+ [BossID.MONSTRO_2] = {EntityType.MONSTRO_2, Monstro2Variant.MONSTRO_2},
44
+ [BossID.MOM] = {EntityType.MOM, MomVariant.MOM},
45
+ [BossID.SCOLEX] = {EntityType.PIN, PinVariant.SCOLEX},
46
+ [BossID.MOMS_HEART] = {EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART},
47
+ [BossID.FAMINE] = {EntityType.FAMINE, 0},
48
+ [BossID.PESTILENCE] = {EntityType.PESTILENCE, 0},
49
+ [BossID.WAR] = {EntityType.WAR, WarVariant.WAR},
50
+ [BossID.DEATH] = {EntityType.DEATH, 0},
51
+ [BossID.DUKE_OF_FLIES] = {EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.DUKE_OF_FLIES},
52
+ [BossID.PEEP] = {EntityType.PEEP, PeepVariant.PEEP},
53
+ [BossID.LOKI] = {EntityType.LOKI, LokiVariant.LOKI},
54
+ [BossID.BLASTOCYST] = {EntityType.BLASTOCYST_BIG, 0},
55
+ [BossID.GEMINI] = {EntityType.GEMINI, GeminiVariant.GEMINI},
56
+ [BossID.FISTULA] = {EntityType.FISTULA_BIG, FistulaVariant.FISTULA},
57
+ [BossID.GISH] = {EntityType.MONSTRO_2, Monstro2Variant.GISH},
58
+ [BossID.STEVEN] = {EntityType.GEMINI, GeminiVariant.STEVEN},
59
+ [BossID.CHAD] = {EntityType.CHUB, ChubVariant.CHAD},
60
+ [BossID.HEADLESS_HORSEMAN] = {EntityType.HEADLESS_HORSEMAN, 0},
61
+ [BossID.FALLEN] = {EntityType.FALLEN, FallenVariant.FALLEN},
62
+ [BossID.SATAN] = {EntityType.SATAN, SatanVariant.SATAN},
63
+ [BossID.IT_LIVES] = {EntityType.MOMS_HEART, MomsHeartVariant.IT_LIVES},
64
+ [BossID.HOLLOW] = {EntityType.LARRY_JR, LarryJrVariant.HOLLOW},
65
+ [BossID.CARRION_QUEEN] = {EntityType.CHUB, ChubVariant.CARRION_QUEEN},
66
+ [BossID.GURDY_JR] = {EntityType.GURDY_JR, 0},
67
+ [BossID.HUSK] = {EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.HUSK},
68
+ [BossID.BLOAT] = {EntityType.PEEP, PeepVariant.BLOAT},
69
+ [BossID.LOKII] = {EntityType.LOKI, LokiVariant.LOKII},
70
+ [BossID.BLIGHTED_OVUM] = {EntityType.GEMINI, GeminiVariant.BLIGHTED_OVUM},
71
+ [BossID.TERATOMA] = {EntityType.FISTULA_BIG, FistulaVariant.TERATOMA},
72
+ [BossID.WIDOW] = {EntityType.WIDOW, WidowVariant.WIDOW},
73
+ [BossID.MASK_OF_INFAMY] = {EntityType.MASK_OF_INFAMY, 0},
74
+ [BossID.WRETCHED] = {EntityType.WIDOW, WidowVariant.WRETCHED},
75
+ [BossID.PIN] = {EntityType.PIN, PinVariant.PIN},
76
+ [BossID.CONQUEST] = {EntityType.WAR, WarVariant.CONQUEST},
77
+ [BossID.ISAAC] = {EntityType.ISAAC, IsaacVariant.ISAAC},
78
+ [BossID.BLUE_BABY] = {EntityType.ISAAC, IsaacVariant.BLUE_BABY},
79
+ [BossID.DADDY_LONG_LEGS] = {EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.DADDY_LONG_LEGS},
80
+ [BossID.TRIACHNID] = {EntityType.DADDY_LONG_LEGS, DaddyLongLegsVariant.TRIACHNID},
81
+ [BossID.HAUNT] = {EntityType.HAUNT, HauntVariant.HAUNT},
82
+ [BossID.DINGLE] = {EntityType.DINGLE, DingleVariant.DINGLE},
83
+ [BossID.MEGA_MAW] = {EntityType.MEGA_MAW, 0},
84
+ [BossID.GATE] = {EntityType.GATE, 0},
85
+ [BossID.MEGA_FATTY] = {EntityType.MEGA_FATTY, 0},
86
+ [BossID.CAGE] = {EntityType.CAGE, 0},
87
+ [BossID.MAMA_GURDY] = {EntityType.MAMA_GURDY, MamaGurdyVariant.MAMA_GURDY},
88
+ [BossID.DARK_ONE] = {EntityType.DARK_ONE, 0},
89
+ [BossID.ADVERSARY] = {EntityType.ADVERSARY, 0},
90
+ [BossID.POLYCEPHALUS] = {EntityType.POLYCEPHALUS, PolycephalusVariant.POLYCEPHALUS},
91
+ [BossID.MR_FRED] = {EntityType.MR_FRED, 0},
92
+ [BossID.LAMB] = {EntityType.LAMB, LambVariant.LAMB},
93
+ [BossID.MEGA_SATAN] = {EntityType.MEGA_SATAN, MegaSatanVariant.MEGA_SATAN},
94
+ [BossID.GURGLING] = {EntityType.GURGLING, GurglingVariant.GURGLING_BOSS},
95
+ [BossID.STAIN] = {EntityType.STAIN, 0},
96
+ [BossID.BROWNIE] = {EntityType.BROWNIE, 0},
97
+ [BossID.FORSAKEN] = {EntityType.FORSAKEN, 0},
98
+ [BossID.LITTLE_HORN] = {EntityType.LITTLE_HORN, LittleHornVariant.LITTLE_HORN},
99
+ [BossID.RAG_MAN] = {EntityType.RAG_MAN, RagManVariant.RAG_MAN},
100
+ [BossID.ULTRA_GREED] = {EntityType.ULTRA_GREED, UltraGreedVariant.ULTRA_GREED},
101
+ [BossID.HUSH] = {EntityType.HUSH, 0},
102
+ [BossID.DANGLE] = {EntityType.DINGLE, DingleVariant.DANGLE},
103
+ [BossID.TURDLING] = {EntityType.GURGLING, GurglingVariant.TURDLING},
104
+ [BossID.FRAIL] = {EntityType.PIN, PinVariant.FRAIL},
105
+ [BossID.RAG_MEGA] = {EntityType.RAG_MEGA, RagMegaVariant.RAG_MEGA},
106
+ [BossID.SISTERS_VIS] = {EntityType.SISTERS_VIS, 0},
107
+ [BossID.BIG_HORN] = {EntityType.BIG_HORN, BigHornVariant.BIG_HORN},
108
+ [BossID.DELIRIUM] = {EntityType.DELIRIUM, 0},
109
+ [BossID.MATRIARCH] = {EntityType.MATRIARCH, 0},
110
+ [BossID.PILE] = {EntityType.POLYCEPHALUS, PolycephalusVariant.PILE},
111
+ [BossID.REAP_CREEP] = {EntityType.REAP_CREEP, 0},
112
+ [BossID.LIL_BLUB] = {EntityType.LIL_BLUB, 0},
113
+ [BossID.WORMWOOD] = {EntityType.PIN, PinVariant.WORMWOOD},
114
+ [BossID.RAINMAKER] = {EntityType.RAINMAKER, 0},
115
+ [BossID.VISAGE] = {EntityType.VISAGE, 0},
116
+ [BossID.SIREN] = {EntityType.SIREN, 0},
117
+ [BossID.TUFF_TWINS] = {EntityType.LARRY_JR, LarryJrVariant.TUFF_TWIN},
118
+ [BossID.HERETIC] = {EntityType.HERETIC, 0},
119
+ [BossID.HORNFEL] = {EntityType.HORNFEL, 0},
120
+ [BossID.GREAT_GIDEON] = {EntityType.GREAT_GIDEON, 0},
121
+ [BossID.BABY_PLUM] = {EntityType.BABY_PLUM, 0},
122
+ [BossID.SCOURGE] = {EntityType.SCOURGE, 0},
123
+ [BossID.CHIMERA] = {EntityType.CHIMERA, 0},
124
+ [BossID.ROTGUT] = {EntityType.ROTGUT, 0},
125
+ [BossID.MOTHER] = {EntityType.MOTHER, MotherVariant.MOTHER_1},
126
+ [BossID.MAUSOLEUM_MOM] = {EntityType.MOM, MomVariant.MOM},
127
+ [BossID.MAUSOLEUM_MOMS_HEART] = {EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART},
128
+ [BossID.MIN_MIN] = {EntityType.MIN_MIN, 0},
129
+ [BossID.CLOG] = {EntityType.CLOG, 0},
130
+ [BossID.SINGE] = {EntityType.SINGE, 0},
131
+ [BossID.BUMBINO] = {EntityType.BUMBINO, 0},
132
+ [BossID.COLOSTOMIA] = {EntityType.COLOSTOMIA, 0},
133
+ [BossID.SHELL] = {EntityType.LARRY_JR, LarryJrVariant.SHELL},
134
+ [BossID.TURDLET] = {EntityType.TURDLET, 0},
135
+ [BossID.RAGLICH] = {EntityType.RAGLICH, RaglichVariant.RAGLICH},
136
+ [BossID.DOGMA] = {EntityType.DOGMA, DogmaVariant.DOGMA_PHASE_1},
137
+ [BossID.BEAST] = {EntityType.BEAST, BeastVariant.BEAST},
138
+ [BossID.HORNY_BOYS] = {EntityType.HORNY_BOYS, 0},
139
+ [BossID.CLUTCH] = {EntityType.CLUTCH, 0}
140
+ }
141
+ return ____exports
@@ -1 +1 @@
1
- {"version":3,"file":"bossSets.d.ts","sourceRoot":"","sources":["../../../src/sets/bossSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAa,MAAM,8BAA8B,CAAC;AAod7E,eAAO,MAAM,mCAAmC,gEAiB9C,CAAC;AAEH,eAAO,MAAM,8BAA8B,8CAiBzC,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAU9C,CAAC;AAwBF,eAAO,MAAM,qCAAqC,EAAE,WAAW,CAAC,MAAM,CAMhE,CAAC"}
1
+ {"version":3,"file":"bossSets.d.ts","sourceRoot":"","sources":["../../../src/sets/bossSets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAa,MAAM,8BAA8B,CAAC;AAod7E,eAAO,MAAM,mCAAmC,gEAiB9C,CAAC;AAEH,eAAO,MAAM,8BAA8B,8CAiBzC,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAU9C,CAAC;AAyBF,eAAO,MAAM,qCAAqC,EAAE,WAAW,CAAC,MAAM,CAMhE,CAAC"}
@@ -386,11 +386,13 @@ local STORY_BOSS_IDS_SET = __TS__New(ReadonlySet, {
386
386
  BossID.HUSH,
387
387
  BossID.DELIRIUM,
388
388
  BossID.MOTHER,
389
+ BossID.MAUSOLEUM_MOM,
390
+ BossID.MAUSOLEUM_MOMS_HEART,
389
391
  BossID.DOGMA,
390
392
  BossID.BEAST
391
393
  })
392
- if STORY_BOSS_IDS_SET.size + 1 ~= STORY_BOSSES_SET.size then
393
- error("The size of \"STORY_BOSS_IDS_SET\" is not the same as \"STORY_BOSSES_SET\".")
394
+ if STORY_BOSS_IDS_SET.size + 1 - 2 ~= STORY_BOSSES_SET.size then
395
+ error("The \"STORY_BOSS_IDS_SET\" and the \"STORY_BOSSES_SET\" do not match.")
394
396
  end
395
397
  ____exports.ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET = (function()
396
398
  local allBossesSet = copySet(nil, ____exports.ALL_BOSSES_SET)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "51.1.1",
3
+ "version": "51.2.0",
4
4
  "description": "Helper functions and features for IsaacScript mods.",
5
5
  "keywords": [
6
6
  "isaac",
@@ -5,6 +5,7 @@ import type {
5
5
  } from "isaac-typescript-definitions";
6
6
  import { EntityType, LokiVariant } from "isaac-typescript-definitions";
7
7
  import { VectorZero } from "../core/constants";
8
+ import { BOSS_ID_TO_ENTITY_TYPE_VARIANT } from "../objects/bossIDToEntityTypeVariant";
8
9
  import {
9
10
  ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET,
10
11
  ALL_BOSSES_SET,
@@ -29,6 +30,21 @@ const BOSSES_THAT_REQUIRE_MULTIPLE_SPAWNS = new ReadonlySet<EntityType>([
29
30
 
30
31
  const DEFAULT_BOSS_MULTI_SEGMENTS = 4;
31
32
 
33
+ const ENTITY_TYPE_VARIANT_TO_BOSS_ID: ReadonlyMap<string, BossID> = (() => {
34
+ const entityTypeVariantToBossID = new Map<string, BossID>();
35
+
36
+ for (const [bossIDRaw, entityTypeVariant] of Object.entries(
37
+ BOSS_ID_TO_ENTITY_TYPE_VARIANT,
38
+ )) {
39
+ const bossID = bossIDRaw as unknown as BossID;
40
+ const [entityType, variant] = entityTypeVariant;
41
+ const entityTypeVariantString = `${entityType}.${variant}`;
42
+ entityTypeVariantToBossID.set(entityTypeVariantString, bossID);
43
+ }
44
+
45
+ return entityTypeVariantToBossID;
46
+ })();
47
+
32
48
  /**
33
49
  * Helper function to get all of the non-dead bosses in the room.
34
50
  *
@@ -75,6 +91,14 @@ export function getAllBossesSet(
75
91
  : ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET;
76
92
  }
77
93
 
94
+ export function getBossIDFromEntityTypeVariant(
95
+ entityType: EntityType,
96
+ variant: int,
97
+ ): BossID | undefined {
98
+ const entityTypeVariant = `${entityType}.${variant}`;
99
+ return ENTITY_TYPE_VARIANT_TO_BOSS_ID.get(entityTypeVariant);
100
+ }
101
+
78
102
  /**
79
103
  * Helper function to get the set of vanilla bosses for a particular stage and stage type
80
104
  * combination.
@@ -127,11 +151,50 @@ export function getCombinedBossSet(
127
151
  return STAGE_TO_COMBINED_BOSS_SET_MAP.get(stage);
128
152
  }
129
153
 
154
+ export function getEntityTypeVariantFromBossID(
155
+ bossID: BossID,
156
+ ): readonly [EntityType, int] {
157
+ return BOSS_ID_TO_ENTITY_TYPE_VARIANT[bossID];
158
+ }
159
+
130
160
  /** Helper function to check if the provided NPC is a Sin miniboss, such as Sloth or Lust. */
131
161
  export function isSin(npc: EntityNPC): boolean {
132
162
  return SIN_ENTITY_TYPES_SET.has(npc.Type);
133
163
  }
134
164
 
165
+ function getNumBossSegments(
166
+ entityType: EntityType,
167
+ variant: int,
168
+ numSegments: int | undefined,
169
+ ) {
170
+ if (numSegments !== undefined) {
171
+ return numSegments;
172
+ }
173
+
174
+ switch (entityType) {
175
+ // 28
176
+ case EntityType.CHUB: {
177
+ // Chub is always composed of 3 segments.
178
+ return 3;
179
+ }
180
+
181
+ // 69
182
+ case EntityType.LOKI: {
183
+ return variant === asNumber(LokiVariant.LOKII) ? 2 : 1;
184
+ }
185
+
186
+ // 237
187
+ case EntityType.GURGLING: {
188
+ // Gurglings & Turdlings are always encountered in groups of 2.
189
+ return 2;
190
+ }
191
+
192
+ default: {
193
+ return DEFAULT_BOSS_MULTI_SEGMENTS;
194
+ }
195
+ }
196
+ }
197
+
135
198
  /**
136
199
  * Helper function to spawn a boss.
137
200
  *
@@ -186,39 +249,6 @@ export function spawnBoss(
186
249
  return npc;
187
250
  }
188
251
 
189
- function getNumBossSegments(
190
- entityType: EntityType,
191
- variant: int,
192
- numSegments: int | undefined,
193
- ) {
194
- if (numSegments !== undefined) {
195
- return numSegments;
196
- }
197
-
198
- switch (entityType) {
199
- // 28
200
- case EntityType.CHUB: {
201
- // Chub is always composed of 3 segments.
202
- return 3;
203
- }
204
-
205
- // 69
206
- case EntityType.LOKI: {
207
- return variant === asNumber(LokiVariant.LOKII) ? 2 : 1;
208
- }
209
-
210
- // 237
211
- case EntityType.GURGLING: {
212
- // Gurglings & Turdlings are always encountered in groups of 2.
213
- return 2;
214
- }
215
-
216
- default: {
217
- return DEFAULT_BOSS_MULTI_SEGMENTS;
218
- }
219
- }
220
- }
221
-
222
252
  /**
223
253
  * Helper function to spawn a boss with a specific seed.
224
254
  *
@@ -0,0 +1,359 @@
1
+ import {
2
+ BeastVariant,
3
+ BigHornVariant,
4
+ BossID,
5
+ ChubVariant,
6
+ DaddyLongLegsVariant,
7
+ DingleVariant,
8
+ DogmaVariant,
9
+ DukeOfFliesVariant,
10
+ EntityType,
11
+ FallenVariant,
12
+ FistulaVariant,
13
+ GeminiVariant,
14
+ GurglingVariant,
15
+ HauntVariant,
16
+ IsaacVariant,
17
+ LambVariant,
18
+ LarryJrVariant,
19
+ LittleHornVariant,
20
+ LokiVariant,
21
+ MamaGurdyVariant,
22
+ MegaSatanVariant,
23
+ MomVariant,
24
+ MomsHeartVariant,
25
+ Monstro2Variant,
26
+ MotherVariant,
27
+ PeepVariant,
28
+ PinVariant,
29
+ PolycephalusVariant,
30
+ RagManVariant,
31
+ RagMegaVariant,
32
+ RaglichVariant,
33
+ SatanVariant,
34
+ UltraGreedVariant,
35
+ WarVariant,
36
+ WidowVariant,
37
+ } from "isaac-typescript-definitions";
38
+
39
+ export const BOSS_ID_TO_ENTITY_TYPE_VARIANT = {
40
+ // 1
41
+ [BossID.MONSTRO]: [EntityType.MONSTRO, 0],
42
+
43
+ // 2
44
+ [BossID.LARRY_JR]: [EntityType.LARRY_JR, LarryJrVariant.LARRY_JR],
45
+
46
+ // 3
47
+ [BossID.CHUB]: [EntityType.CHUB, ChubVariant.CHUB],
48
+
49
+ // 4
50
+ [BossID.GURDY]: [EntityType.GURDY, 0],
51
+
52
+ // 5
53
+ [BossID.MONSTRO_2]: [EntityType.MONSTRO_2, Monstro2Variant.MONSTRO_2],
54
+
55
+ // 6
56
+ [BossID.MOM]: [EntityType.MOM, MomVariant.MOM],
57
+
58
+ // 7
59
+ [BossID.SCOLEX]: [EntityType.PIN, PinVariant.SCOLEX],
60
+
61
+ // 8
62
+ [BossID.MOMS_HEART]: [EntityType.MOMS_HEART, MomsHeartVariant.MOMS_HEART],
63
+
64
+ // 9
65
+ [BossID.FAMINE]: [EntityType.FAMINE, 0],
66
+
67
+ // 10
68
+ [BossID.PESTILENCE]: [EntityType.PESTILENCE, 0],
69
+
70
+ // 11
71
+ [BossID.WAR]: [EntityType.WAR, WarVariant.WAR],
72
+
73
+ // 12
74
+ [BossID.DEATH]: [EntityType.DEATH, 0],
75
+
76
+ // 13
77
+ [BossID.DUKE_OF_FLIES]: [
78
+ EntityType.DUKE_OF_FLIES,
79
+ DukeOfFliesVariant.DUKE_OF_FLIES,
80
+ ],
81
+
82
+ // 14
83
+ [BossID.PEEP]: [EntityType.PEEP, PeepVariant.PEEP],
84
+
85
+ // 15
86
+ [BossID.LOKI]: [EntityType.LOKI, LokiVariant.LOKI],
87
+
88
+ // 16
89
+ [BossID.BLASTOCYST]: [EntityType.BLASTOCYST_BIG, 0],
90
+
91
+ // 17
92
+ [BossID.GEMINI]: [EntityType.GEMINI, GeminiVariant.GEMINI],
93
+
94
+ // 18
95
+ [BossID.FISTULA]: [EntityType.FISTULA_BIG, FistulaVariant.FISTULA],
96
+
97
+ // 19
98
+ [BossID.GISH]: [EntityType.MONSTRO_2, Monstro2Variant.GISH],
99
+
100
+ // 20
101
+ [BossID.STEVEN]: [EntityType.GEMINI, GeminiVariant.STEVEN],
102
+
103
+ // 21
104
+ [BossID.CHAD]: [EntityType.CHUB, ChubVariant.CHAD],
105
+
106
+ // 22
107
+ [BossID.HEADLESS_HORSEMAN]: [EntityType.HEADLESS_HORSEMAN, 0],
108
+
109
+ // 23
110
+ [BossID.FALLEN]: [EntityType.FALLEN, FallenVariant.FALLEN],
111
+
112
+ // 24
113
+ [BossID.SATAN]: [EntityType.SATAN, SatanVariant.SATAN],
114
+
115
+ // 25
116
+ [BossID.IT_LIVES]: [EntityType.MOMS_HEART, MomsHeartVariant.IT_LIVES],
117
+
118
+ // 26
119
+ [BossID.HOLLOW]: [EntityType.LARRY_JR, LarryJrVariant.HOLLOW],
120
+
121
+ // 27
122
+ [BossID.CARRION_QUEEN]: [EntityType.CHUB, ChubVariant.CARRION_QUEEN],
123
+
124
+ // 28
125
+ [BossID.GURDY_JR]: [EntityType.GURDY_JR, 0],
126
+
127
+ // 29
128
+ [BossID.HUSK]: [EntityType.DUKE_OF_FLIES, DukeOfFliesVariant.HUSK],
129
+
130
+ // 30
131
+ [BossID.BLOAT]: [EntityType.PEEP, PeepVariant.BLOAT],
132
+
133
+ // 31
134
+ [BossID.LOKII]: [EntityType.LOKI, LokiVariant.LOKII],
135
+
136
+ // 32
137
+ [BossID.BLIGHTED_OVUM]: [EntityType.GEMINI, GeminiVariant.BLIGHTED_OVUM],
138
+
139
+ // 33
140
+ [BossID.TERATOMA]: [EntityType.FISTULA_BIG, FistulaVariant.TERATOMA],
141
+
142
+ // 34
143
+ [BossID.WIDOW]: [EntityType.WIDOW, WidowVariant.WIDOW],
144
+
145
+ // 35
146
+ [BossID.MASK_OF_INFAMY]: [EntityType.MASK_OF_INFAMY, 0],
147
+
148
+ // 36
149
+ [BossID.WRETCHED]: [EntityType.WIDOW, WidowVariant.WRETCHED],
150
+
151
+ // 37
152
+ [BossID.PIN]: [EntityType.PIN, PinVariant.PIN],
153
+
154
+ // 38
155
+ [BossID.CONQUEST]: [EntityType.WAR, WarVariant.CONQUEST],
156
+
157
+ // 39
158
+ [BossID.ISAAC]: [EntityType.ISAAC, IsaacVariant.ISAAC],
159
+
160
+ // 40
161
+ [BossID.BLUE_BABY]: [EntityType.ISAAC, IsaacVariant.BLUE_BABY],
162
+
163
+ // 41
164
+ [BossID.DADDY_LONG_LEGS]: [
165
+ EntityType.DADDY_LONG_LEGS,
166
+ DaddyLongLegsVariant.DADDY_LONG_LEGS,
167
+ ],
168
+
169
+ // 42
170
+ [BossID.TRIACHNID]: [
171
+ EntityType.DADDY_LONG_LEGS,
172
+ DaddyLongLegsVariant.TRIACHNID,
173
+ ],
174
+
175
+ // 43
176
+ [BossID.HAUNT]: [EntityType.HAUNT, HauntVariant.HAUNT],
177
+
178
+ // 44
179
+ [BossID.DINGLE]: [EntityType.DINGLE, DingleVariant.DINGLE],
180
+
181
+ // 45
182
+ [BossID.MEGA_MAW]: [EntityType.MEGA_MAW, 0],
183
+
184
+ // 46
185
+ [BossID.GATE]: [EntityType.GATE, 0],
186
+
187
+ // 47
188
+ [BossID.MEGA_FATTY]: [EntityType.MEGA_FATTY, 0],
189
+
190
+ // 48
191
+ [BossID.CAGE]: [EntityType.CAGE, 0],
192
+
193
+ // 49
194
+ [BossID.MAMA_GURDY]: [EntityType.MAMA_GURDY, MamaGurdyVariant.MAMA_GURDY],
195
+
196
+ // 50
197
+ [BossID.DARK_ONE]: [EntityType.DARK_ONE, 0],
198
+
199
+ // 51
200
+ [BossID.ADVERSARY]: [EntityType.ADVERSARY, 0],
201
+
202
+ // 52
203
+ [BossID.POLYCEPHALUS]: [
204
+ EntityType.POLYCEPHALUS,
205
+ PolycephalusVariant.POLYCEPHALUS,
206
+ ],
207
+
208
+ // 53
209
+ [BossID.MR_FRED]: [EntityType.MR_FRED, 0],
210
+
211
+ // 54
212
+ [BossID.LAMB]: [EntityType.LAMB, LambVariant.LAMB],
213
+
214
+ // 55
215
+ [BossID.MEGA_SATAN]: [EntityType.MEGA_SATAN, MegaSatanVariant.MEGA_SATAN],
216
+
217
+ // 56
218
+ [BossID.GURGLING]: [EntityType.GURGLING, GurglingVariant.GURGLING_BOSS],
219
+
220
+ // 57
221
+ [BossID.STAIN]: [EntityType.STAIN, 0],
222
+
223
+ // 58
224
+ [BossID.BROWNIE]: [EntityType.BROWNIE, 0],
225
+
226
+ // 59
227
+ [BossID.FORSAKEN]: [EntityType.FORSAKEN, 0],
228
+
229
+ // 60
230
+ [BossID.LITTLE_HORN]: [EntityType.LITTLE_HORN, LittleHornVariant.LITTLE_HORN],
231
+
232
+ // 61
233
+ [BossID.RAG_MAN]: [EntityType.RAG_MAN, RagManVariant.RAG_MAN],
234
+
235
+ // 62
236
+ [BossID.ULTRA_GREED]: [EntityType.ULTRA_GREED, UltraGreedVariant.ULTRA_GREED],
237
+
238
+ // 63
239
+ [BossID.HUSH]: [EntityType.HUSH, 0],
240
+
241
+ // 64
242
+ [BossID.DANGLE]: [EntityType.DINGLE, DingleVariant.DANGLE],
243
+
244
+ // 65
245
+ [BossID.TURDLING]: [EntityType.GURGLING, GurglingVariant.TURDLING],
246
+
247
+ // 66
248
+ [BossID.FRAIL]: [EntityType.PIN, PinVariant.FRAIL],
249
+
250
+ // 67
251
+ [BossID.RAG_MEGA]: [EntityType.RAG_MEGA, RagMegaVariant.RAG_MEGA],
252
+
253
+ // 68
254
+ [BossID.SISTERS_VIS]: [EntityType.SISTERS_VIS, 0],
255
+
256
+ // 69
257
+ [BossID.BIG_HORN]: [EntityType.BIG_HORN, BigHornVariant.BIG_HORN],
258
+
259
+ // 70
260
+ [BossID.DELIRIUM]: [EntityType.DELIRIUM, 0],
261
+
262
+ // There is no boss ID with a value of 71.
263
+
264
+ // 72
265
+ [BossID.MATRIARCH]: [EntityType.MATRIARCH, 0],
266
+
267
+ // 73
268
+ [BossID.PILE]: [EntityType.POLYCEPHALUS, PolycephalusVariant.PILE],
269
+
270
+ // 74
271
+ [BossID.REAP_CREEP]: [EntityType.REAP_CREEP, 0],
272
+
273
+ // 75
274
+ [BossID.LIL_BLUB]: [EntityType.LIL_BLUB, 0],
275
+
276
+ // 76
277
+ [BossID.WORMWOOD]: [EntityType.PIN, PinVariant.WORMWOOD],
278
+
279
+ // 77
280
+ [BossID.RAINMAKER]: [EntityType.RAINMAKER, 0],
281
+
282
+ // 78
283
+ [BossID.VISAGE]: [EntityType.VISAGE, 0],
284
+
285
+ // 79
286
+ [BossID.SIREN]: [EntityType.SIREN, 0],
287
+
288
+ // 80
289
+ [BossID.TUFF_TWINS]: [EntityType.LARRY_JR, LarryJrVariant.TUFF_TWIN],
290
+
291
+ // 81
292
+ [BossID.HERETIC]: [EntityType.HERETIC, 0],
293
+
294
+ // 82
295
+ [BossID.HORNFEL]: [EntityType.HORNFEL, 0],
296
+
297
+ // 83
298
+ [BossID.GREAT_GIDEON]: [EntityType.GREAT_GIDEON, 0],
299
+
300
+ // 84
301
+ [BossID.BABY_PLUM]: [EntityType.BABY_PLUM, 0],
302
+
303
+ // 85
304
+ [BossID.SCOURGE]: [EntityType.SCOURGE, 0],
305
+
306
+ // 86
307
+ [BossID.CHIMERA]: [EntityType.CHIMERA, 0],
308
+
309
+ // 87
310
+ [BossID.ROTGUT]: [EntityType.ROTGUT, 0],
311
+
312
+ // 88
313
+ [BossID.MOTHER]: [EntityType.MOTHER, MotherVariant.MOTHER_1],
314
+
315
+ // 89
316
+ [BossID.MAUSOLEUM_MOM]: [EntityType.MOM, MomVariant.MOM],
317
+
318
+ // 90
319
+ [BossID.MAUSOLEUM_MOMS_HEART]: [
320
+ EntityType.MOMS_HEART,
321
+ MomsHeartVariant.MOMS_HEART,
322
+ ],
323
+
324
+ // 91
325
+ [BossID.MIN_MIN]: [EntityType.MIN_MIN, 0],
326
+
327
+ // 92
328
+ [BossID.CLOG]: [EntityType.CLOG, 0],
329
+
330
+ // 93
331
+ [BossID.SINGE]: [EntityType.SINGE, 0],
332
+
333
+ // 94
334
+ [BossID.BUMBINO]: [EntityType.BUMBINO, 0],
335
+
336
+ // 95
337
+ [BossID.COLOSTOMIA]: [EntityType.COLOSTOMIA, 0],
338
+
339
+ // 96
340
+ [BossID.SHELL]: [EntityType.LARRY_JR, LarryJrVariant.SHELL],
341
+
342
+ // 97
343
+ [BossID.TURDLET]: [EntityType.TURDLET, 0],
344
+
345
+ // 98
346
+ [BossID.RAGLICH]: [EntityType.RAGLICH, RaglichVariant.RAGLICH],
347
+
348
+ // 99
349
+ [BossID.DOGMA]: [EntityType.DOGMA, DogmaVariant.DOGMA_PHASE_1],
350
+
351
+ // 100
352
+ [BossID.BEAST]: [EntityType.BEAST, BeastVariant.BEAST],
353
+
354
+ // 101
355
+ [BossID.HORNY_BOYS]: [EntityType.HORNY_BOYS, 0],
356
+
357
+ // 102
358
+ [BossID.CLUTCH]: [EntityType.CLUTCH, 0],
359
+ } as const satisfies Record<BossID, readonly [EntityType, int]>;
@@ -517,25 +517,26 @@ export const ALL_BOSSES_SET: ReadonlySet<BossID> = combineSets(
517
517
  );
518
518
 
519
519
  const STORY_BOSS_IDS_SET = new ReadonlySet([
520
- BossID.MOM,
521
- BossID.MOMS_HEART,
522
- BossID.SATAN,
523
- BossID.ISAAC,
524
- BossID.LAMB,
525
- BossID.MEGA_SATAN,
520
+ BossID.MOM, // 6
521
+ BossID.MOMS_HEART, // 8
522
+ BossID.SATAN, // 24
523
+ BossID.ISAAC, // 39
524
+ BossID.LAMB, // 54
525
+ BossID.MEGA_SATAN, // 55
526
526
  // Mega Satan 2 does not have a dedicated boss room.
527
- BossID.ULTRA_GREED,
528
- BossID.HUSH,
529
- BossID.DELIRIUM,
530
- BossID.MOTHER,
531
- BossID.DOGMA,
532
- BossID.BEAST,
527
+ BossID.ULTRA_GREED, // 62
528
+ BossID.HUSH, // 63
529
+ BossID.DELIRIUM, // 70
530
+ BossID.MOTHER, // 88
531
+ BossID.MAUSOLEUM_MOM, // 89
532
+ BossID.MAUSOLEUM_MOMS_HEART, // 90
533
+ BossID.DOGMA, // 99
534
+ BossID.BEAST, // 100
533
535
  ]);
534
536
 
535
- if (STORY_BOSS_IDS_SET.size + 1 !== STORY_BOSSES_SET.size) {
536
- error(
537
- 'The size of "STORY_BOSS_IDS_SET" is not the same as "STORY_BOSSES_SET".',
538
- );
537
+ // We add one for Mega Satan 2 and minus 2 for the two Mausoleum bosses.
538
+ if (STORY_BOSS_IDS_SET.size + 1 - 2 !== STORY_BOSSES_SET.size) {
539
+ error('The "STORY_BOSS_IDS_SET" and the "STORY_BOSSES_SET" do not match.');
539
540
  }
540
541
 
541
542
  export const ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET: ReadonlySet<BossID> =