isaacscript-common 4.0.1-dev.0 → 4.0.4

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 (378) hide show
  1. package/callbacks/postCursedTeleport.lua +2 -1
  2. package/callbacks/postEsauJr.lua +2 -1
  3. package/callbacks/postFlip.lua +4 -3
  4. package/callbacks/postItemDischarged.lua +4 -3
  5. package/callbacks/postNewRoomEarly.lua +2 -1
  6. package/callbacks/postSacrifice.lua +3 -2
  7. package/callbacks/postTrinketBreak.lua +3 -2
  8. package/callbacks/reorderedCallbacks.lua +1 -0
  9. package/classes/ModUpgraded.d.ts +5 -1
  10. package/classes/ModUpgraded.lua +2 -2
  11. package/features/playerInventory.lua +1 -0
  12. package/functions/player.lua +9 -14
  13. package/package.json +2 -2
  14. package/cachedClasses.ts +0 -39
  15. package/callbacks/customRevive.ts +0 -215
  16. package/callbacks/itemPickup.ts +0 -101
  17. package/callbacks/postAmbush.ts +0 -73
  18. package/callbacks/postBombExploded.ts +0 -26
  19. package/callbacks/postBombInitLate.ts +0 -36
  20. package/callbacks/postBoneSwing.ts +0 -64
  21. package/callbacks/postCollectibleInitFirst.ts +0 -40
  22. package/callbacks/postCursedTeleport.ts +0 -183
  23. package/callbacks/postCustomDoorEnter.ts +0 -292
  24. package/callbacks/postDiceRoomActivated.ts +0 -60
  25. package/callbacks/postDoorRender.ts +0 -26
  26. package/callbacks/postDoorUpdate.ts +0 -26
  27. package/callbacks/postEffectInitLate.ts +0 -36
  28. package/callbacks/postEffectStateChanged.ts +0 -43
  29. package/callbacks/postEsauJr.ts +0 -107
  30. package/callbacks/postFamiliarInitLate.ts +0 -36
  31. package/callbacks/postFamiliarStateChanged.ts +0 -43
  32. package/callbacks/postFlip.ts +0 -88
  33. package/callbacks/postGreedModeWave.ts +0 -41
  34. package/callbacks/postGridEntity.ts +0 -164
  35. package/callbacks/postGridEntityCollision.ts +0 -69
  36. package/callbacks/postGridEntityRender.ts +0 -26
  37. package/callbacks/postHolyMantleRemoved.ts +0 -55
  38. package/callbacks/postItemDischarged.ts +0 -149
  39. package/callbacks/postKnifeInitLate.ts +0 -36
  40. package/callbacks/postLaserInitLate.ts +0 -36
  41. package/callbacks/postNPCInitLate.ts +0 -36
  42. package/callbacks/postNPCStateChanged.ts +0 -42
  43. package/callbacks/postNewRoomEarly.ts +0 -90
  44. package/callbacks/postPickupCollect.ts +0 -48
  45. package/callbacks/postPickupInitFirst.ts +0 -70
  46. package/callbacks/postPickupInitLate.ts +0 -36
  47. package/callbacks/postPickupStateChanged.ts +0 -43
  48. package/callbacks/postPitRender.ts +0 -26
  49. package/callbacks/postPitUpdate.ts +0 -26
  50. package/callbacks/postPlayerChangeHealth.ts +0 -62
  51. package/callbacks/postPlayerChangeType.ts +0 -56
  52. package/callbacks/postPlayerCollectible.ts +0 -113
  53. package/callbacks/postPlayerFatalDamage.ts +0 -141
  54. package/callbacks/postPlayerInitLate.ts +0 -37
  55. package/callbacks/postPlayerReordered.ts +0 -142
  56. package/callbacks/postPoopRender.ts +0 -26
  57. package/callbacks/postPoopUpdate.ts +0 -26
  58. package/callbacks/postPressurePlateRender.ts +0 -26
  59. package/callbacks/postPressurePlateUpdate.ts +0 -26
  60. package/callbacks/postProjectileInitLate.ts +0 -36
  61. package/callbacks/postPurchase.ts +0 -64
  62. package/callbacks/postRockRender.ts +0 -26
  63. package/callbacks/postRockUpdate.ts +0 -26
  64. package/callbacks/postRoomClearChanged.ts +0 -57
  65. package/callbacks/postSacrifice.ts +0 -62
  66. package/callbacks/postSlotDestroyed.ts +0 -92
  67. package/callbacks/postSlotInitUpdate.ts +0 -68
  68. package/callbacks/postSlotRender.ts +0 -69
  69. package/callbacks/postSpikesRender.ts +0 -26
  70. package/callbacks/postSpikesUpdate.ts +0 -26
  71. package/callbacks/postTNTRender.ts +0 -26
  72. package/callbacks/postTNTUpdate.ts +0 -26
  73. package/callbacks/postTearInitLate.ts +0 -36
  74. package/callbacks/postTearInitVeryLate.ts +0 -41
  75. package/callbacks/postTransformation.ts +0 -59
  76. package/callbacks/postTrinketBreak.ts +0 -110
  77. package/callbacks/preBerserkDeath.ts +0 -49
  78. package/callbacks/preNewLevel.ts +0 -55
  79. package/callbacks/reorderedCallbacks.ts +0 -166
  80. package/callbacks/subscriptions/postAmbushFinished.ts +0 -32
  81. package/callbacks/subscriptions/postAmbushStarted.ts +0 -32
  82. package/callbacks/subscriptions/postBombInitLate.ts +0 -32
  83. package/callbacks/subscriptions/postBoneExploded.ts +0 -32
  84. package/callbacks/subscriptions/postBoneSwing.ts +0 -24
  85. package/callbacks/subscriptions/postCollectibleInitFirst.ts +0 -37
  86. package/callbacks/subscriptions/postCursedTeleport.ts +0 -24
  87. package/callbacks/subscriptions/postCustomDoorEnter.ts +0 -45
  88. package/callbacks/subscriptions/postCustomRevive.ts +0 -36
  89. package/callbacks/subscriptions/postDiceRoomActivated.ts +0 -38
  90. package/callbacks/subscriptions/postDoorRender.ts +0 -35
  91. package/callbacks/subscriptions/postDoorUpdate.ts +0 -35
  92. package/callbacks/subscriptions/postEffectInitLate.ts +0 -32
  93. package/callbacks/subscriptions/postEffectStateChanged.ts +0 -40
  94. package/callbacks/subscriptions/postEsauJr.ts +0 -24
  95. package/callbacks/subscriptions/postFamiliarInitLate.ts +0 -32
  96. package/callbacks/subscriptions/postFamiliarStateChanged.ts +0 -40
  97. package/callbacks/subscriptions/postFirstEsauJr.ts +0 -24
  98. package/callbacks/subscriptions/postFirstFlip.ts +0 -24
  99. package/callbacks/subscriptions/postFlip.ts +0 -22
  100. package/callbacks/subscriptions/postGameStartedReordered.ts +0 -24
  101. package/callbacks/subscriptions/postGreedModeWave.ts +0 -24
  102. package/callbacks/subscriptions/postGridEntityBroken.ts +0 -51
  103. package/callbacks/subscriptions/postGridEntityCollision.ts +0 -54
  104. package/callbacks/subscriptions/postGridEntityInit.ts +0 -51
  105. package/callbacks/subscriptions/postGridEntityRemove.ts +0 -52
  106. package/callbacks/subscriptions/postGridEntityRender.ts +0 -51
  107. package/callbacks/subscriptions/postGridEntityStateChanged.ts +0 -55
  108. package/callbacks/subscriptions/postGridEntityUpdate.ts +0 -51
  109. package/callbacks/subscriptions/postHolyMantleRemoved.ts +0 -48
  110. package/callbacks/subscriptions/postItemDischarged.ts +0 -43
  111. package/callbacks/subscriptions/postItemPickup.ts +0 -64
  112. package/callbacks/subscriptions/postKnifeInitLate.ts +0 -32
  113. package/callbacks/subscriptions/postLaserInitLate.ts +0 -32
  114. package/callbacks/subscriptions/postNPCInitLate.ts +0 -32
  115. package/callbacks/subscriptions/postNPCStateChanged.ts +0 -42
  116. package/callbacks/subscriptions/postNewLevelReordered.ts +0 -22
  117. package/callbacks/subscriptions/postNewRoomEarly.ts +0 -22
  118. package/callbacks/subscriptions/postNewRoomReordered.ts +0 -22
  119. package/callbacks/subscriptions/postPEffectUpdateReordered.ts +0 -40
  120. package/callbacks/subscriptions/postPickupCollect.ts +0 -35
  121. package/callbacks/subscriptions/postPickupInitFirst.ts +0 -32
  122. package/callbacks/subscriptions/postPickupInitLate.ts +0 -32
  123. package/callbacks/subscriptions/postPickupStateChanged.ts +0 -40
  124. package/callbacks/subscriptions/postPitRender.ts +0 -35
  125. package/callbacks/subscriptions/postPitUpdate.ts +0 -35
  126. package/callbacks/subscriptions/postPlayerChangeHealth.ts +0 -49
  127. package/callbacks/subscriptions/postPlayerChangeType.ts +0 -40
  128. package/callbacks/subscriptions/postPlayerCollectibleAdded.ts +0 -38
  129. package/callbacks/subscriptions/postPlayerCollectibleRemoved.ts +0 -38
  130. package/callbacks/subscriptions/postPlayerFatalDamage.ts +0 -68
  131. package/callbacks/subscriptions/postPlayerInitLate.ts +0 -40
  132. package/callbacks/subscriptions/postPlayerInitReordered.ts +0 -40
  133. package/callbacks/subscriptions/postPlayerRenderReordered.ts +0 -40
  134. package/callbacks/subscriptions/postPlayerUpdateReordered.ts +0 -40
  135. package/callbacks/subscriptions/postPoopRender.ts +0 -35
  136. package/callbacks/subscriptions/postPoopUpdate.ts +0 -35
  137. package/callbacks/subscriptions/postPressurePlateRender.ts +0 -37
  138. package/callbacks/subscriptions/postPressurePlateUpdate.ts +0 -37
  139. package/callbacks/subscriptions/postProjectileInitLate.ts +0 -35
  140. package/callbacks/subscriptions/postPurchase.ts +0 -31
  141. package/callbacks/subscriptions/postRockRender.ts +0 -35
  142. package/callbacks/subscriptions/postRockUpdate.ts +0 -35
  143. package/callbacks/subscriptions/postRoomClearChanged.ts +0 -30
  144. package/callbacks/subscriptions/postSacrifice.ts +0 -43
  145. package/callbacks/subscriptions/postSlotAnimationChanged.ts +0 -40
  146. package/callbacks/subscriptions/postSlotDestroyed.ts +0 -55
  147. package/callbacks/subscriptions/postSlotInit.ts +0 -32
  148. package/callbacks/subscriptions/postSlotRender.ts +0 -32
  149. package/callbacks/subscriptions/postSlotUpdate.ts +0 -32
  150. package/callbacks/subscriptions/postSpikesRender.ts +0 -35
  151. package/callbacks/subscriptions/postSpikesUpdate.ts +0 -35
  152. package/callbacks/subscriptions/postTNTRender.ts +0 -35
  153. package/callbacks/subscriptions/postTNTUpdate.ts +0 -35
  154. package/callbacks/subscriptions/postTearInitLate.ts +0 -32
  155. package/callbacks/subscriptions/postTearInitVeryLate.ts +0 -32
  156. package/callbacks/subscriptions/postTransformation.ts +0 -40
  157. package/callbacks/subscriptions/postTrinketBreak.ts +0 -38
  158. package/callbacks/subscriptions/preBerserkDeath.ts +0 -42
  159. package/callbacks/subscriptions/preCustomRevive.ts +0 -46
  160. package/callbacks/subscriptions/preItemPickup.ts +0 -64
  161. package/callbacks/subscriptions/preNewLevel.ts +0 -24
  162. package/classes/DefaultMap.ts +0 -174
  163. package/classes/ModUpgraded.ts +0 -77
  164. package/constants.ts +0 -162
  165. package/constantsFirstLast.ts +0 -217
  166. package/enums/AmbushType.ts +0 -4
  167. package/enums/HealthType.ts +0 -16
  168. package/enums/ModCallbackCustom.ts +0 -1278
  169. package/enums/PocketItemType.ts +0 -8
  170. package/enums/SerializationType.ts +0 -5
  171. package/enums/SlotDestructionType.ts +0 -4
  172. package/enums/private/CopyableIsaacAPIClassType.ts +0 -7
  173. package/enums/private/SaveDataKey.ts +0 -14
  174. package/enums/private/SerializationBrand.ts +0 -42
  175. package/features/characterHealthConversion.ts +0 -111
  176. package/features/characterStats.ts +0 -61
  177. package/features/debugDisplay/debugDisplay.ts +0 -221
  178. package/features/debugDisplay/exports.ts +0 -368
  179. package/features/debugDisplay/v.ts +0 -65
  180. package/features/deployJSONRoom.ts +0 -743
  181. package/features/disableInputs.ts +0 -193
  182. package/features/disableSound.ts +0 -77
  183. package/features/extraConsoleCommands/commandsDisplay.ts +0 -290
  184. package/features/extraConsoleCommands/commandsSubroutines.ts +0 -139
  185. package/features/extraConsoleCommands/init.ts +0 -334
  186. package/features/extraConsoleCommands/listCommands.ts +0 -1299
  187. package/features/extraConsoleCommands/v.ts +0 -14
  188. package/features/fadeInRemover.ts +0 -60
  189. package/features/fastReset.ts +0 -75
  190. package/features/forgottenSwitch.ts +0 -50
  191. package/features/getCollectibleItemPoolType.ts +0 -66
  192. package/features/persistentEntities.ts +0 -183
  193. package/features/playerInventory.ts +0 -133
  194. package/features/ponyDetection.ts +0 -74
  195. package/features/preventCollectibleRotation.ts +0 -115
  196. package/features/runInNFrames.ts +0 -148
  197. package/features/saveDataManager/constants.ts +0 -4
  198. package/features/saveDataManager/exports.ts +0 -229
  199. package/features/saveDataManager/load.ts +0 -99
  200. package/features/saveDataManager/main.ts +0 -195
  201. package/features/saveDataManager/maps.ts +0 -13
  202. package/features/saveDataManager/merge.ts +0 -194
  203. package/features/saveDataManager/save.ts +0 -74
  204. package/features/saveDataManager/serializationBrand.ts +0 -16
  205. package/features/sirenHelpers.ts +0 -129
  206. package/features/taintedLazarusPlayers.ts +0 -113
  207. package/featuresInitialized.ts +0 -20
  208. package/functions/ambush.ts +0 -47
  209. package/functions/array.ts +0 -410
  210. package/functions/benchmark.ts +0 -36
  211. package/functions/bitwise.ts +0 -24
  212. package/functions/bombs.ts +0 -12
  213. package/functions/boss.ts +0 -227
  214. package/functions/cacheFlag.ts +0 -12
  215. package/functions/cards.ts +0 -271
  216. package/functions/challenges.ts +0 -13
  217. package/functions/character.ts +0 -126
  218. package/functions/charge.ts +0 -237
  219. package/functions/chargeBar.ts +0 -67
  220. package/functions/collectibleCacheFlag.ts +0 -90
  221. package/functions/collectibleSet.ts +0 -56
  222. package/functions/collectibleTag.ts +0 -89
  223. package/functions/collectibles.ts +0 -659
  224. package/functions/color.ts +0 -128
  225. package/functions/debug.ts +0 -68
  226. package/functions/deepCopy.ts +0 -535
  227. package/functions/deepCopyTests.ts +0 -386
  228. package/functions/direction.ts +0 -49
  229. package/functions/doors.ts +0 -347
  230. package/functions/easing.ts +0 -182
  231. package/functions/eden.ts +0 -47
  232. package/functions/effects.ts +0 -20
  233. package/functions/entity.ts +0 -439
  234. package/functions/entitySpecific.ts +0 -889
  235. package/functions/entityTypes.ts +0 -6
  236. package/functions/enums.ts +0 -146
  237. package/functions/familiars.ts +0 -106
  238. package/functions/flag.ts +0 -165
  239. package/functions/flying.ts +0 -117
  240. package/functions/globals.ts +0 -242
  241. package/functions/gridEntity.ts +0 -511
  242. package/functions/gridEntitySpecific.ts +0 -112
  243. package/functions/input.ts +0 -139
  244. package/functions/isaacAPIClass.ts +0 -67
  245. package/functions/jsonHelpers.ts +0 -45
  246. package/functions/jsonRoom.ts +0 -100
  247. package/functions/kColor.ts +0 -129
  248. package/functions/language.ts +0 -13
  249. package/functions/level.ts +0 -31
  250. package/functions/log.ts +0 -720
  251. package/functions/map.ts +0 -56
  252. package/functions/math.ts +0 -149
  253. package/functions/mergeTests.ts +0 -288
  254. package/functions/npc.ts +0 -148
  255. package/functions/pickupVariants.ts +0 -60
  256. package/functions/pickups.ts +0 -499
  257. package/functions/pills.ts +0 -205
  258. package/functions/player.ts +0 -1060
  259. package/functions/playerDataStructures.ts +0 -150
  260. package/functions/playerHealth.ts +0 -382
  261. package/functions/playerIndex.ts +0 -195
  262. package/functions/pocketItems.ts +0 -149
  263. package/functions/positionVelocity.ts +0 -188
  264. package/functions/random.ts +0 -77
  265. package/functions/revive.ts +0 -201
  266. package/functions/rng.ts +0 -172
  267. package/functions/roomData.ts +0 -199
  268. package/functions/roomGrid.ts +0 -109
  269. package/functions/roomShape.ts +0 -80
  270. package/functions/rooms.ts +0 -648
  271. package/functions/run.ts +0 -36
  272. package/functions/saveFile.ts +0 -128
  273. package/functions/seeds.ts +0 -19
  274. package/functions/serialization.ts +0 -91
  275. package/functions/set.ts +0 -95
  276. package/functions/sound.ts +0 -9
  277. package/functions/spawnCollectible.ts +0 -104
  278. package/functions/sprite.ts +0 -107
  279. package/functions/stage.ts +0 -125
  280. package/functions/string.ts +0 -47
  281. package/functions/table.ts +0 -189
  282. package/functions/tears.ts +0 -32
  283. package/functions/transformations.ts +0 -131
  284. package/functions/trinketCacheFlag.ts +0 -60
  285. package/functions/trinketGive.ts +0 -157
  286. package/functions/trinkets.ts +0 -215
  287. package/functions/tstlClass.ts +0 -157
  288. package/functions/types.ts +0 -36
  289. package/functions/ui.ts +0 -138
  290. package/functions/utils.ts +0 -189
  291. package/functions/vector.ts +0 -126
  292. package/index.ts +0 -172
  293. package/initCustomCallbacks.ts +0 -132
  294. package/initFeatures.ts +0 -39
  295. package/interfaces/AddCallbackParameterCustom.ts +0 -188
  296. package/interfaces/ChargeBarSprites.ts +0 -12
  297. package/interfaces/JSONDoor.ts +0 -13
  298. package/interfaces/JSONEntity.ts +0 -16
  299. package/interfaces/JSONRoom.ts +0 -36
  300. package/interfaces/JSONRooms.ts +0 -12
  301. package/interfaces/JSONSpawn.ts +0 -14
  302. package/interfaces/PlayerHealth.ts +0 -16
  303. package/interfaces/PocketItemDescription.ts +0 -9
  304. package/interfaces/SaveData.ts +0 -29
  305. package/interfaces/TrinketSituation.ts +0 -9
  306. package/interfaces/private/TSTLClassMetatable.ts +0 -8
  307. package/maps/PHDPillConversions.ts +0 -21
  308. package/maps/cardMap.ts +0 -209
  309. package/maps/characterMap.ts +0 -87
  310. package/maps/collectibleDescriptionMap.ts +0 -732
  311. package/maps/collectibleNameMap.ts +0 -731
  312. package/maps/defaultPlayerStatMap.ts +0 -17
  313. package/maps/falsePHDPillConversions.ts +0 -35
  314. package/maps/gridEntityTypeToBrokenStateMap.ts +0 -50
  315. package/maps/gridEntityXMLMap.ts +0 -176
  316. package/maps/pillEffectMap.ts +0 -88
  317. package/maps/roomShapeToTopLeftWallGridIndexMap.ts +0 -18
  318. package/maps/roomTypeMap.ts +0 -40
  319. package/maps/trinketDescriptionMap.ts +0 -200
  320. package/maps/trinketNameMap.ts +0 -198
  321. package/objects/LRoomShapeToRectangles.ts +0 -44
  322. package/objects/callbackRegisterFunctions.ts +0 -187
  323. package/objects/cardDescriptions.ts +0 -105
  324. package/objects/cardNames.ts +0 -105
  325. package/objects/cardTypes.ts +0 -104
  326. package/objects/challengeNames.ts +0 -52
  327. package/objects/characterNames.ts +0 -48
  328. package/objects/coinSubTypeToValue.ts +0 -14
  329. package/objects/colors.ts +0 -16
  330. package/objects/directionNames.ts +0 -11
  331. package/objects/directionToDegrees.ts +0 -11
  332. package/objects/directionToVector.ts +0 -12
  333. package/objects/doorSlotFlagToDoorSlot.ts +0 -16
  334. package/objects/doorSlotToDirection.ts +0 -14
  335. package/objects/isaacAPIClassTypeToBrand.ts +0 -11
  336. package/objects/isaacAPIClassTypeToCopyFunction.ts +0 -18
  337. package/objects/languageNames.ts +0 -13
  338. package/objects/oppositeDoorSlots.ts +0 -15
  339. package/objects/pillEffectClasses.ts +0 -63
  340. package/objects/pillEffectNames.ts +0 -57
  341. package/objects/pillEffectTypes.ts +0 -62
  342. package/objects/roomShapeBounds.ts +0 -71
  343. package/objects/roomShapeLayoutSizes.ts +0 -45
  344. package/objects/roomShapeToBottomRightPosition.ts +0 -25
  345. package/objects/roomShapeToDoorSlots.ts +0 -83
  346. package/objects/roomShapeToDoorSlotsToGridIndexDelta.ts +0 -127
  347. package/objects/roomShapeToGridWidth.ts +0 -21
  348. package/objects/roomShapeToTopLeftPosition.ts +0 -26
  349. package/objects/roomShapeVolumes.ts +0 -38
  350. package/objects/roomTypeNames.ts +0 -36
  351. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.ts +0 -14
  352. package/objects/stageTypeToLetter.ts +0 -15
  353. package/objects/transformationNames.ts +0 -18
  354. package/patchErrorFunctions.ts +0 -92
  355. package/sets/LRoomShapesSet.ts +0 -8
  356. package/sets/bossSets.ts +0 -470
  357. package/sets/charactersThatStartWithAnActiveItemSet.ts +0 -16
  358. package/sets/charactersWithBlackHeartFromEternalHeartSet.ts +0 -7
  359. package/sets/charactersWithFreeDevilDealsSet.ts +0 -4
  360. package/sets/charactersWithNoRedHeartsSet.ts +0 -17
  361. package/sets/charactersWithNoSoulHeartsSet.ts +0 -14
  362. package/sets/chestPickupVariantsSet.ts +0 -16
  363. package/sets/familiarsThatShootPlayerTearsSet.ts +0 -13
  364. package/sets/lostStyleCharactersSet.ts +0 -13
  365. package/sets/mineShaftRoomSubTypesSet.ts +0 -10
  366. package/sets/redHeartSubTypesSet.ts +0 -7
  367. package/sets/sinEntityTypesSet.ts +0 -11
  368. package/sets/singleUseActiveCollectibleTypesSet.ts +0 -13
  369. package/sets/storyBossesSet.ts +0 -17
  370. package/types/AnyEntity.ts +0 -12
  371. package/types/AwaitingTextInput.d.ts +0 -2
  372. package/types/CollectibleIndex.ts +0 -16
  373. package/types/PickingUpItem.ts +0 -89
  374. package/types/PlayerIndex.ts +0 -13
  375. package/types/private/IsaacAPIClass.ts +0 -3
  376. package/types/private/SerializedIsaacAPIClass.ts +0 -3
  377. package/types/private/TSTLClass.ts +0 -3
  378. package/upgradeMod.ts +0 -55
