isaacscript-common 20.18.0 → 21.0.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 (344) hide show
  1. package/dist/index.d.ts +23 -33
  2. package/dist/isaacscript-common.lua +676 -508
  3. package/dist/src/callbacks.d.ts.map +1 -1
  4. package/dist/src/classes/callbacks/PostBoneSwing.d.ts.map +1 -1
  5. package/dist/src/classes/callbacks/PostBoneSwing.lua +3 -2
  6. package/dist/src/classes/callbacks/PreNewLevel.d.ts.map +1 -1
  7. package/dist/src/classes/callbacks/PreNewLevel.lua +3 -2
  8. package/dist/src/classes/features/other/CustomTrapdoors.d.ts.map +1 -1
  9. package/dist/src/classes/features/other/CustomTrapdoors.lua +4 -2
  10. package/dist/src/classes/features/other/DeployJSONRoom.d.ts.map +1 -1
  11. package/dist/src/classes/features/other/DeployJSONRoom.lua +3 -2
  12. package/dist/src/classes/features/other/ModdedElementSets.d.ts.map +1 -1
  13. package/dist/src/classes/features/other/ModdedElementSets.lua +7 -4
  14. package/dist/src/classes/features/other/SaveDataManager.d.ts.map +1 -1
  15. package/dist/src/classes/features/other/SaveDataManager.lua +3 -2
  16. package/dist/src/classes/features/other/customStages/backdrop.lua +3 -2
  17. package/dist/src/classes/features/other/customStages/shadows.d.ts.map +1 -1
  18. package/dist/src/classes/features/other/customStages/streakText.d.ts.map +1 -1
  19. package/dist/src/classes/features/other/saveDataManager/restoreDefaults.d.ts.map +1 -1
  20. package/dist/src/classes/features/other/saveDataManager/restoreDefaults.lua +3 -2
  21. package/dist/src/core/constants.d.ts +4 -6
  22. package/dist/src/core/constants.d.ts.map +1 -1
  23. package/dist/src/core/constants.lua +17 -13
  24. package/dist/src/features.d.ts.map +1 -1
  25. package/dist/src/functions/bosses.d.ts.map +1 -1
  26. package/dist/src/functions/bosses.lua +3 -2
  27. package/dist/src/functions/cards.lua +3 -3
  28. package/dist/src/functions/characters.d.ts.map +1 -1
  29. package/dist/src/functions/characters.lua +3 -2
  30. package/dist/src/functions/doors.d.ts.map +1 -1
  31. package/dist/src/functions/doors.lua +9 -7
  32. package/dist/src/functions/emptyRoom.d.ts.map +1 -1
  33. package/dist/src/functions/emptyRoom.lua +3 -2
  34. package/dist/src/functions/entities.d.ts.map +1 -1
  35. package/dist/src/functions/entities.lua +67 -64
  36. package/dist/src/functions/globals.d.ts.map +1 -1
  37. package/dist/src/functions/globals.lua +6 -4
  38. package/dist/src/functions/gridEntities.d.ts.map +1 -1
  39. package/dist/src/functions/gridEntities.lua +5 -3
  40. package/dist/src/functions/input.d.ts.map +1 -1
  41. package/dist/src/functions/input.lua +4 -3
  42. package/dist/src/functions/logEntities.d.ts.map +1 -1
  43. package/dist/src/functions/logEntities.lua +3 -2
  44. package/dist/src/functions/npcs.d.ts.map +1 -1
  45. package/dist/src/functions/npcs.lua +4 -3
  46. package/dist/src/functions/playerIndex.d.ts.map +1 -1
  47. package/dist/src/functions/playerIndex.lua +3 -2
  48. package/dist/src/functions/readOnly.d.ts +26 -0
  49. package/dist/src/functions/readOnly.d.ts.map +1 -0
  50. package/dist/src/functions/readOnly.lua +31 -0
  51. package/dist/src/functions/roomGrid.lua +4 -1
  52. package/dist/src/functions/roomShapeWalls.d.ts.map +1 -1
  53. package/dist/src/functions/roomShapeWalls.lua +9 -10
  54. package/dist/src/functions/serialization.d.ts.map +1 -1
  55. package/dist/src/functions/serialization.lua +3 -2
  56. package/dist/src/functions/slots.d.ts.map +1 -1
  57. package/dist/src/functions/slots.lua +3 -2
  58. package/dist/src/functions/stats.d.ts.map +1 -1
  59. package/dist/src/functions/stats.lua +3 -2
  60. package/dist/src/functions/transformations.d.ts.map +1 -1
  61. package/dist/src/functions/transformations.lua +6 -3
  62. package/dist/src/functions/utils.d.ts +1 -1
  63. package/dist/src/functions/utils.lua +1 -1
  64. package/dist/src/index.d.ts +2 -1
  65. package/dist/src/index.d.ts.map +1 -1
  66. package/dist/src/index.lua +16 -0
  67. package/dist/src/maps/PHDPillConversions.d.ts.map +1 -1
  68. package/dist/src/maps/PHDPillConversions.lua +3 -2
  69. package/dist/src/maps/cardNameToTypeMap.d.ts.map +1 -1
  70. package/dist/src/maps/cardNameToTypeMap.lua +3 -2
  71. package/dist/src/maps/characterNameToTypeMap.d.ts.map +1 -1
  72. package/dist/src/maps/characterNameToTypeMap.lua +3 -2
  73. package/dist/src/maps/collectibleDescriptionMap.d.ts.map +1 -1
  74. package/dist/src/maps/collectibleDescriptionMap.lua +3 -2
  75. package/dist/src/maps/collectibleNameToTypeMap.d.ts +5 -0
  76. package/dist/src/maps/collectibleNameToTypeMap.d.ts.map +1 -1
  77. package/dist/src/maps/collectibleNameToTypeMap.lua +10 -8
  78. package/dist/src/maps/collectibleTypeToNameMap.d.ts.map +1 -1
  79. package/dist/src/maps/collectibleTypeToNameMap.lua +3 -2
  80. package/dist/src/maps/defaultPlayerStatMap.d.ts +5 -2
  81. package/dist/src/maps/defaultPlayerStatMap.d.ts.map +1 -1
  82. package/dist/src/maps/defaultPlayerStatMap.lua +3 -2
  83. package/dist/src/maps/falsePHDPillConversions.d.ts.map +1 -1
  84. package/dist/src/maps/falsePHDPillConversions.lua +3 -2
  85. package/dist/src/maps/gridEntityTypeToBrokenStateMap.d.ts +1 -1
  86. package/dist/src/maps/gridEntityTypeToBrokenStateMap.d.ts.map +1 -1
  87. package/dist/src/maps/gridEntityTypeToBrokenStateMap.lua +3 -2
  88. package/dist/src/maps/gridEntityXMLMap.d.ts +1 -4
  89. package/dist/src/maps/gridEntityXMLMap.d.ts.map +1 -1
  90. package/dist/src/maps/gridEntityXMLMap.lua +3 -2
  91. package/dist/src/maps/keyboardToString.d.ts.map +1 -1
  92. package/dist/src/maps/keyboardToString.lua +3 -2
  93. package/dist/src/maps/pillNameToEffectMap.d.ts.map +1 -1
  94. package/dist/src/maps/pillNameToEffectMap.lua +3 -2
  95. package/dist/src/maps/roomNameToTypeMap.d.ts.map +1 -1
  96. package/dist/src/maps/roomNameToTypeMap.lua +3 -2
  97. package/dist/src/maps/roomShapeToTopLeftWallGridIndexMap.d.ts +1 -1
  98. package/dist/src/maps/roomShapeToTopLeftWallGridIndexMap.d.ts.map +1 -1
  99. package/dist/src/maps/roomShapeToTopLeftWallGridIndexMap.lua +3 -2
  100. package/dist/src/maps/transformationNameToPlayerFormMap.d.ts.map +1 -1
  101. package/dist/src/maps/transformationNameToPlayerFormMap.lua +3 -2
  102. package/dist/src/maps/trinketDescriptionMap.d.ts.map +1 -1
  103. package/dist/src/maps/trinketDescriptionMap.lua +3 -2
  104. package/dist/src/maps/trinketNameToTypeMap.d.ts +5 -0
  105. package/dist/src/maps/trinketNameToTypeMap.d.ts.map +1 -1
  106. package/dist/src/maps/trinketNameToTypeMap.lua +10 -8
  107. package/dist/src/maps/trinketTypeToNameMap.d.ts.map +1 -1
  108. package/dist/src/maps/trinketTypeToNameMap.lua +3 -2
  109. package/dist/src/objects/LRoomShapeToRectangles.d.ts +8 -6
  110. package/dist/src/objects/LRoomShapeToRectangles.d.ts.map +1 -1
  111. package/dist/src/objects/LRoomShapeToRectangles.lua +19 -17
  112. package/dist/src/objects/backdropTypeToRockAltType.d.ts.map +1 -1
  113. package/dist/src/objects/bossNamePNGFileNames.d.ts.map +1 -1
  114. package/dist/src/objects/bossPortraitPNGFileNames.d.ts.map +1 -1
  115. package/dist/src/objects/cardDescriptions.d.ts.map +1 -1
  116. package/dist/src/objects/cardNames.d.ts.map +1 -1
  117. package/dist/src/objects/challengeNames.d.ts.map +1 -1
  118. package/dist/src/objects/characterDamageMultipliers.d.ts.map +1 -1
  119. package/dist/src/objects/characterNames.d.ts.map +1 -1
  120. package/dist/src/objects/coinSubTypeToValue.d.ts.map +1 -1
  121. package/dist/src/objects/directionNames.d.ts.map +1 -1
  122. package/dist/src/objects/directionToDegrees.d.ts.map +1 -1
  123. package/dist/src/objects/directionToMoveAction.d.ts.map +1 -1
  124. package/dist/src/objects/directionToShootAction.d.ts.map +1 -1
  125. package/dist/src/objects/directionToVector.d.ts +5 -2
  126. package/dist/src/objects/directionToVector.d.ts.map +1 -1
  127. package/dist/src/objects/directionToVector.lua +6 -4
  128. package/dist/src/objects/doorSlotFlagToDoorSlot.d.ts.map +1 -1
  129. package/dist/src/objects/doorSlotToDirection.d.ts.map +1 -1
  130. package/dist/src/objects/doorSlotToDoorSlotFlag.d.ts.map +1 -1
  131. package/dist/src/objects/isaacAPIClassTypeToBrand.d.ts.map +1 -1
  132. package/dist/src/objects/languageNames.d.ts.map +1 -1
  133. package/dist/src/objects/oppositeDoorSlots.d.ts.map +1 -1
  134. package/dist/src/objects/pillEffectClasses.d.ts.map +1 -1
  135. package/dist/src/objects/pillEffectNames.d.ts.map +1 -1
  136. package/dist/src/objects/pillEffectTypes.d.ts.map +1 -1
  137. package/dist/src/objects/playerNamePNGFileNames.d.ts.map +1 -1
  138. package/dist/src/objects/playerPortraitPNGFileNames.d.ts.map +1 -1
  139. package/dist/src/objects/roomShapeBounds.d.ts +12 -2
  140. package/dist/src/objects/roomShapeBounds.d.ts.map +1 -1
  141. package/dist/src/objects/roomShapeCorners.d.ts +237 -3
  142. package/dist/src/objects/roomShapeCorners.d.ts.map +1 -1
  143. package/dist/src/objects/roomShapeCorners.lua +58 -56
  144. package/dist/src/objects/roomShapeLayoutSizes.d.ts +12 -2
  145. package/dist/src/objects/roomShapeLayoutSizes.d.ts.map +1 -1
  146. package/dist/src/objects/roomShapeToBottomRightPosition.d.ts +12 -2
  147. package/dist/src/objects/roomShapeToBottomRightPosition.d.ts.map +1 -1
  148. package/dist/src/objects/roomShapeToBottomRightPosition.lua +10 -8
  149. package/dist/src/objects/roomShapeToDoorSlotCoordinates.d.ts +88 -2
  150. package/dist/src/objects/roomShapeToDoorSlotCoordinates.d.ts.map +1 -1
  151. package/dist/src/objects/roomShapeToDoorSlotCoordinates.lua +71 -74
  152. package/dist/src/objects/roomShapeToDoorSlots.d.ts +13 -2
  153. package/dist/src/objects/roomShapeToDoorSlots.d.ts.map +1 -1
  154. package/dist/src/objects/roomShapeToDoorSlots.lua +10 -9
  155. package/dist/src/objects/roomShapeToDoorSlotsToGridIndexDelta.d.ts.map +1 -1
  156. package/dist/src/objects/roomShapeToDoorSlotsToGridIndexDelta.lua +14 -13
  157. package/dist/src/objects/roomShapeToGridWidth.d.ts.map +1 -1
  158. package/dist/src/objects/roomShapeToTopLeftPosition.d.ts +12 -2
  159. package/dist/src/objects/roomShapeToTopLeftPosition.d.ts.map +1 -1
  160. package/dist/src/objects/roomShapeToTopLeftPosition.lua +5 -3
  161. package/dist/src/objects/roomShapeVolumes.d.ts.map +1 -1
  162. package/dist/src/objects/roomTypeGotoPrefixes.d.ts.map +1 -1
  163. package/dist/src/objects/roomTypeNames.d.ts.map +1 -1
  164. package/dist/src/objects/stageToMusic.d.ts.map +1 -1
  165. package/dist/src/objects/stageTypeSuffixes.d.ts.map +1 -1
  166. package/dist/src/objects/stageTypeToLetter.d.ts.map +1 -1
  167. package/dist/src/objects/transformationNames.d.ts.map +1 -1
  168. package/dist/src/objects/versusScreenBackgroundColors.d.ts +29 -2
  169. package/dist/src/objects/versusScreenBackgroundColors.d.ts.map +1 -1
  170. package/dist/src/objects/versusScreenBackgroundColors.lua +29 -27
  171. package/dist/src/objects/versusScreenDirtSpotColors.d.ts +29 -2
  172. package/dist/src/objects/versusScreenDirtSpotColors.d.ts.map +1 -1
  173. package/dist/src/objects/versusScreenDirtSpotColors.lua +29 -27
  174. package/dist/src/sets/LRoomShapesSet.d.ts.map +1 -1
  175. package/dist/src/sets/LRoomShapesSet.lua +3 -2
  176. package/dist/src/sets/bossSets.d.ts +2 -3
  177. package/dist/src/sets/bossSets.d.ts.map +1 -1
  178. package/dist/src/sets/bossSets.lua +52 -49
  179. package/dist/src/sets/charactersThatStartWithAnActiveItemSet.d.ts.map +1 -1
  180. package/dist/src/sets/charactersThatStartWithAnActiveItemSet.lua +3 -2
  181. package/dist/src/sets/charactersWithBlackHeartFromEternalHeartSet.d.ts.map +1 -1
  182. package/dist/src/sets/charactersWithBlackHeartFromEternalHeartSet.lua +3 -2
  183. package/dist/src/sets/charactersWithFreeDevilDealsSet.d.ts.map +1 -1
  184. package/dist/src/sets/charactersWithFreeDevilDealsSet.lua +3 -2
  185. package/dist/src/sets/charactersWithNoRedHeartsSet.d.ts.map +1 -1
  186. package/dist/src/sets/charactersWithNoRedHeartsSet.lua +3 -2
  187. package/dist/src/sets/charactersWithNoSoulHeartsSet.d.ts.map +1 -1
  188. package/dist/src/sets/charactersWithNoSoulHeartsSet.lua +3 -2
  189. package/dist/src/sets/chestPickupVariantsSet.d.ts.map +1 -1
  190. package/dist/src/sets/chestPickupVariantsSet.lua +3 -2
  191. package/dist/src/sets/consoleCommandsSet.d.ts.map +1 -1
  192. package/dist/src/sets/consoleCommandsSet.lua +3 -2
  193. package/dist/src/sets/entitiesWithArmorSet.d.ts.map +1 -1
  194. package/dist/src/sets/entitiesWithArmorSet.lua +3 -2
  195. package/dist/src/sets/familiarsThatShootPlayerTearsSet.d.ts.map +1 -1
  196. package/dist/src/sets/familiarsThatShootPlayerTearsSet.lua +3 -2
  197. package/dist/src/sets/itemConfigCardTypesForCardsSet.d.ts +4 -0
  198. package/dist/src/sets/itemConfigCardTypesForCardsSet.d.ts.map +1 -0
  199. package/dist/src/sets/itemConfigCardTypesForCardsSet.lua +10 -0
  200. package/dist/src/sets/lostStyleCharactersSet.d.ts.map +1 -1
  201. package/dist/src/sets/lostStyleCharactersSet.lua +3 -2
  202. package/dist/src/sets/mineShaftRoomSubTypesSet.d.ts.map +1 -1
  203. package/dist/src/sets/mineShaftRoomSubTypesSet.lua +3 -2
  204. package/dist/src/sets/narrowRoomShapesSet.d.ts.map +1 -1
  205. package/dist/src/sets/narrowRoomShapesSet.lua +3 -2
  206. package/dist/src/sets/redHeartSubTypesSet.d.ts.map +1 -1
  207. package/dist/src/sets/redHeartSubTypesSet.lua +3 -2
  208. package/dist/src/sets/sinEntityTypesSet.d.ts.map +1 -1
  209. package/dist/src/sets/sinEntityTypesSet.lua +3 -2
  210. package/dist/src/sets/singleUseActiveCollectibleTypesSet.d.ts.map +1 -1
  211. package/dist/src/sets/singleUseActiveCollectibleTypesSet.lua +3 -2
  212. package/dist/src/sets/storyBossesSet.d.ts.map +1 -1
  213. package/dist/src/sets/storyBossesSet.lua +3 -2
  214. package/dist/src/types/PickingUpItem.d.ts.map +1 -1
  215. package/dist/src/types/PickingUpItem.lua +3 -2
  216. package/dist/src/types/ReadonlyMap.d.ts +9 -0
  217. package/dist/src/types/ReadonlyMap.d.ts.map +1 -0
  218. package/dist/src/types/ReadonlyMap.lua +6 -0
  219. package/dist/src/types/ReadonlySet.d.ts +8 -0
  220. package/dist/src/types/ReadonlySet.d.ts.map +1 -0
  221. package/dist/src/types/ReadonlySet.lua +6 -0
  222. package/package.json +1 -1
  223. package/src/callbacks.ts +1 -2
  224. package/src/classes/callbacks/PostBoneSwing.ts +2 -1
  225. package/src/classes/callbacks/PreNewLevel.ts +2 -1
  226. package/src/classes/features/other/CustomTrapdoors.ts +2 -1
  227. package/src/classes/features/other/DeployJSONRoom.ts +5 -2
  228. package/src/classes/features/other/ModdedElementSets.ts +20 -22
  229. package/src/classes/features/other/SaveDataManager.ts +2 -1
  230. package/src/classes/features/other/customStages/backdrop.ts +3 -3
  231. package/src/classes/features/other/customStages/shadows.ts +1 -2
  232. package/src/classes/features/other/customStages/streakText.ts +1 -2
  233. package/src/classes/features/other/saveDataManager/restoreDefaults.ts +2 -1
  234. package/src/core/constants.ts +18 -17
  235. package/src/features.ts +1 -2
  236. package/src/functions/bosses.ts +2 -1
  237. package/src/functions/cards.ts +2 -2
  238. package/src/functions/characters.ts +2 -1
  239. package/src/functions/doors.ts +15 -4
  240. package/src/functions/emptyRoom.ts +2 -1
  241. package/src/functions/entities.ts +3 -2
  242. package/src/functions/globals.ts +4 -3
  243. package/src/functions/gridEntities.ts +5 -4
  244. package/src/functions/input.ts +3 -2
  245. package/src/functions/logEntities.ts +2 -1
  246. package/src/functions/npcs.ts +3 -2
  247. package/src/functions/playerIndex.ts +2 -1
  248. package/src/functions/readOnly.ts +42 -0
  249. package/src/functions/roomGrid.ts +2 -2
  250. package/src/functions/roomShapeWalls.ts +3 -5
  251. package/src/functions/serialization.ts +2 -3
  252. package/src/functions/slots.ts +2 -1
  253. package/src/functions/stats.ts +2 -1
  254. package/src/functions/transformations.ts +19 -18
  255. package/src/functions/utils.ts +1 -1
  256. package/src/index.ts +2 -1
  257. package/src/maps/PHDPillConversions.ts +19 -19
  258. package/src/maps/cardNameToTypeMap.ts +2 -1
  259. package/src/maps/characterNameToTypeMap.ts +86 -86
  260. package/src/maps/collectibleDescriptionMap.ts +726 -724
  261. package/src/maps/collectibleNameToTypeMap.ts +10 -7
  262. package/src/maps/collectibleTypeToNameMap.ts +3 -4
  263. package/src/maps/defaultPlayerStatMap.ts +2 -1
  264. package/src/maps/falsePHDPillConversions.ts +36 -33
  265. package/src/maps/gridEntityTypeToBrokenStateMap.ts +3 -2
  266. package/src/maps/gridEntityXMLMap.ts +3 -2
  267. package/src/maps/keyboardToString.ts +3 -2
  268. package/src/maps/pillNameToEffectMap.ts +85 -86
  269. package/src/maps/roomNameToTypeMap.ts +2 -1
  270. package/src/maps/roomShapeToTopLeftWallGridIndexMap.ts +3 -2
  271. package/src/maps/transformationNameToPlayerFormMap.ts +3 -2
  272. package/src/maps/trinketDescriptionMap.ts +191 -192
  273. package/src/maps/trinketNameToTypeMap.ts +10 -7
  274. package/src/maps/trinketTypeToNameMap.ts +191 -193
  275. package/src/objects/LRoomShapeToRectangles.ts +35 -28
  276. package/src/objects/backdropTypeToRockAltType.ts +1 -2
  277. package/src/objects/bossNamePNGFileNames.ts +1 -2
  278. package/src/objects/bossPortraitPNGFileNames.ts +1 -2
  279. package/src/objects/cardDescriptions.ts +1 -2
  280. package/src/objects/cardNames.ts +1 -2
  281. package/src/objects/challengeNames.ts +1 -2
  282. package/src/objects/characterDamageMultipliers.ts +1 -2
  283. package/src/objects/characterNames.ts +1 -2
  284. package/src/objects/coinSubTypeToValue.ts +1 -2
  285. package/src/objects/directionNames.ts +1 -2
  286. package/src/objects/directionToDegrees.ts +1 -2
  287. package/src/objects/directionToMoveAction.ts +1 -2
  288. package/src/objects/directionToShootAction.ts +1 -2
  289. package/src/objects/directionToVector.ts +7 -10
  290. package/src/objects/doorSlotFlagToDoorSlot.ts +1 -2
  291. package/src/objects/doorSlotToDirection.ts +1 -2
  292. package/src/objects/doorSlotToDoorSlotFlag.ts +1 -2
  293. package/src/objects/isaacAPIClassTypeToBrand.ts +1 -5
  294. package/src/objects/languageNames.ts +1 -2
  295. package/src/objects/oppositeDoorSlots.ts +1 -2
  296. package/src/objects/pillEffectClasses.ts +1 -2
  297. package/src/objects/pillEffectNames.ts +1 -2
  298. package/src/objects/pillEffectTypes.ts +1 -2
  299. package/src/objects/playerNamePNGFileNames.ts +1 -2
  300. package/src/objects/playerPortraitPNGFileNames.ts +1 -2
  301. package/src/objects/roomShapeBounds.ts +3 -7
  302. package/src/objects/roomShapeCorners.ts +59 -62
  303. package/src/objects/roomShapeLayoutSizes.ts +6 -10
  304. package/src/objects/roomShapeToBottomRightPosition.ts +11 -17
  305. package/src/objects/roomShapeToDoorSlotCoordinates.ts +93 -94
  306. package/src/objects/roomShapeToDoorSlots.ts +11 -14
  307. package/src/objects/roomShapeToDoorSlotsToGridIndexDelta.ts +15 -14
  308. package/src/objects/roomShapeToGridWidth.ts +1 -2
  309. package/src/objects/roomShapeToTopLeftPosition.ts +6 -9
  310. package/src/objects/roomShapeVolumes.ts +1 -2
  311. package/src/objects/roomTypeGotoPrefixes.ts +1 -2
  312. package/src/objects/roomTypeNames.ts +1 -2
  313. package/src/objects/stageToMusic.ts +10 -11
  314. package/src/objects/stageTypeSuffixes.ts +1 -2
  315. package/src/objects/stageTypeToLetter.ts +1 -2
  316. package/src/objects/transformationNames.ts +1 -2
  317. package/src/objects/versusScreenBackgroundColors.ts +30 -33
  318. package/src/objects/versusScreenDirtSpotColors.ts +30 -33
  319. package/src/sets/LRoomShapesSet.ts +2 -1
  320. package/src/sets/bossSets.ts +51 -49
  321. package/src/sets/charactersThatStartWithAnActiveItemSet.ts +3 -2
  322. package/src/sets/charactersWithBlackHeartFromEternalHeartSet.ts +3 -2
  323. package/src/sets/charactersWithFreeDevilDealsSet.ts +4 -2
  324. package/src/sets/charactersWithNoRedHeartsSet.ts +11 -11
  325. package/src/sets/charactersWithNoSoulHeartsSet.ts +8 -8
  326. package/src/sets/chestPickupVariantsSet.ts +2 -1
  327. package/src/sets/consoleCommandsSet.ts +3 -1
  328. package/src/sets/entitiesWithArmorSet.ts +2 -1
  329. package/src/sets/familiarsThatShootPlayerTearsSet.ts +3 -2
  330. package/src/sets/itemConfigCardTypesForCardsSet.ts +11 -0
  331. package/src/sets/lostStyleCharactersSet.ts +2 -1
  332. package/src/sets/mineShaftRoomSubTypesSet.ts +8 -8
  333. package/src/sets/narrowRoomShapesSet.ts +2 -1
  334. package/src/sets/redHeartSubTypesSet.ts +2 -1
  335. package/src/sets/sinEntityTypesSet.ts +2 -1
  336. package/src/sets/singleUseActiveCollectibleTypesSet.ts +3 -2
  337. package/src/sets/storyBossesSet.ts +2 -1
  338. package/src/types/PickingUpItem.ts +2 -1
  339. package/src/types/ReadonlyMap.ts +13 -0
  340. package/src/types/ReadonlySet.ts +9 -0
  341. package/dist/src/types/HasAllEnumKeys.d.ts +0 -26
  342. package/dist/src/types/HasAllEnumKeys.d.ts.map +0 -1
  343. package/dist/src/types/HasAllEnumKeys.lua +0 -2
  344. package/src/types/HasAllEnumKeys.ts +0 -25
