isaacscript-common 6.6.0 → 6.6.1-dev.2

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 (820) hide show
  1. package/cachedClasses.d.ts +1 -0
  2. package/cachedClasses.js +59 -0
  3. package/cachedClasses.lua +2 -0
  4. package/callbacks/customRevive.js +153 -0
  5. package/callbacks/customRevive.lua +2 -0
  6. package/callbacks/itemPickup.js +64 -0
  7. package/callbacks/itemPickup.lua +2 -0
  8. package/callbacks/postAmbush.js +54 -0
  9. package/callbacks/postAmbush.lua +2 -0
  10. package/callbacks/postBombExploded.js +20 -0
  11. package/callbacks/postBombExploded.lua +2 -0
  12. package/callbacks/postBombInitLate.js +28 -0
  13. package/callbacks/postBombInitLate.lua +2 -0
  14. package/callbacks/postBoneSwing.js +49 -0
  15. package/callbacks/postBoneSwing.lua +2 -0
  16. package/callbacks/postCollectibleEmpty.js +32 -0
  17. package/callbacks/postCollectibleEmpty.lua +2 -0
  18. package/callbacks/postCollectibleInitFirst.js +27 -0
  19. package/callbacks/postCollectibleInitFirst.lua +2 -0
  20. package/callbacks/postCursedTeleport.js +120 -0
  21. package/callbacks/postCursedTeleport.lua +2 -0
  22. package/callbacks/postCustomDoorEnter.js +205 -0
  23. package/callbacks/postCustomDoorEnter.lua +2 -0
  24. package/callbacks/postDiceRoomActivated.js +39 -0
  25. package/callbacks/postDiceRoomActivated.lua +2 -0
  26. package/callbacks/postDoorRender.js +20 -0
  27. package/callbacks/postDoorRender.lua +2 -0
  28. package/callbacks/postDoorUpdate.js +20 -0
  29. package/callbacks/postDoorUpdate.lua +2 -0
  30. package/callbacks/postEffectInitLate.js +28 -0
  31. package/callbacks/postEffectInitLate.lua +2 -0
  32. package/callbacks/postEffectStateChanged.js +31 -0
  33. package/callbacks/postEffectStateChanged.lua +2 -0
  34. package/callbacks/postEsauJr.js +70 -0
  35. package/callbacks/postEsauJr.lua +2 -0
  36. package/callbacks/postFamiliarInitLate.js +28 -0
  37. package/callbacks/postFamiliarInitLate.lua +2 -0
  38. package/callbacks/postFamiliarStateChanged.js +31 -0
  39. package/callbacks/postFamiliarStateChanged.lua +2 -0
  40. package/callbacks/postFlip.js +59 -0
  41. package/callbacks/postFlip.lua +2 -0
  42. package/callbacks/postGreedModeWave.js +31 -0
  43. package/callbacks/postGreedModeWave.lua +2 -0
  44. package/callbacks/postGridEntity.js +107 -0
  45. package/callbacks/postGridEntity.lua +2 -0
  46. package/callbacks/postGridEntityCollision.js +49 -0
  47. package/callbacks/postGridEntityCollision.lua +2 -0
  48. package/callbacks/postGridEntityRender.js +20 -0
  49. package/callbacks/postGridEntityRender.lua +2 -0
  50. package/callbacks/postHolyMantleRemoved.js +33 -0
  51. package/callbacks/postHolyMantleRemoved.lua +2 -0
  52. package/callbacks/postItemDischarged.js +94 -0
  53. package/callbacks/postItemDischarged.lua +2 -0
  54. package/callbacks/postKnifeInitLate.js +28 -0
  55. package/callbacks/postKnifeInitLate.lua +2 -0
  56. package/callbacks/postLaserInitLate.js +28 -0
  57. package/callbacks/postLaserInitLate.lua +2 -0
  58. package/callbacks/postNPCInitLate.js +28 -0
  59. package/callbacks/postNPCInitLate.lua +2 -0
  60. package/callbacks/postNPCStateChanged.js +31 -0
  61. package/callbacks/postNPCStateChanged.lua +2 -0
  62. package/callbacks/postNewRoomEarly.js +69 -0
  63. package/callbacks/postNewRoomEarly.lua +2 -0
  64. package/callbacks/postPickupCollect.js +37 -0
  65. package/callbacks/postPickupCollect.lua +2 -0
  66. package/callbacks/postPickupInitFirst.js +52 -0
  67. package/callbacks/postPickupInitFirst.lua +2 -0
  68. package/callbacks/postPickupInitLate.js +28 -0
  69. package/callbacks/postPickupInitLate.lua +2 -0
  70. package/callbacks/postPickupStateChanged.js +31 -0
  71. package/callbacks/postPickupStateChanged.lua +2 -0
  72. package/callbacks/postPitRender.js +20 -0
  73. package/callbacks/postPitRender.lua +2 -0
  74. package/callbacks/postPitUpdate.js +20 -0
  75. package/callbacks/postPitUpdate.lua +2 -0
  76. package/callbacks/postPlayerChangeHealth.js +43 -0
  77. package/callbacks/postPlayerChangeHealth.lua +2 -0
  78. package/callbacks/postPlayerChangeType.js +31 -0
  79. package/callbacks/postPlayerChangeType.lua +2 -0
  80. package/callbacks/postPlayerCollectible.js +74 -0
  81. package/callbacks/postPlayerCollectible.lua +2 -0
  82. package/callbacks/postPlayerFatalDamage.js +74 -0
  83. package/callbacks/postPlayerFatalDamage.lua +2 -0
  84. package/callbacks/postPlayerInitLate.js +28 -0
  85. package/callbacks/postPlayerInitLate.lua +2 -0
  86. package/callbacks/postPlayerReordered.js +109 -0
  87. package/callbacks/postPlayerReordered.lua +2 -0
  88. package/callbacks/postPoopRender.js +20 -0
  89. package/callbacks/postPoopRender.lua +2 -0
  90. package/callbacks/postPoopUpdate.js +20 -0
  91. package/callbacks/postPoopUpdate.lua +2 -0
  92. package/callbacks/postPressurePlateRender.js +20 -0
  93. package/callbacks/postPressurePlateRender.lua +2 -0
  94. package/callbacks/postPressurePlateUpdate.js +20 -0
  95. package/callbacks/postPressurePlateUpdate.lua +2 -0
  96. package/callbacks/postProjectileInitLate.js +28 -0
  97. package/callbacks/postProjectileInitLate.lua +2 -0
  98. package/callbacks/postPurchase.js +39 -0
  99. package/callbacks/postPurchase.lua +2 -0
  100. package/callbacks/postRockRender.js +20 -0
  101. package/callbacks/postRockRender.lua +2 -0
  102. package/callbacks/postRockUpdate.js +20 -0
  103. package/callbacks/postRockUpdate.lua +2 -0
  104. package/callbacks/postRoomClearChanged.js +41 -0
  105. package/callbacks/postRoomClearChanged.lua +2 -0
  106. package/callbacks/postSacrifice.js +38 -0
  107. package/callbacks/postSacrifice.lua +2 -0
  108. package/callbacks/postSlotDestroyed.js +64 -0
  109. package/callbacks/postSlotDestroyed.lua +2 -0
  110. package/callbacks/postSlotInitUpdate.js +49 -0
  111. package/callbacks/postSlotInitUpdate.lua +2 -0
  112. package/callbacks/postSlotRender.js +48 -0
  113. package/callbacks/postSlotRender.lua +2 -0
  114. package/callbacks/postSpikesRender.js +20 -0
  115. package/callbacks/postSpikesRender.lua +2 -0
  116. package/callbacks/postSpikesUpdate.js +20 -0
  117. package/callbacks/postSpikesUpdate.lua +2 -0
  118. package/callbacks/postTNTRender.js +20 -0
  119. package/callbacks/postTNTRender.lua +2 -0
  120. package/callbacks/postTNTUpdate.js +20 -0
  121. package/callbacks/postTNTUpdate.lua +2 -0
  122. package/callbacks/postTearInitLate.js +28 -0
  123. package/callbacks/postTearInitLate.lua +2 -0
  124. package/callbacks/postTearInitVeryLate.js +32 -0
  125. package/callbacks/postTearInitVeryLate.lua +2 -0
  126. package/callbacks/postTransformation.js +37 -0
  127. package/callbacks/postTransformation.lua +2 -0
  128. package/callbacks/postTrinketBreak.js +64 -0
  129. package/callbacks/postTrinketBreak.lua +2 -0
  130. package/callbacks/preBerserkDeath.js +35 -0
  131. package/callbacks/preBerserkDeath.lua +2 -0
  132. package/callbacks/preNewLevel.js +45 -0
  133. package/callbacks/preNewLevel.lua +2 -0
  134. package/callbacks/reorderedCallbacks.js +136 -0
  135. package/callbacks/reorderedCallbacks.lua +2 -0
  136. package/callbacks/subscriptions/postAmbushFinished.js +20 -0
  137. package/callbacks/subscriptions/postAmbushFinished.lua +2 -0
  138. package/callbacks/subscriptions/postAmbushStarted.js +20 -0
  139. package/callbacks/subscriptions/postAmbushStarted.lua +2 -0
  140. package/callbacks/subscriptions/postBombInitLate.js +20 -0
  141. package/callbacks/subscriptions/postBombInitLate.lua +2 -0
  142. package/callbacks/subscriptions/postBoneExploded.js +20 -0
  143. package/callbacks/subscriptions/postBoneExploded.lua +2 -0
  144. package/callbacks/subscriptions/postBoneSwing.js +16 -0
  145. package/callbacks/subscriptions/postBoneSwing.lua +2 -0
  146. package/callbacks/subscriptions/postCollectibleEmpty.js +21 -0
  147. package/callbacks/subscriptions/postCollectibleEmpty.lua +2 -0
  148. package/callbacks/subscriptions/postCollectibleInitFirst.js +21 -0
  149. package/callbacks/subscriptions/postCollectibleInitFirst.lua +2 -0
  150. package/callbacks/subscriptions/postCursedTeleport.js +16 -0
  151. package/callbacks/subscriptions/postCursedTeleport.lua +2 -0
  152. package/callbacks/subscriptions/postCustomDoorEnter.js +21 -0
  153. package/callbacks/subscriptions/postCustomDoorEnter.lua +2 -0
  154. package/callbacks/subscriptions/postCustomRevive.js +21 -0
  155. package/callbacks/subscriptions/postCustomRevive.lua +2 -0
  156. package/callbacks/subscriptions/postDiceRoomActivated.js +21 -0
  157. package/callbacks/subscriptions/postDiceRoomActivated.lua +2 -0
  158. package/callbacks/subscriptions/postDoorRender.js +22 -0
  159. package/callbacks/subscriptions/postDoorRender.lua +2 -0
  160. package/callbacks/subscriptions/postDoorUpdate.js +22 -0
  161. package/callbacks/subscriptions/postDoorUpdate.lua +2 -0
  162. package/callbacks/subscriptions/postEffectInitLate.js +20 -0
  163. package/callbacks/subscriptions/postEffectInitLate.lua +2 -0
  164. package/callbacks/subscriptions/postEffectStateChanged.js +20 -0
  165. package/callbacks/subscriptions/postEffectStateChanged.lua +2 -0
  166. package/callbacks/subscriptions/postEsauJr.js +16 -0
  167. package/callbacks/subscriptions/postEsauJr.lua +2 -0
  168. package/callbacks/subscriptions/postFamiliarInitLate.js +20 -0
  169. package/callbacks/subscriptions/postFamiliarInitLate.lua +2 -0
  170. package/callbacks/subscriptions/postFamiliarStateChanged.js +20 -0
  171. package/callbacks/subscriptions/postFamiliarStateChanged.lua +2 -0
  172. package/callbacks/subscriptions/postFirstEsauJr.js +16 -0
  173. package/callbacks/subscriptions/postFirstEsauJr.lua +2 -0
  174. package/callbacks/subscriptions/postFirstFlip.js +16 -0
  175. package/callbacks/subscriptions/postFirstFlip.lua +2 -0
  176. package/callbacks/subscriptions/postFlip.js +16 -0
  177. package/callbacks/subscriptions/postFlip.lua +2 -0
  178. package/callbacks/subscriptions/postGameStartedReordered.js +16 -0
  179. package/callbacks/subscriptions/postGameStartedReordered.lua +2 -0
  180. package/callbacks/subscriptions/postGreedModeWave.js +16 -0
  181. package/callbacks/subscriptions/postGreedModeWave.lua +2 -0
  182. package/callbacks/subscriptions/postGridEntityBroken.js +28 -0
  183. package/callbacks/subscriptions/postGridEntityBroken.lua +2 -0
  184. package/callbacks/subscriptions/postGridEntityCollision.js +28 -0
  185. package/callbacks/subscriptions/postGridEntityCollision.lua +2 -0
  186. package/callbacks/subscriptions/postGridEntityInit.js +28 -0
  187. package/callbacks/subscriptions/postGridEntityInit.lua +2 -0
  188. package/callbacks/subscriptions/postGridEntityRemove.js +26 -0
  189. package/callbacks/subscriptions/postGridEntityRemove.lua +2 -0
  190. package/callbacks/subscriptions/postGridEntityRender.js +28 -0
  191. package/callbacks/subscriptions/postGridEntityRender.lua +2 -0
  192. package/callbacks/subscriptions/postGridEntityStateChanged.js +28 -0
  193. package/callbacks/subscriptions/postGridEntityStateChanged.lua +2 -0
  194. package/callbacks/subscriptions/postGridEntityUpdate.js +28 -0
  195. package/callbacks/subscriptions/postGridEntityUpdate.lua +2 -0
  196. package/callbacks/subscriptions/postHolyMantleRemoved.js +25 -0
  197. package/callbacks/subscriptions/postHolyMantleRemoved.lua +2 -0
  198. package/callbacks/subscriptions/postItemDischarged.js +21 -0
  199. package/callbacks/subscriptions/postItemDischarged.lua +2 -0
  200. package/callbacks/subscriptions/postItemPickup.js +25 -0
  201. package/callbacks/subscriptions/postItemPickup.lua +2 -0
  202. package/callbacks/subscriptions/postKnifeInitLate.js +20 -0
  203. package/callbacks/subscriptions/postKnifeInitLate.lua +2 -0
  204. package/callbacks/subscriptions/postLaserInitLate.js +20 -0
  205. package/callbacks/subscriptions/postLaserInitLate.lua +2 -0
  206. package/callbacks/subscriptions/postNPCInitLate.js +20 -0
  207. package/callbacks/subscriptions/postNPCInitLate.lua +2 -0
  208. package/callbacks/subscriptions/postNPCStateChanged.js +24 -0
  209. package/callbacks/subscriptions/postNPCStateChanged.lua +2 -0
  210. package/callbacks/subscriptions/postNewLevelReordered.js +16 -0
  211. package/callbacks/subscriptions/postNewLevelReordered.lua +2 -0
  212. package/callbacks/subscriptions/postNewRoomEarly.js +16 -0
  213. package/callbacks/subscriptions/postNewRoomEarly.lua +2 -0
  214. package/callbacks/subscriptions/postNewRoomReordered.js +16 -0
  215. package/callbacks/subscriptions/postNewRoomReordered.lua +2 -0
  216. package/callbacks/subscriptions/postPEffectUpdateReordered.js +25 -0
  217. package/callbacks/subscriptions/postPEffectUpdateReordered.lua +2 -0
  218. package/callbacks/subscriptions/postPickupCollect.js +20 -0
  219. package/callbacks/subscriptions/postPickupCollect.lua +2 -0
  220. package/callbacks/subscriptions/postPickupInitFirst.js +20 -0
  221. package/callbacks/subscriptions/postPickupInitFirst.lua +2 -0
  222. package/callbacks/subscriptions/postPickupInitLate.js +20 -0
  223. package/callbacks/subscriptions/postPickupInitLate.lua +2 -0
  224. package/callbacks/subscriptions/postPickupStateChanged.js +20 -0
  225. package/callbacks/subscriptions/postPickupStateChanged.lua +2 -0
  226. package/callbacks/subscriptions/postPitRender.js +22 -0
  227. package/callbacks/subscriptions/postPitRender.lua +2 -0
  228. package/callbacks/subscriptions/postPitUpdate.js +22 -0
  229. package/callbacks/subscriptions/postPitUpdate.lua +2 -0
  230. package/callbacks/subscriptions/postPlayerChangeHealth.js +25 -0
  231. package/callbacks/subscriptions/postPlayerChangeHealth.lua +2 -0
  232. package/callbacks/subscriptions/postPlayerChangeType.js +20 -0
  233. package/callbacks/subscriptions/postPlayerChangeType.lua +2 -0
  234. package/callbacks/subscriptions/postPlayerCollectibleAdded.js +21 -0
  235. package/callbacks/subscriptions/postPlayerCollectibleAdded.lua +2 -0
  236. package/callbacks/subscriptions/postPlayerCollectibleRemoved.js +21 -0
  237. package/callbacks/subscriptions/postPlayerCollectibleRemoved.lua +2 -0
  238. package/callbacks/subscriptions/postPlayerFatalDamage.js +29 -0
  239. package/callbacks/subscriptions/postPlayerFatalDamage.lua +2 -0
  240. package/callbacks/subscriptions/postPlayerInitLate.js +25 -0
  241. package/callbacks/subscriptions/postPlayerInitLate.lua +2 -0
  242. package/callbacks/subscriptions/postPlayerInitReordered.js +25 -0
  243. package/callbacks/subscriptions/postPlayerInitReordered.lua +2 -0
  244. package/callbacks/subscriptions/postPlayerRenderReordered.js +25 -0
  245. package/callbacks/subscriptions/postPlayerRenderReordered.lua +2 -0
  246. package/callbacks/subscriptions/postPlayerUpdateReordered.js +25 -0
  247. package/callbacks/subscriptions/postPlayerUpdateReordered.lua +2 -0
  248. package/callbacks/subscriptions/postPoopRender.js +22 -0
  249. package/callbacks/subscriptions/postPoopRender.lua +2 -0
  250. package/callbacks/subscriptions/postPoopUpdate.js +22 -0
  251. package/callbacks/subscriptions/postPoopUpdate.lua +2 -0
  252. package/callbacks/subscriptions/postPressurePlateRender.js +22 -0
  253. package/callbacks/subscriptions/postPressurePlateRender.lua +2 -0
  254. package/callbacks/subscriptions/postPressurePlateUpdate.js +22 -0
  255. package/callbacks/subscriptions/postPressurePlateUpdate.lua +2 -0
  256. package/callbacks/subscriptions/postProjectileInitLate.js +21 -0
  257. package/callbacks/subscriptions/postProjectileInitLate.lua +2 -0
  258. package/callbacks/subscriptions/postPurchase.js +16 -0
  259. package/callbacks/subscriptions/postPurchase.lua +2 -0
  260. package/callbacks/subscriptions/postRockRender.js +22 -0
  261. package/callbacks/subscriptions/postRockRender.lua +2 -0
  262. package/callbacks/subscriptions/postRockUpdate.js +22 -0
  263. package/callbacks/subscriptions/postRockUpdate.lua +2 -0
  264. package/callbacks/subscriptions/postRoomClearChanged.js +20 -0
  265. package/callbacks/subscriptions/postRoomClearChanged.lua +2 -0
  266. package/callbacks/subscriptions/postSacrifice.js +25 -0
  267. package/callbacks/subscriptions/postSacrifice.lua +2 -0
  268. package/callbacks/subscriptions/postSlotAnimationChanged.js +20 -0
  269. package/callbacks/subscriptions/postSlotAnimationChanged.lua +2 -0
  270. package/callbacks/subscriptions/postSlotDestroyed.js +26 -0
  271. package/callbacks/subscriptions/postSlotDestroyed.lua +2 -0
  272. package/callbacks/subscriptions/postSlotInit.js +20 -0
  273. package/callbacks/subscriptions/postSlotInit.lua +2 -0
  274. package/callbacks/subscriptions/postSlotRender.js +20 -0
  275. package/callbacks/subscriptions/postSlotRender.lua +2 -0
  276. package/callbacks/subscriptions/postSlotUpdate.js +20 -0
  277. package/callbacks/subscriptions/postSlotUpdate.lua +2 -0
  278. package/callbacks/subscriptions/postSpikesRender.js +22 -0
  279. package/callbacks/subscriptions/postSpikesRender.lua +2 -0
  280. package/callbacks/subscriptions/postSpikesUpdate.js +22 -0
  281. package/callbacks/subscriptions/postSpikesUpdate.lua +2 -0
  282. package/callbacks/subscriptions/postTNTRender.js +22 -0
  283. package/callbacks/subscriptions/postTNTRender.lua +2 -0
  284. package/callbacks/subscriptions/postTNTUpdate.js +22 -0
  285. package/callbacks/subscriptions/postTNTUpdate.lua +2 -0
  286. package/callbacks/subscriptions/postTearInitLate.js +20 -0
  287. package/callbacks/subscriptions/postTearInitLate.lua +2 -0
  288. package/callbacks/subscriptions/postTearInitVeryLate.js +20 -0
  289. package/callbacks/subscriptions/postTearInitVeryLate.lua +2 -0
  290. package/callbacks/subscriptions/postTransformation.js +20 -0
  291. package/callbacks/subscriptions/postTransformation.lua +2 -0
  292. package/callbacks/subscriptions/postTrinketBreak.js +21 -0
  293. package/callbacks/subscriptions/postTrinketBreak.lua +2 -0
  294. package/callbacks/subscriptions/preBerserkDeath.js +26 -0
  295. package/callbacks/subscriptions/preBerserkDeath.lua +2 -0
  296. package/callbacks/subscriptions/preCustomRevive.js +29 -0
  297. package/callbacks/subscriptions/preCustomRevive.lua +2 -0
  298. package/callbacks/subscriptions/preItemPickup.js +25 -0
  299. package/callbacks/subscriptions/preItemPickup.lua +2 -0
  300. package/callbacks/subscriptions/preNewLevel.js +16 -0
  301. package/callbacks/subscriptions/preNewLevel.lua +2 -0
  302. package/classes/DefaultMap.js +145 -0
  303. package/classes/DefaultMap.lua +2 -0
  304. package/classes/ModUpgraded.js +57 -0
  305. package/classes/ModUpgraded.lua +2 -0
  306. package/constants.js +143 -0
  307. package/constants.lua +2 -0
  308. package/constantsFirstLast.js +156 -0
  309. package/constantsFirstLast.lua +2 -0
  310. package/enums/AmbushType.js +6 -0
  311. package/enums/AmbushType.lua +2 -0
  312. package/enums/CornerType.js +8 -0
  313. package/enums/CornerType.lua +2 -0
  314. package/enums/DecorationVariant.js +11 -0
  315. package/enums/DecorationVariant.lua +2 -0
  316. package/enums/HealthType.js +18 -0
  317. package/enums/HealthType.lua +2 -0
  318. package/enums/ModCallbackCustom.js +1213 -0
  319. package/enums/ModCallbackCustom.lua +2 -0
  320. package/enums/PocketItemType.js +10 -0
  321. package/enums/PocketItemType.lua +2 -0
  322. package/enums/RockAltType.js +9 -0
  323. package/enums/RockAltType.lua +2 -0
  324. package/enums/SerializationType.js +7 -0
  325. package/enums/SerializationType.lua +2 -0
  326. package/enums/SlotDestructionType.js +6 -0
  327. package/enums/SlotDestructionType.lua +2 -0
  328. package/enums/private/CopyableIsaacAPIClassType.js +9 -0
  329. package/enums/private/CopyableIsaacAPIClassType.lua +2 -0
  330. package/enums/private/SaveDataKey.js +8 -0
  331. package/enums/private/SaveDataKey.lua +2 -0
  332. package/enums/private/SerializationBrand.js +41 -0
  333. package/enums/private/SerializationBrand.lua +2 -0
  334. package/features/characterHealthConversion.js +86 -0
  335. package/features/characterHealthConversion.lua +2 -0
  336. package/features/characterStats.js +52 -0
  337. package/features/characterStats.lua +2 -0
  338. package/features/collectibleItemPoolType.js +45 -0
  339. package/features/collectibleItemPoolType.lua +2 -0
  340. package/features/customGridEntity.js +148 -0
  341. package/features/customGridEntity.lua +2 -0
  342. package/features/customStage/backdrop.js +191 -0
  343. package/features/customStage/backdrop.lua +9 -7
  344. package/features/customStage/customStageConstants.js +2 -0
  345. package/features/customStage/customStageConstants.lua +2 -0
  346. package/features/customStage/exports.js +147 -0
  347. package/features/customStage/exports.lua +8 -1
  348. package/features/customStage/gridEntities.js +138 -0
  349. package/features/customStage/gridEntities.lua +2 -0
  350. package/features/customStage/init.js +104 -0
  351. package/features/customStage/init.lua +4 -9
  352. package/features/customStage/metadata.json +1 -0
  353. package/features/customStage/metadata.lua +2 -0
  354. package/features/customStage/shadows.d.ts +0 -1
  355. package/features/customStage/shadows.js +63 -0
  356. package/features/customStage/shadows.lua +31 -19
  357. package/features/customStage/streakText.d.ts +1 -1
  358. package/features/customStage/streakText.js +35 -0
  359. package/features/customStage/streakText.lua +14 -3
  360. package/features/customStage/util.js +36 -0
  361. package/features/customStage/util.lua +2 -0
  362. package/features/customStage/v.js +18 -0
  363. package/features/customStage/v.lua +2 -0
  364. package/features/customStage/versusScreen.js +184 -0
  365. package/features/customStage/versusScreen.lua +8 -1
  366. package/features/debugDisplay/debugDisplay.js +183 -0
  367. package/features/debugDisplay/debugDisplay.lua +2 -0
  368. package/features/debugDisplay/exports.js +441 -0
  369. package/features/debugDisplay/exports.lua +2 -0
  370. package/features/debugDisplay/v.d.ts +18 -0
  371. package/features/debugDisplay/v.js +61 -0
  372. package/features/debugDisplay/v.lua +2 -0
  373. package/features/deployJSONRoom.js +532 -0
  374. package/features/deployJSONRoom.lua +2 -0
  375. package/features/disableAllSound.js +63 -0
  376. package/features/disableAllSound.lua +2 -0
  377. package/features/disableInputs.js +130 -0
  378. package/features/disableInputs.lua +2 -0
  379. package/features/extraConsoleCommands/commandsDisplay.js +236 -0
  380. package/features/extraConsoleCommands/commandsDisplay.lua +2 -0
  381. package/features/extraConsoleCommands/commandsSubroutines.js +109 -0
  382. package/features/extraConsoleCommands/commandsSubroutines.lua +2 -0
  383. package/features/extraConsoleCommands/exports.js +53 -0
  384. package/features/extraConsoleCommands/exports.lua +2 -0
  385. package/features/extraConsoleCommands/init.js +239 -0
  386. package/features/extraConsoleCommands/init.lua +2 -0
  387. package/features/extraConsoleCommands/listCommands.js +1081 -0
  388. package/features/extraConsoleCommands/listCommands.lua +2 -0
  389. package/features/extraConsoleCommands/v.js +25 -0
  390. package/features/extraConsoleCommands/v.lua +2 -0
  391. package/features/fadeInRemover.js +51 -0
  392. package/features/fadeInRemover.lua +2 -0
  393. package/features/fastReset.js +61 -0
  394. package/features/fastReset.lua +2 -0
  395. package/features/forgottenSwitch.js +33 -0
  396. package/features/forgottenSwitch.lua +2 -0
  397. package/features/pause.js +68 -0
  398. package/features/pause.lua +2 -0
  399. package/features/persistentEntities.js +120 -0
  400. package/features/persistentEntities.lua +2 -0
  401. package/features/playerInventory.js +89 -0
  402. package/features/playerInventory.lua +2 -0
  403. package/features/ponyDetection.js +63 -0
  404. package/features/ponyDetection.lua +2 -0
  405. package/features/preventCollectibleRotation.js +81 -0
  406. package/features/preventCollectibleRotation.lua +2 -0
  407. package/features/registerHotkey.js +91 -0
  408. package/features/registerHotkey.lua +2 -0
  409. package/features/roomClearFrame.js +42 -0
  410. package/features/roomClearFrame.lua +2 -0
  411. package/features/runInNFrames.js +189 -0
  412. package/features/runInNFrames.lua +2 -0
  413. package/features/runNextRoom.js +34 -0
  414. package/features/runNextRoom.lua +2 -0
  415. package/features/saveDataManager/exports.js +183 -0
  416. package/features/saveDataManager/exports.lua +2 -0
  417. package/features/saveDataManager/load.js +69 -0
  418. package/features/saveDataManager/load.lua +2 -0
  419. package/features/saveDataManager/main.js +131 -0
  420. package/features/saveDataManager/main.lua +2 -0
  421. package/features/saveDataManager/maps.js +9 -0
  422. package/features/saveDataManager/maps.lua +2 -0
  423. package/features/saveDataManager/merge.js +139 -0
  424. package/features/saveDataManager/merge.lua +2 -0
  425. package/features/saveDataManager/save.js +43 -0
  426. package/features/saveDataManager/save.lua +2 -0
  427. package/features/saveDataManager/saveDataManagerConstants.js +4 -0
  428. package/features/saveDataManager/saveDataManagerConstants.lua +2 -0
  429. package/features/saveDataManager/serializationBrand.js +12 -0
  430. package/features/saveDataManager/serializationBrand.lua +2 -0
  431. package/features/sirenHelpers.js +90 -0
  432. package/features/sirenHelpers.lua +2 -0
  433. package/features/stageHistory.js +43 -0
  434. package/features/stageHistory.lua +2 -0
  435. package/features/taintedLazarusPlayers.js +92 -0
  436. package/features/taintedLazarusPlayers.lua +2 -0
  437. package/featuresInitialized.js +16 -0
  438. package/featuresInitialized.lua +2 -0
  439. package/functions/ambush.js +35 -0
  440. package/functions/ambush.lua +2 -0
  441. package/functions/array.js +423 -0
  442. package/functions/array.lua +2 -0
  443. package/functions/benchmark.js +28 -0
  444. package/functions/benchmark.lua +2 -0
  445. package/functions/bitwise.js +74 -0
  446. package/functions/bitwise.lua +2 -0
  447. package/functions/bombs.js +11 -0
  448. package/functions/bombs.lua +2 -0
  449. package/functions/boss.js +137 -0
  450. package/functions/boss.lua +2 -0
  451. package/functions/cacheFlag.js +11 -0
  452. package/functions/cacheFlag.lua +2 -0
  453. package/functions/cards.js +217 -0
  454. package/functions/cards.lua +2 -0
  455. package/functions/challenges.js +9 -0
  456. package/functions/challenges.lua +2 -0
  457. package/functions/character.js +102 -0
  458. package/functions/character.lua +2 -0
  459. package/functions/charge.js +202 -0
  460. package/functions/charge.lua +2 -0
  461. package/functions/chargeBar.js +44 -0
  462. package/functions/chargeBar.lua +2 -0
  463. package/functions/collectibleCacheFlag.js +68 -0
  464. package/functions/collectibleCacheFlag.lua +2 -0
  465. package/functions/collectibleSet.js +108 -0
  466. package/functions/collectibleSet.lua +2 -0
  467. package/functions/collectibleTag.js +65 -0
  468. package/functions/collectibleTag.lua +2 -0
  469. package/functions/collectibles.js +469 -0
  470. package/functions/collectibles.lua +2 -0
  471. package/functions/color.d.ts +1 -1
  472. package/functions/color.js +60 -0
  473. package/functions/color.lua +2 -0
  474. package/functions/debug.js +60 -0
  475. package/functions/debug.lua +2 -0
  476. package/functions/deepCopy.js +361 -0
  477. package/functions/deepCopy.lua +2 -0
  478. package/functions/deepCopyTests.js +308 -0
  479. package/functions/deepCopyTests.lua +2 -0
  480. package/functions/direction.js +41 -0
  481. package/functions/direction.lua +2 -0
  482. package/functions/doors.js +326 -0
  483. package/functions/doors.lua +2 -0
  484. package/functions/easing.js +142 -0
  485. package/functions/easing.lua +2 -0
  486. package/functions/eden.js +32 -0
  487. package/functions/eden.lua +2 -0
  488. package/functions/effects.js +11 -0
  489. package/functions/effects.lua +2 -0
  490. package/functions/entity.js +324 -0
  491. package/functions/entity.lua +2 -0
  492. package/functions/entitySpecific.js +481 -0
  493. package/functions/entitySpecific.lua +2 -0
  494. package/functions/entityTypes.js +6 -0
  495. package/functions/entityTypes.lua +2 -0
  496. package/functions/enums.js +151 -0
  497. package/functions/enums.lua +2 -0
  498. package/functions/familiars.js +85 -0
  499. package/functions/familiars.lua +2 -0
  500. package/functions/flag.js +137 -0
  501. package/functions/flag.lua +2 -0
  502. package/functions/flying.js +88 -0
  503. package/functions/flying.lua +2 -0
  504. package/functions/globals.js +230 -0
  505. package/functions/globals.lua +2 -0
  506. package/functions/gridEntity.js +488 -0
  507. package/functions/gridEntity.lua +2 -0
  508. package/functions/gridEntitySpecific.js +109 -0
  509. package/functions/gridEntitySpecific.lua +2 -0
  510. package/functions/input.js +95 -0
  511. package/functions/input.lua +2 -0
  512. package/functions/isaacAPIClass.js +48 -0
  513. package/functions/isaacAPIClass.lua +2 -0
  514. package/functions/jsonHelpers.js +40 -0
  515. package/functions/jsonHelpers.lua +2 -0
  516. package/functions/jsonRoom.js +132 -0
  517. package/functions/jsonRoom.lua +2 -0
  518. package/functions/kColor.d.ts +1 -1
  519. package/functions/kColor.js +63 -0
  520. package/functions/kColor.lua +2 -0
  521. package/functions/language.js +13 -0
  522. package/functions/language.lua +2 -0
  523. package/functions/level.js +20 -0
  524. package/functions/level.lua +2 -0
  525. package/functions/log.js +567 -0
  526. package/functions/log.lua +2 -0
  527. package/functions/map.js +45 -0
  528. package/functions/map.lua +2 -0
  529. package/functions/math.js +103 -0
  530. package/functions/math.lua +2 -0
  531. package/functions/mergeTests.js +213 -0
  532. package/functions/mergeTests.lua +2 -0
  533. package/functions/minimap.js +80 -0
  534. package/functions/minimap.lua +2 -0
  535. package/functions/nextStage.js +290 -0
  536. package/functions/nextStage.lua +2 -0
  537. package/functions/npc.js +101 -0
  538. package/functions/npc.lua +2 -0
  539. package/functions/pickupVariants.js +47 -0
  540. package/functions/pickupVariants.lua +2 -0
  541. package/functions/pickups.js +219 -0
  542. package/functions/pickups.lua +2 -0
  543. package/functions/pills.js +160 -0
  544. package/functions/pills.lua +2 -0
  545. package/functions/player.js +808 -0
  546. package/functions/player.lua +2 -0
  547. package/functions/playerCenter.js +50 -0
  548. package/functions/playerCenter.lua +2 -0
  549. package/functions/playerDataStructures.js +114 -0
  550. package/functions/playerDataStructures.lua +2 -0
  551. package/functions/playerHealth.js +321 -0
  552. package/functions/playerHealth.lua +2 -0
  553. package/functions/playerIndex.js +160 -0
  554. package/functions/playerIndex.lua +2 -0
  555. package/functions/pocketItems.js +124 -0
  556. package/functions/pocketItems.lua +2 -0
  557. package/functions/positionVelocity.js +136 -0
  558. package/functions/positionVelocity.lua +2 -0
  559. package/functions/random.js +73 -0
  560. package/functions/random.lua +2 -0
  561. package/functions/revive.js +140 -0
  562. package/functions/revive.lua +2 -0
  563. package/functions/rng.d.ts +1 -1
  564. package/functions/rng.js +117 -0
  565. package/functions/rng.lua +2 -0
  566. package/functions/roomData.js +174 -0
  567. package/functions/roomData.lua +2 -0
  568. package/functions/roomGrid.js +81 -0
  569. package/functions/roomGrid.lua +2 -0
  570. package/functions/roomShape.js +99 -0
  571. package/functions/roomShape.lua +2 -0
  572. package/functions/rooms.js +487 -0
  573. package/functions/rooms.lua +2 -0
  574. package/functions/run.js +53 -0
  575. package/functions/run.lua +2 -0
  576. package/functions/saveFile.js +104 -0
  577. package/functions/saveFile.lua +2 -0
  578. package/functions/seeds.js +18 -0
  579. package/functions/seeds.lua +2 -0
  580. package/functions/serialization.js +52 -0
  581. package/functions/serialization.lua +2 -0
  582. package/functions/set.js +99 -0
  583. package/functions/set.lua +2 -0
  584. package/functions/sound.js +9 -0
  585. package/functions/sound.lua +2 -0
  586. package/functions/spawnCollectible.js +66 -0
  587. package/functions/spawnCollectible.lua +2 -0
  588. package/functions/sprite.js +80 -0
  589. package/functions/sprite.lua +2 -0
  590. package/functions/stage.js +172 -0
  591. package/functions/stage.lua +2 -0
  592. package/functions/string.js +37 -0
  593. package/functions/string.lua +2 -0
  594. package/functions/table.js +143 -0
  595. package/functions/table.lua +2 -0
  596. package/functions/tears.js +31 -0
  597. package/functions/tears.lua +2 -0
  598. package/functions/transformations.js +101 -0
  599. package/functions/transformations.lua +2 -0
  600. package/functions/trinketCacheFlag.js +46 -0
  601. package/functions/trinketCacheFlag.lua +2 -0
  602. package/functions/trinketGive.js +121 -0
  603. package/functions/trinketGive.lua +2 -0
  604. package/functions/trinkets.js +169 -0
  605. package/functions/trinkets.lua +2 -0
  606. package/functions/tstlClass.js +125 -0
  607. package/functions/tstlClass.lua +2 -0
  608. package/functions/types.js +27 -0
  609. package/functions/types.lua +2 -0
  610. package/functions/ui.js +124 -0
  611. package/functions/ui.lua +2 -0
  612. package/functions/utils.js +172 -0
  613. package/functions/utils.lua +2 -0
  614. package/functions/vector.js +68 -0
  615. package/functions/vector.lua +2 -0
  616. package/index.js +140 -0
  617. package/index.lua +2 -0
  618. package/initCustomCallbacks.js +133 -0
  619. package/initCustomCallbacks.lua +2 -0
  620. package/initFeatures.js +51 -0
  621. package/initFeatures.lua +2 -0
  622. package/interfaces/AddCallbackParameterCustom.js +2 -0
  623. package/interfaces/AddCallbackParameterCustom.lua +2 -0
  624. package/interfaces/ChargeBarSprites.js +2 -0
  625. package/interfaces/ChargeBarSprites.lua +2 -0
  626. package/interfaces/Corner.js +2 -0
  627. package/interfaces/Corner.lua +2 -0
  628. package/interfaces/CustomGridEntityData.js +2 -0
  629. package/interfaces/CustomGridEntityData.lua +2 -0
  630. package/interfaces/CustomStage.js +2 -0
  631. package/interfaces/CustomStage.lua +2 -0
  632. package/interfaces/CustomStageLua.d.ts +64 -24
  633. package/interfaces/CustomStageLua.js +13 -0
  634. package/interfaces/CustomStageLua.lua +2 -0
  635. package/interfaces/JSONRoomsFile.js +2 -0
  636. package/interfaces/JSONRoomsFile.lua +2 -0
  637. package/interfaces/PlayerHealth.js +2 -0
  638. package/interfaces/PlayerHealth.lua +2 -0
  639. package/interfaces/PocketItemDescription.js +2 -0
  640. package/interfaces/PocketItemDescription.lua +2 -0
  641. package/interfaces/SaveData.js +2 -0
  642. package/interfaces/SaveData.lua +2 -0
  643. package/interfaces/TrinketSituation.js +2 -0
  644. package/interfaces/TrinketSituation.lua +2 -0
  645. package/interfaces/private/TSTLClassMetatable.js +2 -0
  646. package/interfaces/private/TSTLClassMetatable.lua +2 -0
  647. package/maps/PHDPillConversions.js +20 -0
  648. package/maps/PHDPillConversions.lua +2 -0
  649. package/maps/cardMap.js +208 -0
  650. package/maps/cardMap.lua +2 -0
  651. package/maps/characterMap.js +86 -0
  652. package/maps/characterMap.lua +2 -0
  653. package/maps/collectibleDescriptionMap.js +728 -0
  654. package/maps/collectibleDescriptionMap.lua +2 -0
  655. package/maps/collectibleNameMap.js +727 -0
  656. package/maps/collectibleNameMap.lua +2 -0
  657. package/maps/defaultPlayerStatMap.js +14 -0
  658. package/maps/defaultPlayerStatMap.lua +2 -0
  659. package/maps/falsePHDPillConversions.js +34 -0
  660. package/maps/falsePHDPillConversions.lua +2 -0
  661. package/maps/gridEntityTypeToBrokenStateMap.js +29 -0
  662. package/maps/gridEntityTypeToBrokenStateMap.lua +2 -0
  663. package/maps/gridEntityXMLMap.js +128 -0
  664. package/maps/gridEntityXMLMap.lua +2 -0
  665. package/maps/pillEffectMap.js +88 -0
  666. package/maps/pillEffectMap.lua +2 -0
  667. package/maps/roomShapeToTopLeftWallGridIndexMap.js +14 -0
  668. package/maps/roomShapeToTopLeftWallGridIndexMap.lua +2 -0
  669. package/maps/roomTypeMap.js +39 -0
  670. package/maps/roomTypeMap.lua +2 -0
  671. package/maps/trinketDescriptionMap.js +196 -0
  672. package/maps/trinketDescriptionMap.lua +2 -0
  673. package/maps/trinketNameMap.js +195 -0
  674. package/maps/trinketNameMap.lua +2 -0
  675. package/objects/LRoomShapeToRectangles.js +33 -0
  676. package/objects/LRoomShapeToRectangles.lua +2 -0
  677. package/objects/backdropTypeToRockAltType.js +66 -0
  678. package/objects/backdropTypeToRockAltType.lua +2 -0
  679. package/objects/bossNamePNGFileNames.js +112 -0
  680. package/objects/bossNamePNGFileNames.lua +2 -0
  681. package/objects/bossPortraitPNGFileNames.js +115 -0
  682. package/objects/bossPortraitPNGFileNames.lua +2 -0
  683. package/objects/callbackRegisterFunctions.js +170 -0
  684. package/objects/callbackRegisterFunctions.lua +2 -0
  685. package/objects/cardDescriptions.js +104 -0
  686. package/objects/cardDescriptions.lua +2 -0
  687. package/objects/cardNames.js +104 -0
  688. package/objects/cardNames.lua +2 -0
  689. package/objects/cardTypes.js +103 -0
  690. package/objects/cardTypes.lua +2 -0
  691. package/objects/challengeNames.js +51 -0
  692. package/objects/challengeNames.lua +2 -0
  693. package/objects/characterNames.js +46 -0
  694. package/objects/characterNames.lua +2 -0
  695. package/objects/coinSubTypeToValue.js +13 -0
  696. package/objects/coinSubTypeToValue.lua +2 -0
  697. package/objects/colors.d.ts +1 -0
  698. package/objects/colors.js +24 -0
  699. package/objects/colors.lua +2 -0
  700. package/objects/directionNames.js +9 -0
  701. package/objects/directionNames.lua +2 -0
  702. package/objects/directionToDegrees.js +9 -0
  703. package/objects/directionToDegrees.lua +2 -0
  704. package/objects/directionToVector.js +10 -0
  705. package/objects/directionToVector.lua +2 -0
  706. package/objects/doorSlotFlagToDoorSlot.js +13 -0
  707. package/objects/doorSlotFlagToDoorSlot.lua +2 -0
  708. package/objects/doorSlotToDirection.js +13 -0
  709. package/objects/doorSlotToDirection.lua +2 -0
  710. package/objects/doorSlotToDoorSlotFlag.js +13 -0
  711. package/objects/doorSlotToDoorSlotFlag.lua +2 -0
  712. package/objects/isaacAPIClassTypeToBrand.js +9 -0
  713. package/objects/isaacAPIClassTypeToBrand.lua +2 -0
  714. package/objects/isaacAPIClassTypeToCopyFunction.js +12 -0
  715. package/objects/isaacAPIClassTypeToCopyFunction.lua +2 -0
  716. package/objects/languageNames.js +11 -0
  717. package/objects/languageNames.lua +2 -0
  718. package/objects/oppositeDoorSlots.js +13 -0
  719. package/objects/oppositeDoorSlots.lua +2 -0
  720. package/objects/pillEffectClasses.js +56 -0
  721. package/objects/pillEffectClasses.lua +2 -0
  722. package/objects/pillEffectNames.js +55 -0
  723. package/objects/pillEffectNames.lua +2 -0
  724. package/objects/pillEffectTypes.js +55 -0
  725. package/objects/pillEffectTypes.lua +2 -0
  726. package/objects/playerNamePNGFileNames.js +55 -0
  727. package/objects/playerNamePNGFileNames.lua +2 -0
  728. package/objects/playerPortraitPNGFileNames.js +52 -0
  729. package/objects/playerPortraitPNGFileNames.lua +2 -0
  730. package/objects/roomShapeBounds.js +46 -0
  731. package/objects/roomShapeBounds.lua +2 -0
  732. package/objects/roomShapeCorners.js +268 -0
  733. package/objects/roomShapeCorners.lua +2 -0
  734. package/objects/roomShapeLayoutSizes.js +39 -0
  735. package/objects/roomShapeLayoutSizes.lua +2 -0
  736. package/objects/roomShapeToBottomRightPosition.js +22 -0
  737. package/objects/roomShapeToBottomRightPosition.lua +2 -0
  738. package/objects/roomShapeToDoorSlotCoordinates.js +109 -0
  739. package/objects/roomShapeToDoorSlotCoordinates.lua +2 -0
  740. package/objects/roomShapeToDoorSlots.js +69 -0
  741. package/objects/roomShapeToDoorSlots.lua +2 -0
  742. package/objects/roomShapeToDoorSlotsToGridIndexDelta.js +113 -0
  743. package/objects/roomShapeToDoorSlotsToGridIndexDelta.lua +2 -0
  744. package/objects/roomShapeToGridWidth.js +18 -0
  745. package/objects/roomShapeToGridWidth.lua +2 -0
  746. package/objects/roomShapeToTopLeftPosition.js +23 -0
  747. package/objects/roomShapeToTopLeftPosition.lua +2 -0
  748. package/objects/roomShapeVolumes.js +30 -0
  749. package/objects/roomShapeVolumes.lua +2 -0
  750. package/objects/roomTypeGotoPrefixes.js +33 -0
  751. package/objects/roomTypeGotoPrefixes.lua +2 -0
  752. package/objects/roomTypeNames.js +34 -0
  753. package/objects/roomTypeNames.lua +2 -0
  754. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.js +12 -0
  755. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.lua +2 -0
  756. package/objects/stageTypeSuffixes.js +10 -0
  757. package/objects/stageTypeSuffixes.lua +2 -0
  758. package/objects/stageTypeToLetter.js +12 -0
  759. package/objects/stageTypeToLetter.lua +2 -0
  760. package/objects/transformationNames.js +18 -0
  761. package/objects/transformationNames.lua +2 -0
  762. package/objects/versusScreenBackgroundColors.js +36 -0
  763. package/objects/versusScreenBackgroundColors.lua +2 -0
  764. package/objects/versusScreenDirtSpotColors.js +36 -0
  765. package/objects/versusScreenDirtSpotColors.lua +2 -0
  766. package/package.json +1 -1
  767. package/patchErrorFunctions.js +67 -0
  768. package/patchErrorFunctions.lua +2 -0
  769. package/sets/LRoomShapesSet.js +8 -0
  770. package/sets/LRoomShapesSet.lua +2 -0
  771. package/sets/bossSets.js +374 -0
  772. package/sets/bossSets.lua +2 -0
  773. package/sets/charactersThatStartWithAnActiveItemSet.js +15 -0
  774. package/sets/charactersThatStartWithAnActiveItemSet.lua +2 -0
  775. package/sets/charactersWithBlackHeartFromEternalHeartSet.js +6 -0
  776. package/sets/charactersWithBlackHeartFromEternalHeartSet.lua +2 -0
  777. package/sets/charactersWithFreeDevilDealsSet.js +3 -0
  778. package/sets/charactersWithFreeDevilDealsSet.lua +2 -0
  779. package/sets/charactersWithNoRedHeartsSet.js +16 -0
  780. package/sets/charactersWithNoRedHeartsSet.lua +2 -0
  781. package/sets/charactersWithNoSoulHeartsSet.js +13 -0
  782. package/sets/charactersWithNoSoulHeartsSet.lua +2 -0
  783. package/sets/chestPickupVariantsSet.js +16 -0
  784. package/sets/chestPickupVariantsSet.lua +2 -0
  785. package/sets/consoleCommandsSet.js +61 -0
  786. package/sets/consoleCommandsSet.lua +2 -0
  787. package/sets/familiarsThatShootPlayerTearsSet.js +12 -0
  788. package/sets/familiarsThatShootPlayerTearsSet.lua +2 -0
  789. package/sets/lostStyleCharactersSet.js +13 -0
  790. package/sets/lostStyleCharactersSet.lua +2 -0
  791. package/sets/mineShaftRoomSubTypesSet.js +9 -0
  792. package/sets/mineShaftRoomSubTypesSet.lua +2 -0
  793. package/sets/narrowRoomShapesSet.js +8 -0
  794. package/sets/narrowRoomShapesSet.lua +2 -0
  795. package/sets/redHeartSubTypesSet.js +7 -0
  796. package/sets/redHeartSubTypesSet.lua +2 -0
  797. package/sets/sinEntityTypesSet.js +11 -0
  798. package/sets/sinEntityTypesSet.lua +2 -0
  799. package/sets/singleUseActiveCollectibleTypesSet.js +12 -0
  800. package/sets/singleUseActiveCollectibleTypesSet.lua +2 -0
  801. package/sets/storyBossesSet.js +17 -0
  802. package/sets/storyBossesSet.lua +2 -0
  803. package/shaderCrashFix.js +17 -0
  804. package/shaderCrashFix.lua +2 -0
  805. package/types/AnyEntity.js +2 -0
  806. package/types/AnyEntity.lua +2 -0
  807. package/types/CollectibleIndex.js +2 -0
  808. package/types/CollectibleIndex.lua +2 -0
  809. package/types/PickingUpItem.js +38 -0
  810. package/types/PickingUpItem.lua +2 -0
  811. package/types/PlayerIndex.js +2 -0
  812. package/types/PlayerIndex.lua +2 -0
  813. package/types/private/IsaacAPIClass.js +2 -0
  814. package/types/private/IsaacAPIClass.lua +2 -0
  815. package/types/private/SerializedIsaacAPIClass.js +2 -0
  816. package/types/private/SerializedIsaacAPIClass.lua +2 -0
  817. package/types/private/TSTLClass.js +2 -0
  818. package/types/private/TSTLClass.lua +2 -0
  819. package/upgradeMod.js +47 -0
  820. package/upgradeMod.lua +2 -0