@@ -1,195 +0,0 @@
1
- import { CollectibleType, PlayerType } from "isaac-typescript-definitions";
2
- import { game } from "../cachedClasses";
3
- import { PlayerIndex } from "../types/PlayerIndex";
4
-
5
- const DEFAULT_COLLECTIBLE_TYPE = CollectibleType.SAD_ONION;
6
-
7
- const EXCLUDED_CHARACTERS: ReadonlySet<PlayerType> = new Set([
8
- PlayerType.ESAU, // 20
9
- PlayerType.THE_SOUL_B, // 40
10
- ]);
11
-
12
- /**
13
- * Helper function to get every player with no restrictions, by using `Game.GetNumPlayers` and
14
- * `Isaac.GetPlayer`.
15
- *
16
- * This function is almost never what you want to use. For most purposes, use the `getPlayers`
17
- * helper function instead to get a filtered list of players.
18
- */
19
- export function getAllPlayers(): EntityPlayer[] {
20
- const numPlayers = game.GetNumPlayers();
21
-
22
- const players: EntityPlayer[] = [];
23
- for (let i = 0; i < numPlayers; i++) {
24
- const player = Isaac.GetPlayer(i);
25
- players.push(player);
26
- }
27
-
28
- return players;
29
- }
30
-
31
- export function getPlayerFromIndex(
32
- playerIndex: PlayerIndex,
33
- ): EntityPlayer | undefined {
34
- const players = getPlayers();
35
- return players.find((player) => getPlayerIndex(player) === playerIndex);
36
- }
37
-
38
- /**
39
- * Mods often have to track variables relating to the player. In naive mods, information will only
40
- * be stored about the first player. However, in order to be robust, mods must handle up to 4
41
- * players playing at the same time. This means that information must be stored on a map data
42
- * structure. Finding a good index for these types of map data structures is difficult:
43
- *
44
- * - We cannot use the index from `Isaac.GetPlayer(i)` since this fails in the case where there are
45
- * two players and the first player leaves the run.
46
- * - We cannot use `EntityPlayer.ControllerIndex` as an index because it fails in the case of Jacob
47
- * & Esau or Tainted Forgotten. It also fails in the case of a player changing their controls
48
- * mid-run.
49
- * - We cannot use `EntityPlayer.GetData().index` because it does not persist across saving and
50
- * continuing.
51
- * - We cannot use `GetPtrHash()` as an index because it does not persist across exiting and
52
- * relaunching the game.
53
- * - We cannot use `EntityPlayer.InitSeed` because it is not consistent with additional players
54
- * beyond the first.
55
- *
56
- * Instead, we use the `EntityPlayer.GetCollectibleRNG` method with an arbitrary value of Sad Onion
57
- * (1). This works even if the player does not have any Sad Onions.
58
- *
59
- * Since the RNG value is the same for both Tainted Lazarus and Dead Tainted Lazarus, we revert to
60
- * using the RNG of The Inner Eye (2) for Dead Tainted Lazarus.
61
- *
62
- * Note that by default, this returns the same index for both The Forgotten and The Soul. (Even
63
- * though they are technically different characters, they share the same inventory and InitSeed.) If
64
- * this is not desired, pass true for the `differentiateForgottenAndSoul` argument, and the RNG of
65
- * Spoon Bender (3) will be used for The Soul.
66
- */
67
- export function getPlayerIndex(
68
- player: EntityPlayer,
69
- differentiateForgottenAndSoul = false,
70
- ): PlayerIndex {
71
- // Sub-players use separate RNG values for some reason, so we need to always use the main player:
72
- // https://github.com/Meowlala/RepentanceAPIIssueTracker/issues/443
73
-
74
- // We can safely ignore the player's character because regardless of whether the main player ends
75
- // up being The Forgotten or The Soul, the collectible RNG values will be the same. The
76
- // `EntityPlayer.IsSubPlayer` method can return true for Dead Tainted Lazarus during the
77
- // PostPlayerInit callback, but since we fall back to the player in the case of
78
- // "getSubPlayerParent" returning undefined, we do not need to explicitly check for this case.
79
- let playerToUse = player;
80
- const isSubPlayer = player.IsSubPlayer();
81
- if (isSubPlayer) {
82
- // The "getSubPlayerParent" function will return undefined in the situation where we are on Dead
83
- // Tainted Lazarus in the PostPlayerInit callback.
84
- const playerParent = getSubPlayerParent(player as EntitySubPlayer);
85
- if (playerParent !== undefined) {
86
- playerToUse = playerParent;
87
- }
88
- }
89
-
90
- const collectibleType = getPlayerIndexCollectibleType(
91
- player,
92
- differentiateForgottenAndSoul,
93
- );
94
- const collectibleRNG = playerToUse.GetCollectibleRNG(collectibleType);
95
- const seed = collectibleRNG.GetSeed();
96
-
97
- return seed as unknown as PlayerIndex;
98
- }
99
-
100
- function getPlayerIndexCollectibleType(
101
- player: EntityPlayer,
102
- differentiateForgottenAndSoul: boolean,
103
- ) {
104
- const character = player.GetPlayerType();
105
-
106
- switch (character) {
107
- // 17
108
- case PlayerType.THE_SOUL: {
109
- return differentiateForgottenAndSoul
110
- ? CollectibleType.SPOON_BENDER
111
- : DEFAULT_COLLECTIBLE_TYPE;
112
- }
113
-
114
- // 38
115
- case PlayerType.LAZARUS_2_B: {
116
- return CollectibleType.INNER_EYE;
117
- }
118
-
119
- default: {
120
- return DEFAULT_COLLECTIBLE_TYPE;
121
- }
122
- }
123
- }
124
-
125
- /**
126
- * Helper function to return the index of this player with respect to the output of the
127
- * `Isaac.GetPlayer` method.
128
- */
129
- export function getPlayerIndexVanilla(
130
- playerToFind: EntityPlayer,
131
- ): int | undefined {
132
- const numPlayers = game.GetNumPlayers();
133
- const playerToFindHash = GetPtrHash(playerToFind);
134
-
135
- for (let i = 0; i < numPlayers; i++) {
136
- const player = Isaac.GetPlayer(i);
137
- const playerHash = GetPtrHash(player);
138
- if (playerHash === playerToFindHash) {
139
- return i;
140
- }
141
- }
142
-
143
- return undefined;
144
- }
145
-
146
- /**
147
- * This function always excludes players with a non-undefined parent, since they are not real
148
- * players (e.g. the Strawman Keeper).
149
- *
150
- * If this is not desired, use the `getAllPlayers` helper function instead.
151
- *
152
- * @param performCharacterExclusions Whether or not to exclude characters that are not directly
153
- * controlled by the player (i.e. Esau & Tainted Soul). Default is
154
- * false.
155
- */
156
- export function getPlayers(performCharacterExclusions = false): EntityPlayer[] {
157
- const players = getAllPlayers();
158
- const nonChildPlayers = players.filter((player) => !isChildPlayer(player));
159
- const nonChildPlayersFiltered = nonChildPlayers.filter((player) => {
160
- const character = player.GetPlayerType();
161
- return !EXCLUDED_CHARACTERS.has(character);
162
- });
163
-
164
- return performCharacterExclusions ? nonChildPlayersFiltered : nonChildPlayers;
165
- }
166
-
167
- /**
168
- * Helper function to get a parent `EntityPlayer` object for a given `EntitySubPlayer` object. This
169
- * is useful because calling the `EntityPlayer.GetSubPlayer` method on a sub-player object will
170
- * return undefined.
171
- */
172
- export function getSubPlayerParent(
173
- subPlayer: EntitySubPlayer,
174
- ): EntityPlayer | undefined {
175
- const subPlayerPtrHash = GetPtrHash(subPlayer);
176
- const players = getPlayers();
177
-
178
- return players.find((player) => {
179
- const thisPlayerSubPlayer = player.GetSubPlayer();
180
- if (thisPlayerSubPlayer === undefined) {
181
- return false;
182
- }
183
-
184
- const thisPlayerSubPlayerPtrHash = GetPtrHash(thisPlayerSubPlayer);
185
- return thisPlayerSubPlayerPtrHash === subPlayerPtrHash;
186
- });
187
- }
188
-
189
- /**
190
- * Some players are "child" players, meaning that they have a non-undefined Parent property. (For
191
- * example, the Strawman Keeper.)
192
- */
193
- export function isChildPlayer(player: EntityPlayer): boolean {
194
- return player.Parent !== undefined;
195
- }
@@ -1,149 +0,0 @@
1
- import {
2
- ActiveSlot,
3
- Card,
4
- CollectibleType,
5
- PillColor,
6
- PlayerType,
7
- PocketItemSlot,
8
- } from "isaac-typescript-definitions";
9
- import { PocketItemType } from "../enums/PocketItemType";
10
- import { PocketItemDescription } from "../interfaces/PocketItemDescription";
11
- import { getEnumValues } from "./enums";
12
- import { isCharacter } from "./player";
13
-
14
- /**
15
- * Helper function to get the `PocketItemSlot` that the player's pocket active collectible item is
16
- * in, if any. Returns undefined if the player does not have a pocket active item.
17
- */
18
- export function getActivePocketItemSlot(
19
- player: EntityPlayer,
20
- ): PocketItemSlot | undefined {
21
- const pocketItems = getPocketItems(player);
22
- for (const pocketItem of pocketItems) {
23
- if (pocketItem.type === PocketItemType.ACTIVE_ITEM) {
24
- return pocketItem.slot;
25
- }
26
- }
27
-
28
- return undefined;
29
- }
30
-
31
- export function getFirstCardOrPill(
32
- player: EntityPlayer,
33
- ): PocketItemDescription | undefined {
34
- const pocketItems = getPocketItems(player);
35
- return pocketItems.find(
36
- (pocketItem) =>
37
- pocketItem.type === PocketItemType.CARD ||
38
- pocketItem.type === PocketItemType.PILL,
39
- );
40
- }
41
-
42
- /**
43
- * Use this helper function as a workaround for the `EntityPlayer.GetPocketItem` method not working
44
- * correctly.
45
- *
46
- * Note that due to API limitations, there is no way to determine the location of a Dice Bag trinket
47
- * dice. Furthermore, when the player has a Dice Bag trinket dice and a pocket active at the same
48
- * time, there is no way to determine the location of the pocket active item. If this function
49
- * cannot determine the identity of a particular slot, it will mark the type of the slot as
50
- * `PocketItemType.UNDETERMINABLE`.
51
- */
52
- export function getPocketItems(player: EntityPlayer): PocketItemDescription[] {
53
- const pocketItem = player.GetActiveItem(ActiveSlot.POCKET);
54
- const hasPocketItem = pocketItem !== CollectibleType.NULL;
55
-
56
- const pocketItem2 = player.GetActiveItem(ActiveSlot.POCKET_SINGLE_USE);
57
- const hasPocketItem2 = pocketItem2 !== CollectibleType.NULL;
58
-
59
- const maxPocketItems = player.GetMaxPocketItems();
60
- const pocketItemSlots = getEnumValues(PocketItemSlot);
61
-
62
- const pocketItems: PocketItemDescription[] = [];
63
- let pocketItemIdentified = false;
64
- let pocketItem2Identified = false;
65
- for (const slot of pocketItemSlots) {
66
- const card = player.GetCard(slot as PocketItemSlot);
67
- const pillColor = player.GetPill(slot as PocketItemSlot);
68
-
69
- if (card !== Card.NULL) {
70
- pocketItems.push({
71
- slot,
72
- type: PocketItemType.CARD,
73
- subType: card,
74
- });
75
- } else if (pillColor !== PillColor.NULL) {
76
- pocketItems.push({
77
- slot,
78
- type: PocketItemType.PILL,
79
- subType: pillColor,
80
- });
81
- } else if (hasPocketItem && !hasPocketItem2 && !pocketItemIdentified) {
82
- pocketItemIdentified = true;
83
- pocketItems.push({
84
- slot,
85
- type: PocketItemType.ACTIVE_ITEM,
86
- subType: pocketItem,
87
- });
88
- } else if (!hasPocketItem && hasPocketItem2 && !pocketItem2Identified) {
89
- pocketItem2Identified = true;
90
- pocketItems.push({
91
- slot,
92
- type: PocketItemType.DICE_BAG_DICE,
93
- subType: pocketItem2,
94
- });
95
- } else if (hasPocketItem && hasPocketItem2) {
96
- pocketItems.push({
97
- slot,
98
- type: PocketItemType.UNDETERMINABLE,
99
- subType: 0,
100
- });
101
- } else {
102
- pocketItems.push({
103
- slot,
104
- type: PocketItemType.EMPTY,
105
- subType: 0,
106
- });
107
- }
108
-
109
- // eslint-disable-next-line isaacscript/strict-enums
110
- if (slot + 1 === maxPocketItems) {
111
- break;
112
- }
113
- }
114
-
115
- return pocketItems;
116
- }
117
-
118
- /**
119
- * Returns whether or not the player can hold an additional pocket item, beyond what they are
120
- * currently carrying. This takes into account items that modify the max number of pocket items,
121
- * like Starter Deck.
122
- *
123
- * If the player is the Tainted Soul, this always returns false, since that character cannot pick up
124
- * items. (Only Tainted Forgotten can pick up items.)
125
- */
126
- export function hasOpenPocketItemSlot(player: EntityPlayer): boolean {
127
- if (isCharacter(player, PlayerType.THE_SOUL_B)) {
128
- return false;
129
- }
130
-
131
- const pocketItems = getPocketItems(player);
132
- return pocketItems.some(
133
- (pocketItem) => pocketItem.type === PocketItemType.EMPTY,
134
- );
135
- }
136
-
137
- /**
138
- * Helper function to determine whether or not the player's "active" pocket item slot is set to
139
- * their pocket active item.
140
- */
141
- export function isFirstSlotPocketActiveItem(player: EntityPlayer): boolean {
142
- const pocketItems = getPocketItems(player);
143
- const firstPocketItem = pocketItems[0];
144
- if (firstPocketItem === undefined) {
145
- return false;
146
- }
147
-
148
- return firstPocketItem.type === PocketItemType.ACTIVE_ITEM;
149
- }
@@ -1,188 +0,0 @@
1
- import {
2
- EffectVariant,
3
- HeavenLightDoorSubType,
4
- } from "isaac-typescript-definitions";
5
- import { game } from "../cachedClasses";
6
- import { DISTANCE_OF_GRID_TILE } from "../constants";
7
- import { getEntities } from "./entity";
8
- import { getEffects } from "./entitySpecific";
9
- import { getPlayerCloserThan } from "./player";
10
- import { getPlayers } from "./playerIndex";
11
-
12
- const MAX_FIND_FREE_POSITION_ATTEMPTS = 100;
13
-
14
- export function anyEntityCloserThan(
15
- entities: Entity[],
16
- position: Vector,
17
- distance: int,
18
- ): boolean {
19
- return entities.some(
20
- (entity) => position.Distance(entity.Position) <= distance,
21
- );
22
- }
23
-
24
- /** Iterates over all players and checks if any player is close enough to the specified position. */
25
- export function anyPlayerCloserThan(
26
- position: Vector,
27
- distance: float,
28
- ): boolean {
29
- const players = getPlayers();
30
- return players.some(
31
- (player) => player.Position.Distance(position) <= distance,
32
- );
33
- }
34
-
35
- /**
36
- * Helper function to get a room position that is not overlapping with a grid entity, a heaven door,
37
- * or a player. The `Room.FindFreePickupSpawnPosition` method will return locations that overlap
38
- * with heaven doors and partially overlap with players, if the thing being spawned is bigger than a
39
- * tile (like a Blood Donation Machine). Use this function instead if you want to account for those
40
- * specific situations.
41
- *
42
- * @param startingPosition The position to start searching from. If this position is not overlapping
43
- * with anything, then it will be returned.
44
- * @param avoidActiveEntities Optional. Default is false.
45
- */
46
- export function findFreePosition(
47
- startingPosition: Vector,
48
- avoidActiveEntities = false,
49
- ): Vector {
50
- const room = game.GetRoom();
51
- const heavenDoors = getEffects(
52
- EffectVariant.HEAVEN_LIGHT_DOOR,
53
- HeavenLightDoorSubType.HEAVEN_DOOR,
54
- );
55
-
56
- for (let i = 0; i < MAX_FIND_FREE_POSITION_ATTEMPTS; i++) {
57
- const position = room.FindFreePickupSpawnPosition(
58
- startingPosition,
59
- i,
60
- avoidActiveEntities,
61
- );
62
-
63
- const closePlayer = getPlayerCloserThan(position, DISTANCE_OF_GRID_TILE);
64
- if (closePlayer !== undefined) {
65
- continue;
66
- }
67
-
68
- const isCloseHeavenDoor = anyEntityCloserThan(
69
- heavenDoors,
70
- position,
71
- DISTANCE_OF_GRID_TILE,
72
- );
73
- if (isCloseHeavenDoor) {
74
- continue;
75
- }
76
-
77
- return position;
78
- }
79
-
80
- // We failed to find a free position in N iterations.
81
- return room.FindFreePickupSpawnPosition(startingPosition);
82
- }
83
-
84
- /**
85
- * Helper function to get a map containing the positions of every entity in the current room.
86
- *
87
- * This is useful for rewinding entity positions at a later time. Also see `setEntityPositions`.
88
- *
89
- * @param entities Optional. If provided, will only get the positions of the provided entities. Use
90
- * this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
91
- * multiple times.
92
- */
93
- export function getEntityPositions(entities?: Entity[]): Map<PtrHash, Vector> {
94
- if (entities === undefined) {
95
- entities = getEntities();
96
- }
97
-
98
- const entityPositions = new Map<PtrHash, Vector>();
99
- for (const entity of entities) {
100
- const ptrHash = GetPtrHash(entity);
101
- entityPositions.set(ptrHash, entity.Position);
102
- }
103
-
104
- return entityPositions;
105
- }
106
-
107
- /**
108
- * Helper function to get a map containing the velocities of every entity in the current room.
109
- *
110
- * This is useful for rewinding entity velocities at a later time. Also see `setEntityVelocities`.
111
- *
112
- * @param entities Optional. If provided, will only get the velocities of the provided entities. Use
113
- * this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
114
- * multiple times.
115
- */
116
- export function getEntityVelocities(entities?: Entity[]): Map<PtrHash, Vector> {
117
- if (entities === undefined) {
118
- entities = getEntities();
119
- }
120
-
121
- const entityVelocities = new Map<PtrHash, Vector>();
122
- for (const entity of entities) {
123
- const ptrHash = GetPtrHash(entity);
124
- entityVelocities.set(ptrHash, entity.Velocity);
125
- }
126
-
127
- return entityVelocities;
128
- }
129
-
130
- /**
131
- * Helper function to set the position of every entity in the room based on a map of positions. If
132
- * an entity is found that does not have matching element in the provided map, then that entity will
133
- * be skipped.
134
- *
135
- * This function is useful for rewinding entity positions at a later time. Also see
136
- * `getEntityPositions`.
137
- *
138
- * @param entityPositions The map providing the positions for every entity.
139
- * @param entities Optional. If provided, will only set the positions of the provided entities. Use
140
- * this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
141
- * multiple times.
142
- */
143
- export function setEntityPositions(
144
- entityPositions: Map<PtrHash, Vector>,
145
- entities?: Entity[],
146
- ): void {
147
- if (entities === undefined) {
148
- entities = getEntities();
149
- }
150
-
151
- for (const entity of entities) {
152
- const ptrHash = GetPtrHash(entity);
153
- const entityPosition = entityPositions.get(ptrHash);
154
- if (entityPosition !== undefined) {
155
- entity.Position = entityPosition;
156
- }
157
- }
158
- }
159
-
160
- /**
161
- * Helper function to set the velocity of every entity in the room based on a map of velocities. If
162
- * an entity is found that does not have matching element in the provided map, then that entity will
163
- * be skipped.
164
- *
165
- * This function is useful for rewinding entity velocities at a later time. Also see
166
- * `getEntityVelocities`.
167
- *
168
- * @param entityVelocities The map providing the velocities for every entity.
169
- * @param entities Optional. If provided, will only set the velocities of the provided entities. Use
170
- * this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
171
- * multiple times.
172
- */
173
- export function setEntityVelocities(
174
- entityVelocities: Map<PtrHash, Vector>,
175
- entities?: Entity[],
176
- ): void {
177
- if (entities === undefined) {
178
- entities = getEntities();
179
- }
180
-
181
- for (const entity of entities) {
182
- const ptrHash = GetPtrHash(entity);
183
- const entityVelocity = entityVelocities.get(ptrHash);
184
- if (entityVelocity !== undefined) {
185
- entity.Velocity = entityVelocity;
186
- }
187
- }
188
- }
@@ -1,77 +0,0 @@
1
- import { getRandomSeed, isRNG, newRNG } from "./rng";
2
-
3
- /**
4
- * This returns a random float between 0 and 1. It is inclusive on the low end, but exclusive on the
5
- * high end. (This is because the `RNG.RandomFloat` method will never return a value of exactly 1.)
6
- *
7
- * @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
8
- * `RNG.Next` method will be called. Default is `getRandomSeed()`.
9
- */
10
- export function getRandom(seedOrRNG: Seed | RNG = getRandomSeed()): float {
11
- const rng = isRNG(seedOrRNG) ? seedOrRNG : newRNG(seedOrRNG);
12
- return rng.RandomFloat();
13
- }
14
-
15
- /**
16
- * This returns a random float between min and max.
17
- *
18
- * For example:
19
- *
20
- * ```ts
21
- * const realNumberBetweenOneAndThree = getRandomFloat(1, 3);
22
- * ```
23
- *
24
- * @param min The lower bound for the random number (inclusive).
25
- * @param max The upper bound for the random number (exclusive).
26
- * @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
27
- * `RNG.Next` method will be called. Default is `getRandomSeed()`.
28
- */
29
- export function getRandomFloat(
30
- min: int,
31
- max: int,
32
- seedOrRNG: Seed | RNG = getRandomSeed(),
33
- ): float {
34
- if (min > max) {
35
- const oldMin = min;
36
- const oldMax = max;
37
- min = oldMax;
38
- max = oldMin;
39
- }
40
-
41
- // From: https://stackoverflow.com/questions/40431966
42
- return min + getRandom(seedOrRNG) * (max - min);
43
- }
44
-
45
- /**
46
- * This returns a random integer between min and max. It is inclusive on both ends.
47
- *
48
- * Note that this function will invoke the `Next` method on the `RNG` object before returning the
49
- * random number.
50
- *
51
- * For example:
52
- *
53
- * ```ts
54
- * const oneTwoOrThree = getRandomInt(1, 3);
55
- * ```
56
- *
57
- * @param min The lower bound for the random number (inclusive).
58
- * @param max The upper bound for the random number (inclusive).
59
- * @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
60
- * `RNG.Next` method will be called. Default is `getRandomSeed()`.
61
- */
62
- export function getRandomInt(
63
- min: int,
64
- max: int,
65
- seedOrRNG: Seed | RNG = getRandomSeed(),
66
- ): int {
67
- const rng = isRNG(seedOrRNG) ? seedOrRNG : newRNG(seedOrRNG);
68
-
69
- if (min > max) {
70
- const oldMin = min;
71
- const oldMax = max;
72
- min = oldMax;
73
- max = oldMin;
74
- }
75
-
76
- return rng.RandomInt(max - min + 1) + min;
77
- }