@@ -1,30 +1,24 @@
1
1
  import { RoomShape } from "isaac-typescript-definitions";
2
+ import { newReadonlyVector } from "../functions/readOnly";
2
3
 
3
- const TWO_BY_TWO_BOTTOM_RIGHT_POSITION: Readonly<Vector> = Vector(25, 13);
4
- const ONE_BY_TWO_VERTICAL_BOTTOM_RIGHT_POSITION: Readonly<Vector> = Vector(
5
- 12,
6
- 13,
7
- );
4
+ const TWO_BY_TWO_BOTTOM_RIGHT_POSITION = newReadonlyVector(25, 13);
5
+ const ONE_BY_TWO_VERTICAL_BOTTOM_RIGHT_POSITION = newReadonlyVector(12, 13);
8
6
 
9
7
  /**
10
8
  * "Vector(0, 0)" corresponds to the top left tile of a room, not including the walls. (The top-left
11
9
  * wall would be at "Vector(-1, -1)".)
12
10
  */
13
- // We need the vectors to be read-only, so we specify the type instead of using the `satisfies`
14
- // operator.
15
- export const ROOM_SHAPE_TO_BOTTOM_RIGHT_POSITION: {
16
- readonly [Key in RoomShape]: Readonly<Vector>;
17
- } = {
18
- [RoomShape.SHAPE_1x1]: Vector(12, 6), // 1
19
- [RoomShape.IH]: Vector(12, 4), // 2
20
- [RoomShape.IV]: Vector(8, 6), // 3
11
+ export const ROOM_SHAPE_TO_BOTTOM_RIGHT_POSITION = {
12
+ [RoomShape.SHAPE_1x1]: newReadonlyVector(12, 6), // 1
13
+ [RoomShape.IH]: newReadonlyVector(12, 4), // 2
14
+ [RoomShape.IV]: newReadonlyVector(8, 6), // 3
21
15
  [RoomShape.SHAPE_1x2]: ONE_BY_TWO_VERTICAL_BOTTOM_RIGHT_POSITION, // 4
22
- [RoomShape.IIV]: Vector(8, 13), // 5
23
- [RoomShape.SHAPE_2x1]: Vector(25, 6), // 6
24
- [RoomShape.IIH]: Vector(25, 4), // 7
16
+ [RoomShape.IIV]: newReadonlyVector(8, 13), // 5
17
+ [RoomShape.SHAPE_2x1]: newReadonlyVector(25, 6), // 6
18
+ [RoomShape.IIH]: newReadonlyVector(25, 4), // 7
25
19
  [RoomShape.SHAPE_2x2]: TWO_BY_TWO_BOTTOM_RIGHT_POSITION, // 8
26
20
  [RoomShape.LTL]: TWO_BY_TWO_BOTTOM_RIGHT_POSITION, // 9
27
21
  [RoomShape.LTR]: TWO_BY_TWO_BOTTOM_RIGHT_POSITION, // 10
28
22
  [RoomShape.LBL]: TWO_BY_TWO_BOTTOM_RIGHT_POSITION, // 11
29
23
  [RoomShape.LBR]: ONE_BY_TWO_VERTICAL_BOTTOM_RIGHT_POSITION, // 12
30
- } as const;
24
+ } as const satisfies Record<RoomShape, Readonly<Vector>>;
@@ -5,120 +5,119 @@ import { DoorSlot, RoomShape } from "isaac-typescript-definitions";
5
5
  *