@@ -0,0 +1,140 @@
1
+ import { CollectibleType, EntityType, NullItemID, PlayerType, TrinketType, } from "isaac-typescript-definitions";
2
+ import { game } from "../cachedClasses";
3
+ import { MAX_TAINTED_SAMSON_BERSERK_CHARGE, TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE, } from "../constants";
4
+ import { getCharacterDeathAnimationName } from "./character";
5
+ import { getPlayerMaxHeartContainers, getPlayerNumHitsRemaining, hasLostCurse, isKeeper, } from "./player";
6
+ import { getLastFrameOfAnimation } from "./sprite";
7
+ import { giveTrinketsBack, temporarilyRemoveTrinket } from "./trinketGive";
8
+ /**
9
+ * Uses the player's current health and other miscellaneous things to determine if incoming damage
10
+ * will be fatal.
11
+ */
12
+ export function isDamageToPlayerFatal(player, damageAmount, damageSource, lastDamageGameFrame) {
13
+ const gameFrameCount = game.GetFrameCount();
14
+ const character = player.GetPlayerType();
15
+ const effects = player.GetEffects();
16
+ const isBerserk = effects.HasCollectibleEffect(CollectibleType.BERSERK);
17
+ // If we are Tainted Jacob and the damage source is Dark Esau, this will not be fatal damage
18
+ // (because we will transform into Tainted Jacob's lost form).
19
+ if (character === PlayerType.JACOB_B &&
20
+ damageSource.Type === EntityType.DARK_ESAU) {
21
+ return false;
22
+ }
23
+ // If we are berserk, no damage is fatal. (The death is deferred until the end of the berserk
24
+ // effect.)
25
+ if (isBerserk) {
26
+ return false;
27
+ }
28
+ // If we are playing Tainted Samson and the incoming hit will cause us to become Berserk, then
29
+ // this will not be fatal damage.
30
+ const berserkChargeAfterHit = player.SamsonBerserkCharge +
31
+ TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE;
32
+ if (character === PlayerType.SAMSON_B &&
33
+ berserkChargeAfterHit >= MAX_TAINTED_SAMSON_BERSERK_CHARGE) {
34
+ return false;
35
+ }
36
+ // If Spirit Shackles is activated, no damage is fatal.
37
+ if (willReviveFromSpiritShackles(player)) {
38
+ return false;
39
+ }
40
+ // If we are Tainted Jacob in the Lost Form, we may have plenty of health left, but we will still
41
+ // die in one hit to anything.
42
+ if (character === PlayerType.JACOB_2_B) {
43
+ return true;
44
+ }
45
+ // If we are in the "Lost Curse" form from touching a white fire, all damage will be fatal.
46
+ if (hasLostCurse(player)) {
47
+ return true;
48
+ }
49
+ const playerNumAllHearts = getPlayerNumHitsRemaining(player);
50
+ if (damageAmount < playerNumAllHearts) {
51
+ return false;
52
+ }
53
+ // This will not be fatal damage if the player has Heartbreak and two slots open for broken
54
+ // hearts.
55
+ if (willReviveFromHeartbreak(player)) {
56
+ return false;
57
+ }
58
+ // This will not be fatal damage if we have Glass Cannon and this is the second time we are taking
59
+ // damage on the same frame.
60
+ if (player.HasCollectible(CollectibleType.BROKEN_GLASS_CANNON) &&
61
+ gameFrameCount === lastDamageGameFrame) {
62
+ return false;
63
+ }
64
+ // This will not be fatal damage if we have two different kinds of hearts. For example, a bomb
65
+ // explosion deals 2 damage, but if the player has one half soul heart and one half red heart, the
66
+ // game will only remove the soul heart.
67
+ const hearts = player.GetHearts();
68
+ const eternalHearts = player.GetEternalHearts();
69
+ const soulHearts = player.GetSoulHearts();
70
+ const boneHearts = player.GetBoneHearts();
71
+ if ((hearts > 0 && soulHearts > 0) ||
72
+ (hearts > 0 && boneHearts > 0) ||
73
+ (soulHearts > 0 && boneHearts > 0) ||
74
+ (soulHearts > 0 && eternalHearts > 0) ||
75
+ boneHearts >= 2 // Two bone hearts and nothing else should not result in a death
76
+ ) {
77
+ return false;
78
+ }
79
+ return true;
80
+ }
81
+ /**
82
+ * Assuming that we are on the frame of fatal damage, this function returns whether or not
83
+ * Mysterious Paper would rotate to Missing Poster on the frame that the "Game Over" screen would
84
+ * appear (which would subsequently save the player from fatal damage).
85
+ *
86
+ * Mysterious Paper rotates between the 4 items on every frame, in order. The formula for whether
87
+ * Mysterious Paper be Missing Power is: `gameFrameCount % 4 === 3`
88
+ */
89
+ export function willMysteriousPaperRevive(player) {
90
+ const gameFrameCount = game.GetFrameCount();
91
+ const sprite = player.GetSprite();
92
+ // We want to explicitly check the length of the death animation because we might be playing on a
93
+ // modded character that has a custom death animation.
94
+ const character = player.GetPlayerType();
95
+ const animation = getCharacterDeathAnimationName(character);
96
+ const deathAnimationFrames = getLastFrameOfAnimation(sprite, animation);
97
+ const frameOfDeath = gameFrameCount + deathAnimationFrames + 1;
98
+ // (We add 1 because it takes one frame for the death animation to begin.)
99
+ return frameOfDeath % 4 === 3;
100
+ }
101
+ /**
102
+ * The `EntityPlayer.WillPlayerRevive` method does not properly account for Mysterious Paper, so use
103
+ * this helper function instead for more robust revival detection.
104
+ */
105
+ export function willPlayerRevive(player) {
106
+ const trinketSituation = temporarilyRemoveTrinket(player, TrinketType.MYSTERIOUS_PAPER);
107
+ const willRevive = player.WillPlayerRevive() ||
108
+ (trinketSituation !== undefined && willMysteriousPaperRevive(player));
109
+ giveTrinketsBack(player, trinketSituation);
110
+ return willRevive;
111
+ }
112
+ /**
113
+ * Helper function to determine if the player will be revived by the Heartbreak collectible if they
114
+ * take fatal damage. This is contingent on the character that they are playing as and the amount of
115
+ * broken hearts that they already have.
116
+ */
117
+ export function willReviveFromHeartbreak(player) {
118
+ if (!player.HasCollectible(CollectibleType.HEARTBREAK)) {
119
+ return false;
120
+ }
121
+ const maxHeartContainers = getPlayerMaxHeartContainers(player);
122
+ const numBrokenHeartsThatWillBeAdded = isKeeper(player) ? 1 : 2;
123
+ const brokenHearts = player.GetBrokenHearts();
124
+ const numBrokenHeartsAfterRevival = numBrokenHeartsThatWillBeAdded + brokenHearts;
125
+ return maxHeartContainers > numBrokenHeartsAfterRevival;
126
+ }
127
+ /**
128
+ * Helper function to determine if the Spirit Shackles item is in an enabled state. (It can be
129
+ * either enabled or disabled.)
130
+ */
131
+ export function willReviveFromSpiritShackles(player) {
132
+ if (!player.HasCollectible(CollectibleType.SPIRIT_SHACKLES)) {
133
+ return false;
134
+ }
135
+ const effects = player.GetEffects();
136
+ const spiritShacklesEnabled = !effects.HasNullEffect(NullItemID.SPIRIT_SHACKLES_DISABLED);
137
+ const playerInSoulForm = effects.HasNullEffect(NullItemID.SPIRIT_SHACKLES_SOUL);
138
+ return spiritShacklesEnabled && !playerInSoulForm;
139
+ }
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvcmV2aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxHQUNaLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFDTCxpQ0FBaUMsRUFDakMsZ0RBQWdELEdBQ2pELE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixZQUFZLEVBQ1osUUFBUSxHQUNULE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0U7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUFvQixFQUNwQixZQUFpQixFQUNqQixZQUF1QixFQUN2QixtQkFBb0M7SUFFcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV4RSw0RkFBNEY7SUFDNUYsOERBQThEO0lBQzlELElBQ0UsU0FBUyxLQUFLLFVBQVUsQ0FBQyxPQUFP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
@@ -115,3 +115,5 @@ function ____exports.willPlayerRevive(self, player)
115
115
  return willRevive
116
116
  end
117
117
  return ____exports
118
+
119
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3Jldml2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkNBTU87QUFMTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUYsMEJBQXFCO0FBQVo7QUFDVCxzQkFHTztBQUZMO0FBQ0E7QUFFRixzQkFBK0M7QUFBdEM7QUFDVCxtQkFLTztBQUpMO0FBQ0E7QUFDQTtBQUNBO0FBRUYsbUJBQXdDO0FBQS9CO0FBQ1Qsd0JBQTJEO0FBQWxEO0FBQWtCOzs7O0FBbUozQixvREFBeUM7V0FDbEMsT0FBTyxlQUFlO0FBQ3pCLGVBQU87O0FBR0gsK0JBQXFCLGlDQUE0QjtBQUNqRCwyQ0FBaUMsY0FBUyxZQUFVLEtBQUk7QUFDeEQseUJBQWUsT0FBTztBQUN0Qix3Q0FDSixpQ0FBaUM7QUFFbkMsV0FBTyxxQkFBcUI7QUFYOUI7OztBQWtCQSx3REFBNkM7V0FDdEMsT0FBTyxlQUFlO0FBQ3pCLGVBQU87O0FBR0gsb0JBQVUsT0FBTztBQUVqQixzQ0FBeUIsUUFBUSxjQUNyQztBQUVJLDZCQUFtQixRQUFRLGNBQy9CO0FBR0YsV0FBTyw4QkFBMEI7QUFkbkM7OztBQS9KQSxpREFDRSxRQUNBLGNBQ0EsY0FDQTtBQUVNLDJCQUFpQixLQUFLO0FBQ3RCLHNCQUFZLE9BQU87QUFDbkIsb0JBQVUsT0FBTztBQUNqQixzQkFBWSxRQUFRLHFCQUFxQjtPQUs3QyxhQUFjLHVCQUNkLHFCQUFzQjtBQUV0QixlQUFPOztPQUtMO0FBQ0YsZUFBTzs7QUFLSCxrQ0FDSiw2QkFDQTtPQUVBLGFBQWMsd0JBQ2QseUJBQXlCO0FBRXpCLGVBQU87O09BSUwsOENBQTZCO0FBQy9CLGVBQU87O09BS0wsYUFBYztBQUNoQixlQUFPOztPQUlMLGtCQUFhO0FBQ2YsZUFBTzs7QUFHSCwrQkFBcUIsK0JBQTBCO09BQ2pELGVBQWU7QUFDakIsZUFBTzs7T0FLTCwwQ0FBeUI7QUFDM0IsZUFBTzs7T0FNUCxPQUFPLGVBQWUseUNBQ3RCLGtCQUFtQjtBQUVuQixlQUFPOztBQU1ILG1CQUFTLE9BQU87QUFDaEIsMEJBQWdCLE9BQU87QUFDdkIsdUJBQWEsT0FBTztBQUNwQix1QkFBYSxPQUFPO09BRXhCLFNBQVUsTUFBSyxhQUFhLEtBQzNCLFNBQVMsTUFBSyxhQUFhLEtBQzNCLGFBQWEsTUFBSyxhQUFhLEtBQy9CLGFBQWEsTUFBSyxnQkFBZ0IsS0FDbkMsY0FBYztBQUVkLGVBQU87O0FBR1QsV0FBTztBQTNGVDs7Ozs7OztBQXNHQSxxREFBMEM7QUFDbEMsMkJBQWlCLEtBQUs7QUFDdEIsbUJBQVMsT0FBTztBQUloQixzQkFBWSxPQUFPO0FBQ25CLHNCQUFZLG9DQUErQjtBQUMzQyxpQ0FBdUIsNkJBQXdCLFFBQVE7QUFDdkQseUJBQWUsaUJBQWlCLHVCQUF1QjtBQUc3RCxXQUFPLGVBQWUsS0FBTTtBQVo5Qjs7O0FBbUJBLDRDQUFpQztBQUN6Qiw2QkFBbUIsOEJBQ3ZCLFFBQ0E7QUFHSSx1QkFDSixPQUFPLHNCQUNOLDRCQUFrQywyQ0FBMEI7SUFFL0Qsc0JBQWlCLFFBQVE7QUFFekIsV0FBTztBQVpUIiwiZmlsZSI6InJldml2ZS5sdWEiLCJzb3VyY2VSb290IjoiIn0=
@@ -1,6 +1,6 @@
1
- /// <reference types="typescript-to-lua/language-extensions" />
2
1
  /// <reference types="isaac-typescript-definitions" />