6
6
  * e.g. `<door exists="False" x="-1" y="3" />`
7
7
  */
8
- // We need the maps to be read-only, so we specify the type instead of using the `satisfies`
9
- // operator.
10
- export const ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES: {
11
- readonly [Key in RoomShape]: ReadonlyMap<DoorSlot, readonly [x: int, y: int]>;
12
- } = {
8
+ export const ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES = {
13
9
  // 1
14
- [RoomShape.SHAPE_1x1]: new Map([
15
- [DoorSlot.LEFT_0, [-1, 3]], // 0
16
- [DoorSlot.UP_0, [6, -1]], // 1
17
- [DoorSlot.RIGHT_0, [13, 3]], // 2
18
- [DoorSlot.DOWN_0, [6, 7]], // 3
19
- ]),
10
+ [RoomShape.SHAPE_1x1]: {
11
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
12
+ [DoorSlot.UP_0]: [6, -1], // 1
13
+ [DoorSlot.RIGHT_0]: [13, 3], // 2
14
+ [DoorSlot.DOWN_0]: [6, 7], // 3
15
+ },
20
16
 
21
17
  // 2
22
- [RoomShape.IH]: new Map([
23
- [DoorSlot.LEFT_0, [-1, 3]], // 0
24
- [DoorSlot.RIGHT_0, [13, 3]], // 2
25
- ]),
18
+ [RoomShape.IH]: {
19
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
20
+ [DoorSlot.RIGHT_0]: [13, 3], // 2
21
+ },
26
22
 
27
23
  // 3
28
- [RoomShape.IV]: new Map([
29
- [DoorSlot.UP_0, [6, -1]], // 1
30
- [DoorSlot.DOWN_0, [6, 7]], // 3
31
- ]),
24
+ [RoomShape.IV]: {
25
+ [DoorSlot.UP_0]: [6, -1], // 1
26
+ [DoorSlot.DOWN_0]: [6, 7], // 3
27
+ },
32
28
 
33
29
  // 4
34
- [RoomShape.SHAPE_1x2]: new Map([
35
- [DoorSlot.LEFT_0, [-1, 3]], // 0
36
- [DoorSlot.UP_0, [6, -1]], // 1
37
- [DoorSlot.RIGHT_0, [13, 3]], // 2
38
- [DoorSlot.DOWN_0, [6, 14]], // 3
39
- [DoorSlot.LEFT_1, [-1, 10]], // 4
40
- [DoorSlot.RIGHT_1, [13, 10]], // 6
41
- ]),
30
+ [RoomShape.SHAPE_1x2]: {
31
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
32
+ [DoorSlot.UP_0]: [6, -1], // 1
33
+ [DoorSlot.RIGHT_0]: [13, 3], // 2
34
+ [DoorSlot.DOWN_0]: [6, 14], // 3
35
+ [DoorSlot.LEFT_1]: [-1, 10], // 4
36
+ [DoorSlot.RIGHT_1]: [13, 10], // 6
37
+ },
42
38
 
43
39
  // 5
44
- [RoomShape.IIV]: new Map([
45
- [DoorSlot.UP_0, [6, -1]], // 1
46
- [DoorSlot.DOWN_0, [6, 14]], // 3
47
- ]),
40
+ [RoomShape.IIV]: {
41
+ [DoorSlot.UP_0]: [6, -1], // 1
42
+ [DoorSlot.DOWN_0]: [6, 14], // 3
43
+ },
48
44
 
49
45
  // 6
50
- [RoomShape.SHAPE_2x1]: new Map([
51
- [DoorSlot.LEFT_0, [-1, 3]], // 0
52
- [DoorSlot.UP_0, [6, -1]], // 1
53
- [DoorSlot.RIGHT_0, [26, 3]], // 2
54
- [DoorSlot.DOWN_0, [6, 7]], // 3
55
- [DoorSlot.UP_1, [19, -1]], // 5
56
- [DoorSlot.DOWN_1, [19, 7]], // 7
57
- ]),
46
+ [RoomShape.SHAPE_2x1]: {
47
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
48
+ [DoorSlot.UP_0]: [6, -1], // 1
49
+ [DoorSlot.RIGHT_0]: [26, 3], // 2
50
+ [DoorSlot.DOWN_0]: [6, 7], // 3
51
+ [DoorSlot.UP_1]: [19, -1], // 5
52
+ [DoorSlot.DOWN_1]: [19, 7], // 7
53
+ },
58
54
 
59
55
  // 7
60
- [RoomShape.IIH]: new Map([
61
- [DoorSlot.LEFT_0, [-1, 3]], // 0
62
- [DoorSlot.RIGHT_0, [26, 3]], // 2
63
- ]),
56
+ [RoomShape.IIH]: {
57
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
58
+ [DoorSlot.RIGHT_0]: [26, 3], // 2
59
+ },
64
60
 
65
61
  // 8
66
- [RoomShape.SHAPE_2x2]: new Map([
67
- [DoorSlot.LEFT_0, [-1, 3]], // 0
68
- [DoorSlot.UP_0, [6, -1]], // 1
69
- [DoorSlot.RIGHT_0, [26, 3]], // 2
70
- [DoorSlot.DOWN_0, [6, 14]], // 3
71
- [DoorSlot.LEFT_1, [-1, 10]], // 4
72
- [DoorSlot.UP_1, [19, -1]], // 5
73
- [DoorSlot.RIGHT_1, [26, 10]], // 6
74
- [DoorSlot.DOWN_1, [19, 14]], // 7
75
- ]),
62
+ [RoomShape.SHAPE_2x2]: {
63
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
64
+ [DoorSlot.UP_0]: [6, -1], // 1
65
+ [DoorSlot.RIGHT_0]: [26, 3], // 2
66
+ [DoorSlot.DOWN_0]: [6, 14], // 3
67
+ [DoorSlot.LEFT_1]: [-1, 10], // 4
68
+ [DoorSlot.UP_1]: [19, -1], // 5
69
+ [DoorSlot.RIGHT_1]: [26, 10], // 6
70
+ [DoorSlot.DOWN_1]: [19, 14], // 7
71
+ },
76
72
 
77
73
  // 9
78
- [RoomShape.LTL]: new Map([
79
- [DoorSlot.LEFT_0, [12, 3]], // 0
80
- [DoorSlot.UP_0, [6, 6]], // 1
81
- [DoorSlot.RIGHT_0, [26, 3]], // 2
82
- [DoorSlot.DOWN_0, [6, 14]], // 3
83
- [DoorSlot.LEFT_1, [-1, 10]], // 4
84
- [DoorSlot.UP_1, [19, -1]], // 5
85
- [DoorSlot.RIGHT_1, [26, 10]], // 6
86
- [DoorSlot.DOWN_1, [19, 14]], // 7
87
- ]),
74
+ [RoomShape.LTL]: {
75
+ [DoorSlot.LEFT_0]: [12, 3], // 0
76
+ [DoorSlot.UP_0]: [6, 6], // 1
77
+ [DoorSlot.RIGHT_0]: [26, 3], // 2
78
+ [DoorSlot.DOWN_0]: [6, 14], // 3
79
+ [DoorSlot.LEFT_1]: [-1, 10], // 4
80
+ [DoorSlot.UP_1]: [19, -1], // 5
81
+ [DoorSlot.RIGHT_1]: [26, 10], // 6
82
+ [DoorSlot.DOWN_1]: [19, 14], // 7
83
+ },
88
84
 
89
85
  // 10
90
- [RoomShape.LTR]: new Map([
91
- [DoorSlot.LEFT_0, [-1, 3]], // 0
92
- [DoorSlot.UP_0, [6, -1]], // 1
93
- [DoorSlot.RIGHT_0, [13, 3]], // 2
94
- [DoorSlot.DOWN_0, [6, 14]], // 3
95
- [DoorSlot.LEFT_1, [-1, 10]], // 4
96
- [DoorSlot.UP_1, [19, 6]], // 5
97
- [DoorSlot.RIGHT_1, [26, 10]], // 6
98
- [DoorSlot.DOWN_1, [19, 14]], // 7
99
- ]),
86
+ [RoomShape.LTR]: {
87
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
88
+ [DoorSlot.UP_0]: [6, -1], // 1
89
+ [DoorSlot.RIGHT_0]: [13, 3], // 2
90
+ [DoorSlot.DOWN_0]: [6, 14], // 3
91
+ [DoorSlot.LEFT_1]: [-1, 10], // 4
92
+ [DoorSlot.UP_1]: [19, 6], // 5
93
+ [DoorSlot.RIGHT_1]: [26, 10], // 6
94
+ [DoorSlot.DOWN_1]: [19, 14], // 7
95
+ },
100
96
 
101
97
  // 11
102
- [RoomShape.LBL]: new Map([
103
- [DoorSlot.LEFT_0, [-1, 3]], // 0
104
- [DoorSlot.UP_0, [6, -1]], // 1
105
- [DoorSlot.RIGHT_0, [26, 3]], // 2
106
- [DoorSlot.DOWN_0, [6, 7]], // 3
107
- [DoorSlot.LEFT_1, [12, 10]], // 4
108
- [DoorSlot.UP_1, [19, -1]], // 5
109
- [DoorSlot.RIGHT_1, [26, 10]], // 6
110
- [DoorSlot.DOWN_1, [19, 14]], // 7
111
- ]),
98
+ [RoomShape.LBL]: {
99
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
100
+ [DoorSlot.UP_0]: [6, -1], // 1
101
+ [DoorSlot.RIGHT_0]: [26, 3], // 2
102
+ [DoorSlot.DOWN_0]: [6, 7], // 3
103
+ [DoorSlot.LEFT_1]: [12, 10], // 4
104
+ [DoorSlot.UP_1]: [19, -1], // 5
105
+ [DoorSlot.RIGHT_1]: [26, 10], // 6
106
+ [DoorSlot.DOWN_1]: [19, 14], // 7
107
+ },
112
108
 
113
109
  // 12
114
- [RoomShape.LBR]: new Map([
115
- [DoorSlot.LEFT_0, [-1, 3]], // 0
116
- [DoorSlot.UP_0, [6, -1]], // 1
117
- [DoorSlot.RIGHT_0, [26, 3]], // 2
118
- [DoorSlot.DOWN_0, [6, 14]], // 3
119
- [DoorSlot.LEFT_1, [-1, 10]], // 4
120
- [DoorSlot.UP_1, [19, -1]], // 5
121
- [DoorSlot.RIGHT_1, [13, 10]], // 6
122
- [DoorSlot.DOWN_1, [19, 7]], // 7
123
- ]),
124
- } as const;
110
+ [RoomShape.LBR]: {
111
+ [DoorSlot.LEFT_0]: [-1, 3], // 0
112
+ [DoorSlot.UP_0]: [6, -1], // 1
113
+ [DoorSlot.RIGHT_0]: [26, 3], // 2
114
+ [DoorSlot.DOWN_0]: [6, 14], // 3
115
+ [DoorSlot.LEFT_1]: [-1, 10], // 4
116
+ [DoorSlot.UP_1]: [19, -1], // 5
117
+ [DoorSlot.RIGHT_1]: [13, 10], // 6
118
+ [DoorSlot.DOWN_1]: [19, 7], // 7
119
+ },
120
+ } as const satisfies Record<
121
+ RoomShape,
122
+ Partial<Record<DoorSlot, readonly [x: int, y: int]>>
123
+ >;
@@ -1,6 +1,7 @@
1
1
  import { DoorSlot, RoomShape } from "isaac-typescript-definitions";