3
2
  /// <reference types="isaac-typescript-definitions" />
3
+ /// <reference types="typescript-to-lua/language-extensions" />
4
4
  import { SerializationType } from "../enums/SerializationType";
5
5
  declare type SerializedRNG = LuaTable<string, unknown> & {
6
6
  readonly __serializedRNGBrand: symbol;
@@ -0,0 +1,117 @@
1
+ import { game } from "../cachedClasses";
2
+ import { SerializationBrand } from "../enums/private/SerializationBrand";
3
+ import { SerializationType } from "../enums/SerializationType";
4
+ import { isaacAPIClassEquals, isIsaacAPIClassOfType } from "./isaacAPIClass";
5
+ import { getNumbersFromTable, tableHasKeys } from "./table";
6
+ import { isTable } from "./types";
7
+ /**
8
+ * This is the ShiftIdx that Blade recommended after having reviewing the game's internal functions.
9
+ * Any value between 0 and 80 should work equally well.
10
+ * https://www.jstatsoft.org/article/view/v008i14/xorshift.pdf
11
+ */
12
+ const RECOMMENDED_SHIFT_IDX = 35;
13
+ const KEYS = ["seed"];
14
+ const OBJECT_NAME = "RNG";
15
+ export function copyRNG(rng, serializationType = SerializationType.NONE) {
16
+ switch (serializationType) {
17
+ case SerializationType.NONE: {
18
+ if (!isRNG(rng)) {
19
+ error(`Failed to copy a ${OBJECT_NAME} object since the provided object was not a userdata ${OBJECT_NAME} class.`);
20
+ }
21
+ const seed = rng.GetSeed();
22
+ return newRNG(seed);
23
+ }
24
+ case SerializationType.SERIALIZE: {
25
+ if (!isRNG(rng)) {
26
+ error(`Failed to serialize a ${OBJECT_NAME} object since the provided object was not a userdata ${OBJECT_NAME} class.`);
27
+ }
28
+ const seed = rng.GetSeed();
29
+ const rngTable = new LuaTable();
30
+ rngTable.set("seed", seed);
31
+ rngTable.set(SerializationBrand.RNG, "");
32
+ return rngTable;
33
+ }
34
+ case SerializationType.DESERIALIZE: {
35
+ if (!isTable(rng)) {
36
+ error(`Failed to deserialize a ${OBJECT_NAME} object since the provided object was not a Lua table.`);
37
+ }
38
+ const [seedNumber] = getNumbersFromTable(rng, OBJECT_NAME, ...KEYS);
39
+ const seed = seedNumber;
40
+ return newRNG(seed);
41
+ }
42
+ }
43
+ }
44
+ /**
45
+ * Helper function to get a random `Seed` value to be used in spawning entities and so on. Use this
46
+ * instead of calling the `Random` function directly since that can return a value of 0 and crash
47
+ * the game.
48
+ */
49
+ export function getRandomSeed() {
50
+ const randomNumber = Random();
51
+ const safeRandomNumber = randomNumber === 0 ? 1 : randomNumber;
52
+ return safeRandomNumber;
53
+ }
54
+ /** Helper function to check if something is an instantiated RNG object. */
55
+ export function isRNG(object) {
56
+ return isIsaacAPIClassOfType(object, OBJECT_NAME);
57
+ }
58
+ /**
59
+ * Used to determine is the given table is a serialized `RNG` object created by the save data
60
+ * manager and/or the `deepCopy` function.
61
+ */
62
+ export function isSerializedRNG(object) {
63
+ if (!isTable(object)) {
64
+ return false;
65
+ }
66
+ return tableHasKeys(object, ...KEYS) && object.has(SerializationBrand.RNG);
67
+ }
68
+ /**
69
+ * Helper function to initialize an RNG object using Blade's recommended shift index.
70
+ *
71
+ * @param seed The seed to initialize it with. Default is `getRandomSeed()`.
72
+ */
73
+ export function newRNG(seed = getRandomSeed()) {
74
+ const rng = RNG();
75
+ setSeed(rng, seed);
76
+ return rng;
77
+ }
78
+ export function rngEquals(rng1, rng2) {
79
+ return isaacAPIClassEquals(rng1, rng2, KEYS);
80
+ }
81
+ /**
82
+ * Helper function to iterate over the provided object and set the seed for all of the values that
83
+ * are RNG objects equal to a particular seed.
84
+ */
85
+ export function setAllRNGToSeed(object, seed) {
86
+ if (!isTable(object)) {
87
+ error(`Failed to iterate over the object containing RNG objects since the type of the provided object was: ${typeof object}`);
88
+ }
89
+ let setAtLeastOneSeed = false;
90
+ for (const [_key, value] of pairs(object)) {
91
+ if (isRNG(value)) {
92
+ setSeed(value, seed);
93
+ setAtLeastOneSeed = true;
94
+ }
95
+ }
96
+ if (!setAtLeastOneSeed) {
97
+ error(`Failed to set all RNG objects to seed ${seed} because the parent object did not contain any RNG objects.`);
98
+ }
99
+ }
100
+ /**
101
+ * Helper function to iterate over the provided object and set the seed for all of the values that
102
+ * are RNG objects equal to the start seed for the current run.
103
+ */
104
+ export function setAllRNGToStartSeed(object) {
105
+ const seeds = game.GetSeeds();
106
+ const startSeed = seeds.GetStartSeed();
107
+ setAllRNGToSeed(object, startSeed);
108
+ }
109
+ /** Helper function to set a seed to an RNG object using Blade's recommended shift index. */
110
+ export function setSeed(rng, seed) {
111
+ if (seed === 0) {
112
+ error("You cannot set an RNG object to a seed of 0, or the game will crash.");
113
+ }
114
+ // The game expects seeds in the range of 1 to 4294967295 (1^32 - 1).
115
+ rng.SetSeed(seed, RECOMMENDED_SHIFT_IDX);
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvcm5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFZbEM7Ozs7R0FJRztBQUNILE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBRWpDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBZ0IxQixNQUFNLFVBQVUsT0FBTyxDQUNyQixHQUF3QixFQUN4QixpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJO0lBRTFDLFFBQVEsaUJBQWlCLEVBQUU7UUFDekIsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNmLEtBQUssQ0FDSCxvQkFBb0IsV0FBVyx3REFBd0QsV0FBVyxTQUFTLENBQzVHLENBQUM7YUFDSDtZQUVELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQjtRQUVELEtBQUssaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7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
package/functions/rng.lua CHANGED
@@ -141,3 +141,5 @@ function ____exports.setAllRNGToStartSeed(self, object)
141
141
  ____exports.setAllRNGToSeed(nil, object, startSeed)
142
142
  end
143
143
  return ____exports
144
+
145
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3JuZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7TUFzQk0sdUJBR0E7QUF6Qk4sMEJBQXFCO0FBQVo7QUFDVCwrQkFBbUM7QUFBMUI7QUFDVCw4QkFBa0M7QUFBekI7QUFDVCwwQkFBMkQ7QUFBbEQ7QUFBcUI7QUFDOUIsa0JBQWtEO0FBQXpDO0FBQXFCO0FBQzlCLGtCQUF3QjtBQUFmOzs7O0FBeUZUO0FBQ1EseUJBQWU7QUFDZiw2QkFBbUIsZ0JBQWlCLE1BQUksS0FBSTtBQUNsRCxXQUFPO0FBSFQ7O0FBT0EsaUNBQXNCO0FBQ3BCLFdBQU8sMkJBQXNCLFFBQVE7QUFEdkM7Ozs7QUFxQkEsa0NBQXVCO09BQUE7UUFBQSxPQUFPOztBQUN0QixnQkFBTTtJQUNaLHlCQUFRLEtBQUs7QUFDYixXQUFPO0FBSFQ7O0FBZ0RBLG1DQUF3QixLQUFVO09BQzVCLFFBQVM7UUFDWCxNQUNFOztJQUtKLElBQUksUUFBUSxNQUFNO0FBUnBCO0FBcEpNLHdCQUF3QjtBQUV4QixhQUFPLENBQUM7QUFDUixjQUFjOzs7Ozs7QUFnQnBCLG1DQUNFLEtBQ0E7T0FBQTtRQUFBLG9CQUFvQjs7OzRCQUVaO3lDQUNEOzs7dUJBQ0UsdUJBQU07b0JBQ1QsU0FDRSx1QkFBb0IsZ0JBQVcsNERBQXdELGdCQUFXOztBQUloRyw2QkFBTyxJQUFJO0FBQ2pCLHVCQUFPLHdCQUFPOzs7Z0RBR1g7Ozt1QkFDRSx1QkFBTTtvQkFDVCxTQUNFLDRCQUF5QixnQkFBVyw0REFBd0QsZ0JBQVc7O0FBSXJHLDZCQUFPLElBQUk7QUFDWCxpQ0FBVztBQUNqQix5QkFBYSxPQUFRO0FBQ3JCLHlCQUFhLDBCQUF3QjtBQUNyQyx1QkFBTzs7O2dEQUdKOzs7dUJBQ0UsYUFBUTtvQkFDWCxPQUNFLDhCQUEyQixnQkFBVzs7QUFJckIsc0JBQWQsYUFBYzs7b0JBQ25CO29CQUNBO29CQUNBLGFBQUc7O0FBRUMsNkJBQU87QUFDYix1QkFBTyx3QkFBTzs7OztBQTNDcEI7OztBQW9FQSwyQ0FBZ0M7V0FDekIsYUFBUTtBQUNYLGVBQU87O0FBR1QsV0FBTzs7UUFBYTtRQUFRLGFBQUc7VUFBUyxPQUFXO0FBTHJEO0FBbUJBLHFDQUEwQixNQUFXO0FBQ25DLFdBQU8seUJBQW9CLE1BQU0sTUFBTTtBQUR6Qzs7O0FBUUEsMkNBQWdDLFFBQWlCO1dBQzFDLGFBQVE7UUFDWCxNQUNFLDBHQUF1RyxhQUFPOztBQUk5Ryw4QkFBb0I7QUFDeEIsUUFBWSxNQUFNLFNBQVUsTUFBTTtXQUM1Qix1QkFBTTtZQUNSLHlCQUFRLE9BQU87QUFDZixnQ0FBb0I7OztXQUluQjtRQUNILE9BQ0UscURBQXlDLFVBQUk7O0FBakJuRDs7O0FBMEJBLGdEQUFxQztBQUM3QixrQkFBUSxLQUFLO0FBQ2Isc0JBQVksTUFBTTtJQUV4QixpQ0FBZ0IsUUFBUTtBQUoxQiIsImZpbGUiOiJybmcubHVhIiwic291cmNlUm9vdCI6IiJ9
@@ -0,0 +1,174 @@
1
+ import { DoorSlotFlag, } from "isaac-typescript-definitions";
2
+ import { game } from "../cachedClasses";
3
+ import { doorSlotFlagToDoorSlot } from "./doors";
4
+ import { getEnumValues } from "./enums";
5
+ import { hasFlag } from "./flag";
6
+ /**
7
+ * Helper function to get the set of allowed door slots for the room at the supplied grid index.
8
+ * This corresponds to the doors that are enabled in the STB/XML file for the room.
9
+ */
10
+ export function getRoomAllowedDoors(roomGridIndex) {
11
+ const allowedDoors = new Set();
12
+ const roomData = getRoomData(roomGridIndex);
13
+ if (roomData === undefined) {
14
+ return allowedDoors;
15
+ }
16
+ const doorSlotFlags = getEnumValues(DoorSlotFlag);
17
+ for (const doorSlotFlag of doorSlotFlags) {
18
+ if (hasFlag(roomData.Doors, doorSlotFlag)) {
19
+ const doorSlot = doorSlotFlagToDoorSlot(doorSlotFlag);
20
+ allowedDoors.add(doorSlot);
21
+ }
22
+ }
23
+ return allowedDoors;
24
+ }
25
+ /**
26
+ * Helper function to get the room data for the provided room.
27
+ *
28
+ * @param roomGridIndex Optional. Default is the current room index.
29
+ */
30
+ export function getRoomData(roomGridIndex) {
31
+ const roomDescriptor = getRoomDescriptor(roomGridIndex);
32
+ return roomDescriptor.Data;
33
+ }
34
+ /**
35
+ * Helper function to get the descriptor for a room.
36
+ *
37
+ * @param roomGridIndex Optional. Default is the current room index.
38
+ */
39
+ export function getRoomDescriptor(roomGridIndex) {
40
+ const level = game.GetLevel();
41
+ if (roomGridIndex === undefined) {
42
+ roomGridIndex = getRoomGridIndex();
43
+ }
44
+ return level.GetRoomByIdx(roomGridIndex);
45
+ }
46
+ /**
47
+ * Alias for the `Level.GetCurrentRoomDesc` method. Use this to make it more clear what type of
48
+ * `RoomDescriptor` object that you are retrieving.
49
+ */
50
+ export function getRoomDescriptorReadOnly() {
51
+ const level = game.GetLevel();
52
+ return level.GetCurrentRoomDesc();
53
+ }
54
+ /**
55
+ * Helper function to get the grid index of the current room.
56
+ *
57
+ * - If the current room is inside of the grid, this function will return the `SafeGridIndex` from
58
+ * the room descriptor. (The safe grid index is defined as the top-left 1x1 section that the room
59
+ * overlaps with, or the top-right 1x1 section of a `RoomType.SHAPE_LTL` room.)
60
+ * - If the current room is outside of the grid, it will return the index from the
61
+ * `Level.GetCurrentRoomIndex` method (since `SafeGridIndex` is bugged for these cases).
62
+ *
63
+ * Use this function instead of the `Level.GetCurrentRoomIndex` method directly because the latter
64
+ * will return the specific 1x1 quadrant that the player entered the room at. For most situations,
65
+ * using the safe grid index is more reliable than this.
66
+ *
67
+ * Data structures that store data per room should use the room's `ListIndex` instead of
68
+ * `SafeGridIndex`, since the former is unique across different dimensions.
69
+ */
70
+ export function getRoomGridIndex() {
71
+ const level = game.GetLevel();
72
+ const currentRoomIndex = level.GetCurrentRoomIndex();
73
+ // Both `RoomDescriptor.GridIndex` and `RoomDescriptor.SafeGridIndex` will always be equal to -1
74
+ // for rooms outside of the grid. Thus, we revert to using the `Level.GetCurrentRoomIndex` method
75
+ // for these cases.
76
+ if (currentRoomIndex < 0) {
77
+ return currentRoomIndex;
78
+ }
79
+ const roomDescriptor = getRoomDescriptorReadOnly();
80
+ return roomDescriptor.SafeGridIndex;
81
+ }
82
+ /**
83
+ * Helper function to get the list grid index of the provided room, which is equal to the index in
84
+ * the `RoomList.Get` method. In other words, this is equal to the order that the room was created
85
+ * by the floor generation algorithm.
86
+ *
87
+ * Use this as an index for data structures that store data per room, since it is unique across
88
+ * different dimensions.
89
+ *
90
+ * @param roomGridIndex Optional. Default is the current room index.
91
+ */
92
+ export function getRoomListIndex(roomGridIndex) {
93
+ const roomDescriptor = getRoomDescriptor(roomGridIndex);
94
+ return roomDescriptor.ListIndex;
95
+ }
96
+ /**
97
+ * Helper function to get the name of the room as it appears in the STB/XML data.
98
+ *
99
+ * @param roomGridIndex Optional. Default is the current room index.
100
+ * @returns The room name. Returns "Unknown" if the type was not found.
101
+ */
102
+ export function getRoomName(roomGridIndex) {
103
+ const roomData = getRoomData(roomGridIndex);
104
+ return roomData === undefined ? "Unknown" : roomData.Name;
105
+ }
106
+ /**
107
+ * Helper function to get the name of the room as it appears in the STB/XML data.
108
+ *
109
+ * @param roomGridIndex Optional. Default is the current room index.
110
+ * @returns The room name. Returns "Unknown" if the type was not found.
111
+ */
112
+ export function getRoomShape(roomGridIndex) {
113
+ const roomData = getRoomData(roomGridIndex);
114
+ return roomData === undefined ? undefined : roomData.Shape;
115
+ }
116
+ /**
117
+ * Helper function to get the stage ID for a room from the XML/STB data. The room stage ID will
118
+ * correspond to the first number in the filename of the XML/STB file. For example, a Depths room
119
+ * would have a stage ID of 7.
120
+ *
121
+ * @param roomGridIndex Optional. Default is the current room index.
122
+ * @returns The room stage ID. Returns -1 if the stage ID was not found.
123
+ */
124
+ export function getRoomStageID(roomGridIndex) {
125
+ const roomData = getRoomData(roomGridIndex);
126
+ return roomData === undefined ? -1 : roomData.StageID;
127
+ }
128
+ /**
129
+ * Helper function to get the sub-type for a room from the XML/STB data. The room sub-type will
130
+ * correspond to different things depending on what XML/STB file it draws from. For example, in the
131
+ * "00.special rooms.stb" file, an Angel Room with a sub-type of 0 will correspond to a normal Angel
132
+ * Room and a sub-type of 1 will correspond to an Angel Room shop for The Stairway.
133
+ *
134
+ * @param roomGridIndex Optional. Default is the current room index.
135
+ * @returns The room sub-type. Returns -1 if the sub-type was not found.
136
+ */
137
+ export function getRoomSubType(roomGridIndex) {
138
+ const roomData = getRoomData(roomGridIndex);
139
+ return roomData === undefined ? -1 : roomData.Subtype;
140
+ }
141
+ /**
142
+ * Helper function for getting the type of the room with the given grid index.
143
+ *
144
+ * @param roomGridIndex Optional. Default is the current room index.
145
+ * @returns The room data type. Returns -1 if the type was not found.
146
+ */
147
+ export function getRoomType(roomGridIndex) {
148
+ const roomData = getRoomData(roomGridIndex);
149
+ return roomData === undefined ? -1 : roomData.Type;
150
+ }
151
+ /**
152
+ * Helper function to get the variant for a room from the XML/STB data. You can think of a room
153
+ * variant as its identifier. For example, to go to Basement room #123, you would use a console
154
+ * command of `goto d.123` while on the Basement.
155
+ *
156
+ * @param roomGridIndex Optional. Default is the current room index.
157
+ * @returns The room variant. Returns -1 if the variant was not found.
158
+ */
159
+ export function getRoomVariant(roomGridIndex) {
160
+ const roomData = getRoomData(roomGridIndex);
161
+ return roomData === undefined ? -1 : roomData.Variant;
162
+ }
163
+ /**
164
+ * Note that the room visited count will be inaccurate during the period before the PostNewRoom
165
+ * callback has fired (i.e. when entities are initializing and performing their first update). This
166
+ * is because the variable is only incremented immediately before the PostNewRoom callback fires.
167
+ *
168
+ * @param roomGridIndex Optional. Default is the current room index.
169
+ */
170
+ export function getRoomVisitedCount(roomGridIndex) {
171
+ const roomDescriptor = getRoomDescriptor(roomGridIndex);
172
+ return roomDescriptor.VisitedCount;
173
+ }
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbURhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9yb29tRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsWUFBWSxHQUliLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLGFBQW1CO0lBQ3JELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFZLENBQUM7SUFFekMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtRQUMxQixPQUFPLFlBQVksQ0FBQztLQUNyQjtJQUVELE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRTtRQUN4QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RELFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUI7S0FDRjtJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxhQUFtQjtJQUM3QyxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxh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
@@ -158,3 +158,5 @@ function ____exports.getRoomVisitedCount(self, roomGridIndex)
158
158
  return roomDescriptor.VisitedCount
159
159
  end
160
160
  return ____exports
161
+
162
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3Jvb21EYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FNTztBQUpMO0FBS0YsMEJBQXFCO0FBQVo7QUFDVCxrQkFBdUM7QUFBOUI7QUFDVCxrQkFBOEI7QUFBckI7QUFDVCxpQkFBd0I7QUFBZjs7OztBQThCVCx1Q0FBNEI7QUFDcEIsMkJBQWlCLG1DQUFrQjtBQUN6QyxXQUFPO0FBRlQ7Ozs7QUFVQSw2Q0FBa0M7QUFDMUIsa0JBQVEsS0FBSztPQUVmO0FBQ0Ysd0JBQWdCOztBQUdsQixXQUFPLE1BQU0sYUFBYTtBQVA1Qjs7O0FBY0E7QUFDUSxrQkFBUSxLQUFLO0FBQ25CLFdBQU8sTUFBTTtBQUZmOzs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7QUFDUSxrQkFBUSxLQUFLO0FBQ2IsNkJBQW1CLE1BQU07T0FLM0IsbUJBQW1CO0FBQ3JCLGVBQU87O0FBR0gsMkJBQWlCO0FBQ3ZCLFdBQU87QUFaVDs7O0FBckVBLCtDQUFvQztBQUM1Qix5QkFBZSxVQUFJO0FBRW5CLHFCQUFXLDZCQUFZO09BQ3pCO0FBQ0YsZUFBTzs7QUFHSCwwQkFBZ0IsbUJBQWM7QUFDcEMsY0FBVyx1QkFBZ0I7V0FDckIsYUFBUSxnQkFBZ0I7QUFDcEIsNkJBQVcsNEJBQXVCO1lBQ3hDLGFBQWEsSUFBSTs7O0FBSXJCLFdBQU87QUFoQlQ7Ozs7Ozs7OztBQThGQSw0Q0FBaUM7QUFDekIsMkJBQWlCLG1DQUFrQjtBQUN6QyxXQUFPO0FBRlQ7Ozs7O0FBV0EsdUNBQTRCO0FBQ3BCLHFCQUFXLDZCQUFZO0FBQzdCLFdBQU8sb0JBQXlCLGFBQVk7QUFGOUM7Ozs7O0FBV0Esd0NBQTZCO0FBQ3JCLHFCQUFXLDZCQUFZO0FBQ3RCO09BQUE7QUFBeUI7O0FBQVk7O0FBQTVDO0FBRkY7Ozs7Ozs7QUFhQSwwQ0FBK0I7QUFDdkIscUJBQVcsNkJBQVk7QUFDN0IsV0FBTyxxQkFBMEIsS0FBSTtBQUZ2Qzs7Ozs7Ozs7QUFjQSwwQ0FBK0I7QUFDdkIscUJBQVcsNkJBQVk7QUFDN0IsV0FBTyxxQkFBMEIsS0FBSTtBQUZ2Qzs7Ozs7QUFXQSx1Q0FBNEI7QUFDcEIscUJBQVcsNkJBQVk7QUFDN0IsV0FBTyxxQkFBMEIsS0FBSTtBQUZ2Qzs7Ozs7OztBQWFBLDBDQUErQjtBQUN2QixxQkFBVyw2QkFBWTtBQUM3QixXQUFPLHFCQUEwQixLQUFJO0FBRnZDOzs7Ozs7QUFZQSwrQ0FBb0M7QUFDNUIsMkJBQWlCLG1DQUFrQjtBQUN6QyxXQUFPO0FBRlQiLCJmaWxlIjoicm9vbURhdGEubHVhIiwic291cmNlUm9vdCI6IiJ9
@@ -0,0 +1,81 @@
1
+ import { L_ROOM_SHAPE_TO_RECTANGLES } from "../objects/LRoomShapeToRectangles";
2
+ import { inRectangle } from "./math";
3
+ import { getRoomShapeBottomRightPosition, getRoomShapeTopLeftPosition, getRoomShapeWidth, isLRoom, } from "./roomShape";
4
+ /**
5
+ * Helper function to convert grid coordinates to a world position `Vector`.
6
+ *
7
+ * For example, the coordinates of (0, 0) are equal to `Vector(80, 160)`.
8
+ */
9
+ export function gridCoordinatesToWorldPosition(x, y) {
10
+ const gridPosition = Vector(x, y);
11
+ return gridPositionToWorldPosition(gridPosition);
12
+ }
13
+ /**
14
+ * Helper function to convert a grid index to a grid position.
15
+ *
16
+ * For example, in a 1x1 room, grid index 0 is equal to "Vector(-1, -1) and grid index 16 is equal
17
+ * to "Vector(0, 0)".
18
+ */
19
+ export function gridIndexToGridPosition(gridIndex, roomShape) {
20
+ const gridWidth = getRoomShapeWidth(roomShape);
21
+ const x = (gridIndex % gridWidth) - 1;
22
+ const y = Math.floor(gridIndex / gridWidth) - 1;
23
+ return Vector(x, y);
24
+ }
25
+ /**
26
+ * Helper function to convert a grid position `Vector` to a world position `Vector`.
27
+ *
28
+ * For example, the coordinates of (0, 0) are equal to `Vector(80, 160)`.
29
+ */
30
+ export function gridPositionToWorldPosition(gridPosition) {
31
+ const x = (gridPosition.X + 2) * 40;
32
+ const y = (gridPosition.Y + 4) * 40;
33
+ return Vector(x, y);
34
+ }
35
+ /**
36
+ * Test if a grid position is actually in the given `RoomShape`.
37
+ *
38
+ * In this context, the grid position of the top-left wall is "Vector(-1, -1)".
39
+ */
40
+ export function isValidGridPosition(gridPosition, roomShape) {
41
+ return isLRoom(roomShape)
42
+ ? isValidGridPositionLRoom(gridPosition, roomShape)
43
+ : isValidGridPositionNormal(gridPosition, roomShape);
44
+ }
45
+ function isValidGridPositionNormal(gridPosition, roomShape) {
46
+ const topLeft = getRoomShapeTopLeftPosition(roomShape);
47
+ const bottomRight = getRoomShapeBottomRightPosition(roomShape);
48
+ return inRectangle(gridPosition, topLeft, bottomRight);
49
+ }
50
+ function isValidGridPositionLRoom(gridPosition, roomShape) {
51
+ const rectangles = L_ROOM_SHAPE_TO_RECTANGLES[roomShape];
52
+ if (rectangles === undefined) {
53
+ return false;
54
+ }
55
+ const [verticalTopLeft, verticalBottomRight, horizontalTopLeft, horizontalBottomRight,] = rectangles;
56
+ return (inRectangle(gridPosition, verticalTopLeft, verticalBottomRight) ||
57
+ inRectangle(gridPosition, horizontalTopLeft, horizontalBottomRight));
58
+ }
59
+ /**
60
+ * Helper function to convert a world position `Vector` to a grid position `Vector`.
61
+ *
62
+ * In this context, the grid position of the top-left wall is "Vector(-1, -1)".
63
+ */
64
+ export function worldPositionToGridPosition(worldPos) {
65
+ const x = Math.round(worldPos.X / 40 - 2);
66
+ const y = Math.round(worldPos.Y / 40 - 4);
67
+ return Vector(x, y);
68
+ }
69
+ /**
70
+ * Helper function to convert a world position `Vector` to a grid position `Vector`.
71
+ *
72
+ * In this context, the grid position of the top-left wall is "Vector(-1, -1)".
73
+ *
74
+ * This is similar to the `worldPositionToGridPosition` function, but the values are not rounded.
75
+ */
76
+ export function worldPositionToGridPositionFast(worldPos) {
77
+ const x = worldPos.X / 40 - 2;
78
+ const y = worldPos.Y / 40 - 4;
79
+ return Vector(x, y);
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbUdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9yb29tR3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3JDLE9BQU8sRUFDTCwrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLGlCQUFpQixFQUNqQixPQUFPLEdBQ1IsTUFBTSxhQUFhLENBQUM7QUFFckI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxDQUFNLEVBQUUsQ0FBTTtJQUMzRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sMkJBQTJCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxTQUFjLEVBQ2QsU0FBb0I7SUFFcEIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsWUFBb0I7SUFDOUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsWUFBb0IsRUFDcEIsU0FBb0I7SUFFcEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDO1FBQ25ELENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUMsWUFBb0IsRUFBRSxTQUFvQjtJQUMzRSxNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCxNQUFNLFdBQVcsR0FBRywrQkFBK0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvRCxPQUFPLFdBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLFlBQW9CLEVBQUUsU0FBb0I7SUFDMUUsTUFBTSxVQUFVLEdBQUcsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLENBQ0osZUFBZSxFQUNmLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3RCLEdBQUcsVUFBVSxDQUFDO0lBQ2YsT0FBTyxDQUNMLFdBQVcsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDO1FBQy9ELFdBQVcsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsQ0FDcEUsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFFBQWdCO0lBQzFELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxRQUFnQjtJQUM5RCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDIn0=
@@ -78,3 +78,5 @@ function ____exports.worldPositionToGridPositionFast(self, worldPos)
78
78
  return Vector(x, y)
79
79
  end
80
80
  return ____exports
81
+
82
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3Jvb21HcmlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7TUE4RFMsMkJBTUE7QUFuRVQsbUNBQTJDO0FBQWxDO0FBQ1QsaUJBQTRCO0FBQW5CO0FBQ1Qsc0JBS087QUFKTDtBQUNBO0FBQ0E7QUFDQTs7OztBQW1DRix1REFBNEM7QUFDcEMsY0FBSSxDQUFDLGlCQUFpQixLQUFLO0FBQzNCLGNBQUksQ0FBQyxpQkFBaUIsS0FBSztBQUNqQyxXQUFPLE9BQU8sR0FBRztBQUhuQjtBQW9CQSxTQUFTLGdDQUEwQixjQUFzQjtBQUNqRCxvQkFBVSxpQ0FBNEI7QUFDdEMsd0JBQWMscUNBQWdDO0FBQ3BELFdBQU8saUJBQVksY0FBYyxTQUFTOztBQUc1QyxTQUFTLCtCQUF5QixjQUFzQjtBQUNoRCx1QkFBYSwyQkFBMkI7T0FDMUM7QUFDRixlQUFPOztBQVFMLFVBSkYsaUJBQ0EscUJBQ0EsbUJBQ0Esd0JBQ0U7QUFDSixXQUNFLGlCQUFZLGNBQWMsaUJBQWlCLHdCQUMzQyxpQkFBWSxjQUFjLG1CQUFtQjs7Ozs7QUFuRWpELDBEQUErQyxHQUFRO0FBQy9DLHlCQUFlLE9BQU8sR0FBRztBQUMvQixXQUFPLDZDQUE0QjtBQUZyQzs7Ozs7QUFXQSxtREFDRSxXQUNBO0FBRU0sc0JBQVksdUJBQWtCO0FBRTlCLGNBQUksWUFBYSxZQUFhO0FBQzlCLGNBQUksV0FBVyxZQUFZLGFBQWE7QUFDOUMsV0FBTyxPQUFPLEdBQUc7QUFSbkI7Ozs7QUEyQkEsK0NBQ0UsY0FDQTtBQUVPO09BQUEsYUFBUTtBQUNYLDZEQUF5QixjQUFjOztBQUN2Qyw4REFBMEIsY0FBYzs7QUFGNUM7QUFKRjs7OztBQXNDQSx1REFBNEM7QUFDcEMsY0FBSSxXQUFXLGFBQWEsS0FBSztBQUNqQyxjQUFJLFdBQVcsYUFBYSxLQUFLO0FBQ3ZDLFdBQU8sT0FBTyxHQUFHO0FBSG5COzs7Ozs7QUFhQSwyREFBZ0Q7QUFDeEMsY0FBSSxhQUFhLEtBQUs7QUFDdEIsY0FBSSxhQUFhLEtBQUs7QUFDNUIsV0FBTyxPQUFPLEdBQUc7QUFIbkIiLCJmaWxlIjoicm9vbUdyaWQubHVhIiwic291cmNlUm9vdCI6IiJ9