2
+ import { ReadonlySet } from "../types/ReadonlySet";
2
3
 
3
- const ALL_DOOR_SLOTS_SET: ReadonlySet<DoorSlot> = new Set([
4
+ const ALL_DOOR_SLOTS_SET = new ReadonlySet<DoorSlot>([
4
5
  DoorSlot.LEFT_0, // 0
5
6
  DoorSlot.UP_0, // 1
6
7
  DoorSlot.RIGHT_0, // 2
@@ -11,13 +12,9 @@ const ALL_DOOR_SLOTS_SET: ReadonlySet<DoorSlot> = new Set([
11
12
  DoorSlot.DOWN_1, // 7
12
13
  ]);
13
14
 
14
- // We need the sets to be read-only, so we specify the type instead of using the `satisfies`
15
- // operator.
16
- export const ROOM_SHAPE_TO_DOOR_SLOTS: {
17
- readonly [Key in RoomShape]: ReadonlySet<DoorSlot>;
18
- } = {
15
+ export const ROOM_SHAPE_TO_DOOR_SLOTS = {
19
16
  // 1
20
- [RoomShape.SHAPE_1x1]: new Set([
17
+ [RoomShape.SHAPE_1x1]: new ReadonlySet([
21
18
  DoorSlot.LEFT_0, // 0
22
19
  DoorSlot.UP_0, // 1
23
20
  DoorSlot.RIGHT_0, // 2
@@ -25,19 +22,19 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS: {
25
22
  ]),
26
23
 
27
24
  // 2
28
- [RoomShape.IH]: new Set([
25
+ [RoomShape.IH]: new ReadonlySet([
29
26
  DoorSlot.LEFT_0, // 0
30
27
  DoorSlot.RIGHT_0, // 2
31
28
  ]),
32
29
 
33
30
  // 3
34
- [RoomShape.IV]: new Set([
31
+ [RoomShape.IV]: new ReadonlySet([
35
32
  DoorSlot.UP_0, // 1
36
33
  DoorSlot.DOWN_0, // 3
37
34
  ]),
38
35
 
39
36
  // 4
40
- [RoomShape.SHAPE_1x2]: new Set([
37
+ [RoomShape.SHAPE_1x2]: new ReadonlySet([
41
38
  DoorSlot.LEFT_0, // 0
42
39
  DoorSlot.UP_0, // 1
43
40
  DoorSlot.RIGHT_0, // 2
@@ -47,13 +44,13 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS: {
47
44
  ]),
48
45
 
49
46
  // 5
50
- [RoomShape.IIV]: new Set([
47
+ [RoomShape.IIV]: new ReadonlySet([
51
48
  DoorSlot.UP_0, // 1
52
49
  DoorSlot.DOWN_0, // 3
53
50
  ]),
54
51
 
55
52
  // 6
56
- [RoomShape.SHAPE_2x1]: new Set([
53
+ [RoomShape.SHAPE_2x1]: new ReadonlySet([
57
54
  DoorSlot.LEFT_0, // 0
58
55
  DoorSlot.UP_0, // 1
59
56
  DoorSlot.RIGHT_0, // 2
@@ -63,7 +60,7 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS: {
63
60
  ]),
64
61
 
65
62
  // 7
66
- [RoomShape.IIH]: new Set([
63
+ [RoomShape.IIH]: new ReadonlySet([
67
64
  DoorSlot.LEFT_0, // 0
68
65
  DoorSlot.RIGHT_0, // 2
69
66
  ]),
@@ -82,4 +79,4 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS: {
82
79
 
83
80
  // 12
84
81
  [RoomShape.LBR]: ALL_DOOR_SLOTS_SET,
85
- } as const;
82
+ } as const satisfies Record<RoomShape, ReadonlySet<DoorSlot>>;
@@ -1,5 +1,6 @@
1
1
  import { DoorSlot, RoomShape } from "isaac-typescript-definitions";
2
2
  import { LEVEL_GRID_ROW_WIDTH } from "../core/constants";
3
+ import { ReadonlyMap } from "../types/ReadonlyMap";
3
4
 
4
5
  const LEFT = -1;
5
6
  const UP = -LEVEL_GRID_ROW_WIDTH;
@@ -10,13 +11,13 @@ const DOWN = LEVEL_GRID_ROW_WIDTH;
10
11
  * Deltas are considered to be from the safe grid index of the room (i.e. the top left corner, or
11
12
  * top right corner in the case of `RoomShape.LTL`).
12
13
  */
13
- // We need the maps to be read-only, so we specify the type instead of using the `satisfies`
14
- // operator.
14
+ // We need the maps to be widened for all `DoorSlot`, so we specify the type instead of using the
15
+ // `satisfies` operator.
15
16
  export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
16
17
  readonly [Key in RoomShape]: ReadonlyMap<DoorSlot, int>;
17
18
  } = {
18
19
  // 1
19
- [RoomShape.SHAPE_1x1]: new Map([
20
+ [RoomShape.SHAPE_1x1]: new ReadonlyMap([
20
21
  [DoorSlot.LEFT_0, LEFT], // 0
21
22
  [DoorSlot.UP_0, UP], // 1
22
23
  [DoorSlot.RIGHT_0, RIGHT], // 2
@@ -24,19 +25,19 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
24
25
  ]),
25
26
 
26
27
  // 2
27
- [RoomShape.IH]: new Map([
28
+ [RoomShape.IH]: new ReadonlyMap([
28
29
  [DoorSlot.LEFT_0, LEFT], // 0
29
30
  [DoorSlot.RIGHT_0, RIGHT], // 2
30
31
  ]),
31
32
 
32
33
  // 3
33
- [RoomShape.IV]: new Map([
34
+ [RoomShape.IV]: new ReadonlyMap([
34
35
  [DoorSlot.UP_0, UP], // 1
35
36
  [DoorSlot.DOWN_0, DOWN], // 3
36
37
  ]),
37
38
 
38
39
  // 4
39
- [RoomShape.SHAPE_1x2]: new Map([
40
+ [RoomShape.SHAPE_1x2]: new ReadonlyMap([
40
41
  [DoorSlot.LEFT_0, LEFT], // 0
41
42
  [DoorSlot.UP_0, UP], // 1
42
43
  [DoorSlot.RIGHT_0, RIGHT], // 2
@@ -46,13 +47,13 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
46
47
  ]),
47
48
 
48
49
  // 5
49
- [RoomShape.IIV]: new Map([
50
+ [RoomShape.IIV]: new ReadonlyMap([
50
51
  [DoorSlot.UP_0, UP], // 1
51
52
  [DoorSlot.DOWN_0, DOWN + DOWN], // 3
52
53
  ]),
53
54
 
54
55
  // 6
55
- [RoomShape.SHAPE_2x1]: new Map([
56
+ [RoomShape.SHAPE_2x1]: new ReadonlyMap([
56
57
  [DoorSlot.LEFT_0, LEFT], // 0
57
58
  [DoorSlot.UP_0, UP], // 1
58
59
  [DoorSlot.RIGHT_0, RIGHT + RIGHT], // 2
@@ -62,13 +63,13 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
62
63
  ]),
63
64
 
64
65
  // 7
65
- [RoomShape.IIH]: new Map([
66
+ [RoomShape.IIH]: new ReadonlyMap([
66
67
  [DoorSlot.LEFT_0, LEFT], // 0
67
68
  [DoorSlot.RIGHT_0, RIGHT + RIGHT], // 2
68
69
  ]),
69
70
 
70
71
  // 8
71
- [RoomShape.SHAPE_2x2]: new Map([
72
+ [RoomShape.SHAPE_2x2]: new ReadonlyMap([
72
73
  [DoorSlot.LEFT_0, LEFT], // 0
73
74
  [DoorSlot.UP_0, UP], // 1
74
75
  [DoorSlot.RIGHT_0, RIGHT + RIGHT], // 2
@@ -80,7 +81,7 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
80
81
  ]),
81
82
 
82
83
  // 9
83
- [RoomShape.LTL]: new Map([
84
+ [RoomShape.LTL]: new ReadonlyMap([
84
85
  [DoorSlot.LEFT_0, LEFT], // 0
85
86
  [DoorSlot.UP_0, DOWN + LEFT + UP], // 1
86
87
  [DoorSlot.RIGHT_0, RIGHT], // 2
@@ -92,7 +93,7 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
92
93
  ]),
93
94
 
94
95
  // 10
95
- [RoomShape.LTR]: new Map([
96
+ [RoomShape.LTR]: new ReadonlyMap([
96
97
  [DoorSlot.LEFT_0, LEFT], // 0
97
98
  [DoorSlot.UP_0, UP], // 1
98
99
  [DoorSlot.RIGHT_0, RIGHT], // 2
@@ -104,7 +105,7 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
104
105
  ]),
105
106
 
106
107
  // 11
107
- [RoomShape.LBL]: new Map([
108
+ [RoomShape.LBL]: new ReadonlyMap([
108
109
  [DoorSlot.LEFT_0, LEFT], // 0
109
110
  [DoorSlot.UP_0, UP], // 1
110
111
  [DoorSlot.RIGHT_0, RIGHT + RIGHT], // 2
@@ -116,7 +117,7 @@ export const ROOM_SHAPE_TO_DOOR_SLOTS_TO_GRID_INDEX_DELTA: {
116
117
  ]),
117
118
 
118
119
  // 12
119
- [RoomShape.LBR]: new Map([
120
+ [RoomShape.LBR]: new ReadonlyMap([
120
121
  [DoorSlot.LEFT_0, LEFT], // 0
121
122
  [DoorSlot.UP_0, UP], // 1
122
123
  [DoorSlot.RIGHT_0, RIGHT + RIGHT], // 2
@@ -1,5 +1,4 @@
1
1
  import { RoomShape } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  const ONE_BY_ONE_WIDTH = 15;
5
4
  const TWO_BY_ONE_WIDTH = 28;
@@ -17,4 +16,4 @@ export const ROOM_SHAPE_TO_GRID_WIDTH = {
17
16
  [RoomShape.LTR]: TWO_BY_ONE_WIDTH, // 10
18
17
  [RoomShape.LBL]: TWO_BY_ONE_WIDTH, // 11
19
18
  [RoomShape.LBR]: TWO_BY_ONE_WIDTH, // 12
20
- } as const satisfies HasAllEnumKeys<RoomShape, int>;
19
+ } as const satisfies Record<RoomShape, int>;
@@ -1,18 +1,15 @@
1
1
  import { RoomShape } from "isaac-typescript-definitions";
2
2
  import { VectorZero } from "../core/constants";
3
+ import { newReadonlyVector } from "../functions/readOnly";
3
4
 
4
- const NARROW_HORIZONTAL_TOP_LEFT_POSITION: Readonly<Vector> = Vector(0, 2);
5
- const NARROW_VERTICAL_TOP_LEFT_POSITION: Readonly<Vector> = Vector(4, 0);
5
+ const NARROW_HORIZONTAL_TOP_LEFT_POSITION = newReadonlyVector(0, 2);
6
+ const NARROW_VERTICAL_TOP_LEFT_POSITION = newReadonlyVector(4, 0);
6
7
 
7
8
  /**
8
9
  * "Vector(0, 0)" corresponds to the top left tile of a room, not including the walls. (The top-left
9
10
  * wall would be at "Vector(-1, -1)".)
10
11
  */
11
- // We need the vectors to be read-only, so we specify the type instead of using the `satisfies`
12
- // operator.
13
- export const ROOM_SHAPE_TO_TOP_LEFT_POSITION: {
14
- readonly [Key in RoomShape]: Readonly<Vector>;
15
- } = {
12
+ export const ROOM_SHAPE_TO_TOP_LEFT_POSITION = {
16
13
  [RoomShape.SHAPE_1x1]: VectorZero, // 1
17
14
  [RoomShape.IH]: NARROW_HORIZONTAL_TOP_LEFT_POSITION, // 2
18
15
  [RoomShape.IV]: NARROW_VERTICAL_TOP_LEFT_POSITION, // 3
@@ -21,8 +18,8 @@ export const ROOM_SHAPE_TO_TOP_LEFT_POSITION: {
21
18
  [RoomShape.SHAPE_2x1]: VectorZero, // 6
22
19
  [RoomShape.IIH]: NARROW_HORIZONTAL_TOP_LEFT_POSITION, // 7
23
20
  [RoomShape.SHAPE_2x2]: VectorZero, // 8
24
- [RoomShape.LTL]: Vector(13, 0), // 9
21
+ [RoomShape.LTL]: newReadonlyVector(13, 0), // 9
25
22
  [RoomShape.LTR]: VectorZero, // 10
26
23
  [RoomShape.LBL]: VectorZero, // 11
27
24
  [RoomShape.LBR]: VectorZero, // 12
28
- } as const;
25
+ } as const satisfies Record<RoomShape, Readonly<Vector>>;
@@ -1,5 +1,4 @@
1
1
  import { RoomShape } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  export const ONE_BY_ONE_CONTENTS_WIDTH = 13;
5
4
  export const ONE_BY_ONE_CONTENTS_HEIGHT = 7;
@@ -34,4 +33,4 @@ export const ROOM_SHAPE_VOLUMES = {
34
33
  [RoomShape.LTR]: L_ROOM_VOLUME, // 10
35
34
  [RoomShape.LBL]: L_ROOM_VOLUME, // 11
36
35
  [RoomShape.LBR]: L_ROOM_VOLUME, // 12
37
- } as const satisfies HasAllEnumKeys<RoomShape, int>;
36
+ } as const satisfies Record<RoomShape, int>;
@@ -1,5 +1,4 @@
1
1
  import { RoomType } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  export const ROOM_TYPE_GOTO_PREFIXES = {
5
4
  [RoomType.DEFAULT]: "s.default", // 1
@@ -31,4 +30,4 @@ export const ROOM_TYPE_GOTO_PREFIXES = {
31
30
  [RoomType.SECRET_EXIT]: "s.secretexit", // 27
32
31
  [RoomType.BLUE]: "s.blue", // 28
33
32
  [RoomType.ULTRA_SECRET]: "s.ultrasecret", // 29
34
- } as const satisfies HasAllEnumKeys<RoomType, string>;
33
+ } as const satisfies Record<RoomType, string>;
@@ -1,5 +1,4 @@
1
1
  import { RoomType } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  export const ROOM_TYPE_NAMES = {
5
4
  [RoomType.DEFAULT]: "default room", // 1
@@ -31,4 +30,4 @@ export const ROOM_TYPE_NAMES = {
31
30
  [RoomType.SECRET_EXIT]: "Secret Exit", // 27
32
31
  [RoomType.BLUE]: "Blue Room", // 28
33
32
  [RoomType.ULTRA_SECRET]: "Ultra Secret Room", // 29
34
- } as const satisfies HasAllEnumKeys<RoomType, string>;
33
+ } as const satisfies Record<RoomType, string>;
@@ -1,5 +1,4 @@
1
1
  import { LevelStage, Music, StageType } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  const BASEMENT_TO_MUSIC = {
5
4
  [StageType.ORIGINAL]: Music.BASEMENT,
@@ -8,7 +7,7 @@ const BASEMENT_TO_MUSIC = {
8
7
  [StageType.GREED_MODE]: Music.BASEMENT,
9
8
  [StageType.REPENTANCE]: Music.DOWNPOUR,
10
9
  [StageType.REPENTANCE_B]: Music.DROSS,
11
- } as const satisfies HasAllEnumKeys<StageType, Music>;
10
+ } as const satisfies Record<StageType, Music>;
12
11
 
13
12
  const CAVES_TO_MUSIC = {
14
13
  [StageType.ORIGINAL]: Music.CAVES,
@@ -17,7 +16,7 @@ const CAVES_TO_MUSIC = {
17
16
  [StageType.GREED_MODE]: Music.CAVES,
18
17
  [StageType.REPENTANCE]: Music.MINES,
19
18
  [StageType.REPENTANCE_B]: Music.ASHPIT,
20
- } as const satisfies HasAllEnumKeys<StageType, Music>;
19
+ } as const satisfies Record<StageType, Music>;
21
20
 
22
21
  const DEPTHS_TO_MUSIC = {
23
22
  [StageType.ORIGINAL]: Music.DEPTHS,
@@ -26,7 +25,7 @@ const DEPTHS_TO_MUSIC = {
26
25
  [StageType.GREED_MODE]: Music.DEPTHS,
27
26
  [StageType.REPENTANCE]: Music.MAUSOLEUM,
28
27
  [StageType.REPENTANCE_B]: Music.GEHENNA,
29
- } as const satisfies HasAllEnumKeys<StageType, Music>;
28
+ } as const satisfies Record<StageType, Music>;
30
29
 
31
30
  const WOMB_TO_MUSIC = {
32
31
  [StageType.ORIGINAL]: Music.WOMB,
@@ -35,7 +34,7 @@ const WOMB_TO_MUSIC = {
35
34
  [StageType.GREED_MODE]: Music.WOMB,
36
35
  [StageType.REPENTANCE]: Music.CORPSE,
37
36
  [StageType.REPENTANCE_B]: Music.MORTIS,
38
- } as const satisfies HasAllEnumKeys<StageType, Music>;
37
+ } as const satisfies Record<StageType, Music>;
39
38
 
40
39
  const BLUE_WOMB_TO_MUSIC = {
41
40
  [StageType.ORIGINAL]: Music.BLUE_WOMB,
@@ -44,7 +43,7 @@ const BLUE_WOMB_TO_MUSIC = {
44
43
  [StageType.GREED_MODE]: Music.BLUE_WOMB,
45
44
  [StageType.REPENTANCE]: Music.BLUE_WOMB,
46
45
  [StageType.REPENTANCE_B]: Music.BLUE_WOMB,
47
- } as const satisfies HasAllEnumKeys<StageType, Music>;
46
+ } as const satisfies Record<StageType, Music>;
48
47
 
49
48
  const SHEOL_CATHEDRAL_TO_MUSIC = {
50
49
  [StageType.ORIGINAL]: Music.SHEOL,
@@ -53,7 +52,7 @@ const SHEOL_CATHEDRAL_TO_MUSIC = {
53
52
  [StageType.GREED_MODE]: Music.SHEOL,
54
53
  [StageType.REPENTANCE]: Music.SHEOL,
55
54
  [StageType.REPENTANCE_B]: Music.SHEOL,
56
- } as const satisfies HasAllEnumKeys<StageType, Music>;
55
+ } as const satisfies Record<StageType, Music>;
57
56
 
58
57
  const DARK_ROOM_CHEST_TO_MUSIC = {
59
58
  [StageType.ORIGINAL]: Music.DARK_ROOM,
@@ -62,7 +61,7 @@ const DARK_ROOM_CHEST_TO_MUSIC = {
62
61
  [StageType.GREED_MODE]: Music.DARK_ROOM,
63
62
  [StageType.REPENTANCE]: Music.DARK_ROOM,
64
63
  [StageType.REPENTANCE_B]: Music.DARK_ROOM,
65
- } as const satisfies HasAllEnumKeys<StageType, Music>;
64
+ } as const satisfies Record<StageType, Music>;
66
65
 
67
66
  const THE_VOID_TO_MUSIC = {
68
67
  [StageType.ORIGINAL]: Music.VOID,
@@ -71,7 +70,7 @@ const THE_VOID_TO_MUSIC = {
71
70
  [StageType.GREED_MODE]: Music.VOID,
72
71
  [StageType.REPENTANCE]: Music.VOID,
73
72
  [StageType.REPENTANCE_B]: Music.VOID,
74
- } as const satisfies HasAllEnumKeys<StageType, Music>;
73
+ } as const satisfies Record<StageType, Music>;
75
74
 
76
75
  const HOME_TO_MUSIC = {
77
76
  [StageType.ORIGINAL]: Music.ISAACS_HOUSE,
@@ -80,7 +79,7 @@ const HOME_TO_MUSIC = {
80
79
  [StageType.GREED_MODE]: Music.ISAACS_HOUSE,
81
80
  [StageType.REPENTANCE]: Music.ISAACS_HOUSE,
82
81
  [StageType.REPENTANCE_B]: Music.ISAACS_HOUSE,
83
- } as const satisfies HasAllEnumKeys<StageType, Music>;
82
+ } as const satisfies Record<StageType, Music>;
84
83
 
85
84
  export const STAGE_TO_MUSIC = {
86
85
  [LevelStage.BASEMENT_1]: BASEMENT_TO_MUSIC,
@@ -96,4 +95,4 @@ export const STAGE_TO_MUSIC = {
96
95
  [LevelStage.DARK_ROOM_CHEST]: DARK_ROOM_CHEST_TO_MUSIC,
97
96
  [LevelStage.THE_VOID]: THE_VOID_TO_MUSIC,
98
97
  [LevelStage.HOME]: HOME_TO_MUSIC,
99
- } as const satisfies HasAllEnumKeys<LevelStage, Record<StageType, Music>>;
98
+ } as const satisfies Record<LevelStage, Record<StageType, Music>>;
@@ -1,5 +1,4 @@
1
1
  import { StageType } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  export const STAGE_TYPE_SUFFIXES = {
5
4
  [StageType.ORIGINAL]: "", // 0
@@ -8,4 +7,4 @@ export const STAGE_TYPE_SUFFIXES = {
8
7
  [StageType.GREED_MODE]: "", // 3
9
8
  [StageType.REPENTANCE]: "c", // 4
10
9
  [StageType.REPENTANCE_B]: "d", // 5
11
- } as const satisfies HasAllEnumKeys<StageType, string>;
10
+ } as const satisfies Record<StageType, string>;
@@ -1,5 +1,4 @@
1
1
  import { StageType } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  export const STAGE_TYPE_TO_LETTER = {
5
4
  // For example, to go to Basement 2, the command is simply "stage 2" without a letter suffix.
@@ -13,4 +12,4 @@ export const STAGE_TYPE_TO_LETTER = {
13
12
 
14
13
  [StageType.REPENTANCE]: "c", // 4
15
14
  [StageType.REPENTANCE_B]: "d", // 5
16
- } as const satisfies HasAllEnumKeys<StageType, string>;
15
+ } as const satisfies Record<StageType, string>;
@@ -1,5 +1,4 @@
1
1
  import { PlayerForm } from "isaac-typescript-definitions";
2
- import { HasAllEnumKeys } from "../types/HasAllEnumKeys";
3
2
 
4
3
  export const TRANSFORMATION_NAMES = {
5
4
  [PlayerForm.GUPPY]: "Guppy", // 0
@@ -16,4 +15,4 @@ export const TRANSFORMATION_NAMES = {
16
15
  [PlayerForm.ADULT]: "Adult", // 11
17
16
  [PlayerForm.SPIDER_BABY]: "Spider Baby", // 12
18
17
  [PlayerForm.STOMPY]: "Stompy", // 13
19
- } as const satisfies HasAllEnumKeys<PlayerForm, string>;
18
+ } as const satisfies Record<PlayerForm, string>;