isaacscript-common 4.0.3 → 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 (366) hide show
  1. package/package.json +1 -1
  2. package/cachedClasses.ts +0 -39
  3. package/callbacks/customRevive.ts +0 -215
  4. package/callbacks/itemPickup.ts +0 -101
  5. package/callbacks/postAmbush.ts +0 -73
  6. package/callbacks/postBombExploded.ts +0 -26
  7. package/callbacks/postBombInitLate.ts +0 -36
  8. package/callbacks/postBoneSwing.ts +0 -64
  9. package/callbacks/postCollectibleInitFirst.ts +0 -40
  10. package/callbacks/postCursedTeleport.ts +0 -185
  11. package/callbacks/postCustomDoorEnter.ts +0 -292
  12. package/callbacks/postDiceRoomActivated.ts +0 -60
  13. package/callbacks/postDoorRender.ts +0 -26
  14. package/callbacks/postDoorUpdate.ts +0 -26
  15. package/callbacks/postEffectInitLate.ts +0 -36
  16. package/callbacks/postEffectStateChanged.ts +0 -43
  17. package/callbacks/postEsauJr.ts +0 -109
  18. package/callbacks/postFamiliarInitLate.ts +0 -36
  19. package/callbacks/postFamiliarStateChanged.ts +0 -43
  20. package/callbacks/postFlip.ts +0 -90
  21. package/callbacks/postGreedModeWave.ts +0 -41
  22. package/callbacks/postGridEntity.ts +0 -164
  23. package/callbacks/postGridEntityCollision.ts +0 -69
  24. package/callbacks/postGridEntityRender.ts +0 -26
  25. package/callbacks/postHolyMantleRemoved.ts +0 -55
  26. package/callbacks/postItemDischarged.ts +0 -154
  27. package/callbacks/postKnifeInitLate.ts +0 -36
  28. package/callbacks/postLaserInitLate.ts +0 -36
  29. package/callbacks/postNPCInitLate.ts +0 -36
  30. package/callbacks/postNPCStateChanged.ts +0 -42
  31. package/callbacks/postNewRoomEarly.ts +0 -96
  32. package/callbacks/postPickupCollect.ts +0 -48
  33. package/callbacks/postPickupInitFirst.ts +0 -70
  34. package/callbacks/postPickupInitLate.ts +0 -36
  35. package/callbacks/postPickupStateChanged.ts +0 -43
  36. package/callbacks/postPitRender.ts +0 -26
  37. package/callbacks/postPitUpdate.ts +0 -26
  38. package/callbacks/postPlayerChangeHealth.ts +0 -62
  39. package/callbacks/postPlayerChangeType.ts +0 -56
  40. package/callbacks/postPlayerCollectible.ts +0 -113
  41. package/callbacks/postPlayerFatalDamage.ts +0 -141
  42. package/callbacks/postPlayerInitLate.ts +0 -37
  43. package/callbacks/postPlayerReordered.ts +0 -142
  44. package/callbacks/postPoopRender.ts +0 -26
  45. package/callbacks/postPoopUpdate.ts +0 -26
  46. package/callbacks/postPressurePlateRender.ts +0 -26
  47. package/callbacks/postPressurePlateUpdate.ts +0 -26
  48. package/callbacks/postProjectileInitLate.ts +0 -36
  49. package/callbacks/postPurchase.ts +0 -64
  50. package/callbacks/postRockRender.ts +0 -26
  51. package/callbacks/postRockUpdate.ts +0 -26
  52. package/callbacks/postRoomClearChanged.ts +0 -57
  53. package/callbacks/postSacrifice.ts +0 -64
  54. package/callbacks/postSlotDestroyed.ts +0 -92
  55. package/callbacks/postSlotInitUpdate.ts +0 -68
  56. package/callbacks/postSlotRender.ts +0 -69
  57. package/callbacks/postSpikesRender.ts +0 -26
  58. package/callbacks/postSpikesUpdate.ts +0 -26
  59. package/callbacks/postTNTRender.ts +0 -26
  60. package/callbacks/postTNTUpdate.ts +0 -26
  61. package/callbacks/postTearInitLate.ts +0 -36
  62. package/callbacks/postTearInitVeryLate.ts +0 -41
  63. package/callbacks/postTransformation.ts +0 -59
  64. package/callbacks/postTrinketBreak.ts +0 -112
  65. package/callbacks/preBerserkDeath.ts +0 -49
  66. package/callbacks/preNewLevel.ts +0 -55
  67. package/callbacks/reorderedCallbacks.ts +0 -168
  68. package/callbacks/subscriptions/postAmbushFinished.ts +0 -32
  69. package/callbacks/subscriptions/postAmbushStarted.ts +0 -32
  70. package/callbacks/subscriptions/postBombInitLate.ts +0 -32
  71. package/callbacks/subscriptions/postBoneExploded.ts +0 -32
  72. package/callbacks/subscriptions/postBoneSwing.ts +0 -24
  73. package/callbacks/subscriptions/postCollectibleInitFirst.ts +0 -37
  74. package/callbacks/subscriptions/postCursedTeleport.ts +0 -24
  75. package/callbacks/subscriptions/postCustomDoorEnter.ts +0 -45
  76. package/callbacks/subscriptions/postCustomRevive.ts +0 -36
  77. package/callbacks/subscriptions/postDiceRoomActivated.ts +0 -38
  78. package/callbacks/subscriptions/postDoorRender.ts +0 -35
  79. package/callbacks/subscriptions/postDoorUpdate.ts +0 -35
  80. package/callbacks/subscriptions/postEffectInitLate.ts +0 -32
  81. package/callbacks/subscriptions/postEffectStateChanged.ts +0 -40
  82. package/callbacks/subscriptions/postEsauJr.ts +0 -24
  83. package/callbacks/subscriptions/postFamiliarInitLate.ts +0 -32
  84. package/callbacks/subscriptions/postFamiliarStateChanged.ts +0 -40
  85. package/callbacks/subscriptions/postFirstEsauJr.ts +0 -24
  86. package/callbacks/subscriptions/postFirstFlip.ts +0 -24
  87. package/callbacks/subscriptions/postFlip.ts +0 -22
  88. package/callbacks/subscriptions/postGameStartedReordered.ts +0 -24
  89. package/callbacks/subscriptions/postGreedModeWave.ts +0 -24
  90. package/callbacks/subscriptions/postGridEntityBroken.ts +0 -51
  91. package/callbacks/subscriptions/postGridEntityCollision.ts +0 -54
  92. package/callbacks/subscriptions/postGridEntityInit.ts +0 -51
  93. package/callbacks/subscriptions/postGridEntityRemove.ts +0 -52
  94. package/callbacks/subscriptions/postGridEntityRender.ts +0 -51
  95. package/callbacks/subscriptions/postGridEntityStateChanged.ts +0 -55
  96. package/callbacks/subscriptions/postGridEntityUpdate.ts +0 -51
  97. package/callbacks/subscriptions/postHolyMantleRemoved.ts +0 -48
  98. package/callbacks/subscriptions/postItemDischarged.ts +0 -43
  99. package/callbacks/subscriptions/postItemPickup.ts +0 -64
  100. package/callbacks/subscriptions/postKnifeInitLate.ts +0 -32
  101. package/callbacks/subscriptions/postLaserInitLate.ts +0 -32
  102. package/callbacks/subscriptions/postNPCInitLate.ts +0 -32
  103. package/callbacks/subscriptions/postNPCStateChanged.ts +0 -42
  104. package/callbacks/subscriptions/postNewLevelReordered.ts +0 -22
  105. package/callbacks/subscriptions/postNewRoomEarly.ts +0 -22
  106. package/callbacks/subscriptions/postNewRoomReordered.ts +0 -22
  107. package/callbacks/subscriptions/postPEffectUpdateReordered.ts +0 -40
  108. package/callbacks/subscriptions/postPickupCollect.ts +0 -35
  109. package/callbacks/subscriptions/postPickupInitFirst.ts +0 -32
  110. package/callbacks/subscriptions/postPickupInitLate.ts +0 -32
  111. package/callbacks/subscriptions/postPickupStateChanged.ts +0 -40
  112. package/callbacks/subscriptions/postPitRender.ts +0 -35
  113. package/callbacks/subscriptions/postPitUpdate.ts +0 -35
  114. package/callbacks/subscriptions/postPlayerChangeHealth.ts +0 -49
  115. package/callbacks/subscriptions/postPlayerChangeType.ts +0 -40
  116. package/callbacks/subscriptions/postPlayerCollectibleAdded.ts +0 -38
  117. package/callbacks/subscriptions/postPlayerCollectibleRemoved.ts +0 -38
  118. package/callbacks/subscriptions/postPlayerFatalDamage.ts +0 -68
  119. package/callbacks/subscriptions/postPlayerInitLate.ts +0 -40
  120. package/callbacks/subscriptions/postPlayerInitReordered.ts +0 -40
  121. package/callbacks/subscriptions/postPlayerRenderReordered.ts +0 -40
  122. package/callbacks/subscriptions/postPlayerUpdateReordered.ts +0 -40
  123. package/callbacks/subscriptions/postPoopRender.ts +0 -35
  124. package/callbacks/subscriptions/postPoopUpdate.ts +0 -35
  125. package/callbacks/subscriptions/postPressurePlateRender.ts +0 -37
  126. package/callbacks/subscriptions/postPressurePlateUpdate.ts +0 -37
  127. package/callbacks/subscriptions/postProjectileInitLate.ts +0 -35
  128. package/callbacks/subscriptions/postPurchase.ts +0 -31
  129. package/callbacks/subscriptions/postRockRender.ts +0 -35
  130. package/callbacks/subscriptions/postRockUpdate.ts +0 -35
  131. package/callbacks/subscriptions/postRoomClearChanged.ts +0 -30
  132. package/callbacks/subscriptions/postSacrifice.ts +0 -43
  133. package/callbacks/subscriptions/postSlotAnimationChanged.ts +0 -40
  134. package/callbacks/subscriptions/postSlotDestroyed.ts +0 -55
  135. package/callbacks/subscriptions/postSlotInit.ts +0 -32
  136. package/callbacks/subscriptions/postSlotRender.ts +0 -32
  137. package/callbacks/subscriptions/postSlotUpdate.ts +0 -32
  138. package/callbacks/subscriptions/postSpikesRender.ts +0 -35
  139. package/callbacks/subscriptions/postSpikesUpdate.ts +0 -35
  140. package/callbacks/subscriptions/postTNTRender.ts +0 -35
  141. package/callbacks/subscriptions/postTNTUpdate.ts +0 -35
  142. package/callbacks/subscriptions/postTearInitLate.ts +0 -32
  143. package/callbacks/subscriptions/postTearInitVeryLate.ts +0 -32
  144. package/callbacks/subscriptions/postTransformation.ts +0 -40
  145. package/callbacks/subscriptions/postTrinketBreak.ts +0 -38
  146. package/callbacks/subscriptions/preBerserkDeath.ts +0 -42
  147. package/callbacks/subscriptions/preCustomRevive.ts +0 -46
  148. package/callbacks/subscriptions/preItemPickup.ts +0 -64
  149. package/callbacks/subscriptions/preNewLevel.ts +0 -24
  150. package/classes/DefaultMap.ts +0 -174
  151. package/classes/ModUpgraded.ts +0 -84
  152. package/constants.ts +0 -162
  153. package/constantsFirstLast.ts +0 -217
  154. package/enums/AmbushType.ts +0 -4
  155. package/enums/HealthType.ts +0 -16
  156. package/enums/ModCallbackCustom.ts +0 -1278
  157. package/enums/PocketItemType.ts +0 -8
  158. package/enums/SerializationType.ts +0 -5
  159. package/enums/SlotDestructionType.ts +0 -4
  160. package/enums/private/CopyableIsaacAPIClassType.ts +0 -7
  161. package/enums/private/SaveDataKey.ts +0 -14
  162. package/enums/private/SerializationBrand.ts +0 -42
  163. package/features/characterHealthConversion.ts +0 -111
  164. package/features/characterStats.ts +0 -61
  165. package/features/debugDisplay/debugDisplay.ts +0 -221
  166. package/features/debugDisplay/exports.ts +0 -368
  167. package/features/debugDisplay/v.ts +0 -65
  168. package/features/deployJSONRoom.ts +0 -743
  169. package/features/disableInputs.ts +0 -193
  170. package/features/disableSound.ts +0 -77
  171. package/features/extraConsoleCommands/commandsDisplay.ts +0 -290
  172. package/features/extraConsoleCommands/commandsSubroutines.ts +0 -139
  173. package/features/extraConsoleCommands/init.ts +0 -334
  174. package/features/extraConsoleCommands/listCommands.ts +0 -1299
  175. package/features/extraConsoleCommands/v.ts +0 -14
  176. package/features/fadeInRemover.ts +0 -60
  177. package/features/fastReset.ts +0 -75
  178. package/features/forgottenSwitch.ts +0 -50
  179. package/features/getCollectibleItemPoolType.ts +0 -66
  180. package/features/persistentEntities.ts +0 -183
  181. package/features/playerInventory.ts +0 -135
  182. package/features/ponyDetection.ts +0 -74
  183. package/features/preventCollectibleRotation.ts +0 -115
  184. package/features/runInNFrames.ts +0 -148
  185. package/features/saveDataManager/constants.ts +0 -4
  186. package/features/saveDataManager/exports.ts +0 -229
  187. package/features/saveDataManager/load.ts +0 -99
  188. package/features/saveDataManager/main.ts +0 -195
  189. package/features/saveDataManager/maps.ts +0 -13
  190. package/features/saveDataManager/merge.ts +0 -194
  191. package/features/saveDataManager/save.ts +0 -74
  192. package/features/saveDataManager/serializationBrand.ts +0 -16
  193. package/features/sirenHelpers.ts +0 -129
  194. package/features/taintedLazarusPlayers.ts +0 -113
  195. package/featuresInitialized.ts +0 -20
  196. package/functions/ambush.ts +0 -47
  197. package/functions/array.ts +0 -410
  198. package/functions/benchmark.ts +0 -36
  199. package/functions/bitwise.ts +0 -24
  200. package/functions/bombs.ts +0 -12
  201. package/functions/boss.ts +0 -227
  202. package/functions/cacheFlag.ts +0 -12
  203. package/functions/cards.ts +0 -271
  204. package/functions/challenges.ts +0 -13
  205. package/functions/character.ts +0 -126
  206. package/functions/charge.ts +0 -237
  207. package/functions/chargeBar.ts +0 -67
  208. package/functions/collectibleCacheFlag.ts +0 -90
  209. package/functions/collectibleSet.ts +0 -56
  210. package/functions/collectibleTag.ts +0 -89
  211. package/functions/collectibles.ts +0 -659
  212. package/functions/color.ts +0 -128
  213. package/functions/debug.ts +0 -68
  214. package/functions/deepCopy.ts +0 -535
  215. package/functions/deepCopyTests.ts +0 -386
  216. package/functions/direction.ts +0 -49
  217. package/functions/doors.ts +0 -347
  218. package/functions/easing.ts +0 -182
  219. package/functions/eden.ts +0 -47
  220. package/functions/effects.ts +0 -20
  221. package/functions/entity.ts +0 -439
  222. package/functions/entitySpecific.ts +0 -889
  223. package/functions/entityTypes.ts +0 -6
  224. package/functions/enums.ts +0 -146
  225. package/functions/familiars.ts +0 -106
  226. package/functions/flag.ts +0 -165
  227. package/functions/flying.ts +0 -117
  228. package/functions/globals.ts +0 -242
  229. package/functions/gridEntity.ts +0 -511
  230. package/functions/gridEntitySpecific.ts +0 -112
  231. package/functions/input.ts +0 -139
  232. package/functions/isaacAPIClass.ts +0 -67
  233. package/functions/jsonHelpers.ts +0 -45
  234. package/functions/jsonRoom.ts +0 -100
  235. package/functions/kColor.ts +0 -129
  236. package/functions/language.ts +0 -13
  237. package/functions/level.ts +0 -31
  238. package/functions/log.ts +0 -720
  239. package/functions/map.ts +0 -56
  240. package/functions/math.ts +0 -149
  241. package/functions/mergeTests.ts +0 -288
  242. package/functions/npc.ts +0 -148
  243. package/functions/pickupVariants.ts +0 -60
  244. package/functions/pickups.ts +0 -499
  245. package/functions/pills.ts +0 -205
  246. package/functions/player.ts +0 -1056
  247. package/functions/playerDataStructures.ts +0 -150
  248. package/functions/playerHealth.ts +0 -382
  249. package/functions/playerIndex.ts +0 -195
  250. package/functions/pocketItems.ts +0 -149
  251. package/functions/positionVelocity.ts +0 -188
  252. package/functions/random.ts +0 -77
  253. package/functions/revive.ts +0 -201
  254. package/functions/rng.ts +0 -172
  255. package/functions/roomData.ts +0 -199
  256. package/functions/roomGrid.ts +0 -109
  257. package/functions/roomShape.ts +0 -80
  258. package/functions/rooms.ts +0 -648
  259. package/functions/run.ts +0 -36
  260. package/functions/saveFile.ts +0 -128
  261. package/functions/seeds.ts +0 -19
  262. package/functions/serialization.ts +0 -91
  263. package/functions/set.ts +0 -95
  264. package/functions/sound.ts +0 -9
  265. package/functions/spawnCollectible.ts +0 -104
  266. package/functions/sprite.ts +0 -107
  267. package/functions/stage.ts +0 -125
  268. package/functions/string.ts +0 -47
  269. package/functions/table.ts +0 -189
  270. package/functions/tears.ts +0 -32
  271. package/functions/transformations.ts +0 -131
  272. package/functions/trinketCacheFlag.ts +0 -60
  273. package/functions/trinketGive.ts +0 -157
  274. package/functions/trinkets.ts +0 -215
  275. package/functions/tstlClass.ts +0 -157
  276. package/functions/types.ts +0 -36
  277. package/functions/ui.ts +0 -138
  278. package/functions/utils.ts +0 -189
  279. package/functions/vector.ts +0 -126
  280. package/index.ts +0 -172
  281. package/initCustomCallbacks.ts +0 -132
  282. package/initFeatures.ts +0 -39
  283. package/interfaces/AddCallbackParameterCustom.ts +0 -188
  284. package/interfaces/ChargeBarSprites.ts +0 -12
  285. package/interfaces/JSONDoor.ts +0 -13
  286. package/interfaces/JSONEntity.ts +0 -16
  287. package/interfaces/JSONRoom.ts +0 -36
  288. package/interfaces/JSONRooms.ts +0 -12
  289. package/interfaces/JSONSpawn.ts +0 -14
  290. package/interfaces/PlayerHealth.ts +0 -16
  291. package/interfaces/PocketItemDescription.ts +0 -9
  292. package/interfaces/SaveData.ts +0 -29
  293. package/interfaces/TrinketSituation.ts +0 -9
  294. package/interfaces/private/TSTLClassMetatable.ts +0 -8
  295. package/maps/PHDPillConversions.ts +0 -21
  296. package/maps/cardMap.ts +0 -209
  297. package/maps/characterMap.ts +0 -87
  298. package/maps/collectibleDescriptionMap.ts +0 -732
  299. package/maps/collectibleNameMap.ts +0 -731
  300. package/maps/defaultPlayerStatMap.ts +0 -17
  301. package/maps/falsePHDPillConversions.ts +0 -35
  302. package/maps/gridEntityTypeToBrokenStateMap.ts +0 -50
  303. package/maps/gridEntityXMLMap.ts +0 -176
  304. package/maps/pillEffectMap.ts +0 -88
  305. package/maps/roomShapeToTopLeftWallGridIndexMap.ts +0 -18
  306. package/maps/roomTypeMap.ts +0 -40
  307. package/maps/trinketDescriptionMap.ts +0 -200
  308. package/maps/trinketNameMap.ts +0 -198
  309. package/objects/LRoomShapeToRectangles.ts +0 -44
  310. package/objects/callbackRegisterFunctions.ts +0 -187
  311. package/objects/cardDescriptions.ts +0 -105
  312. package/objects/cardNames.ts +0 -105
  313. package/objects/cardTypes.ts +0 -104
  314. package/objects/challengeNames.ts +0 -52
  315. package/objects/characterNames.ts +0 -48
  316. package/objects/coinSubTypeToValue.ts +0 -14
  317. package/objects/colors.ts +0 -16
  318. package/objects/directionNames.ts +0 -11
  319. package/objects/directionToDegrees.ts +0 -11
  320. package/objects/directionToVector.ts +0 -12
  321. package/objects/doorSlotFlagToDoorSlot.ts +0 -16
  322. package/objects/doorSlotToDirection.ts +0 -14
  323. package/objects/isaacAPIClassTypeToBrand.ts +0 -11
  324. package/objects/isaacAPIClassTypeToCopyFunction.ts +0 -18
  325. package/objects/languageNames.ts +0 -13
  326. package/objects/oppositeDoorSlots.ts +0 -15
  327. package/objects/pillEffectClasses.ts +0 -63
  328. package/objects/pillEffectNames.ts +0 -57
  329. package/objects/pillEffectTypes.ts +0 -62
  330. package/objects/roomShapeBounds.ts +0 -71
  331. package/objects/roomShapeLayoutSizes.ts +0 -45
  332. package/objects/roomShapeToBottomRightPosition.ts +0 -25
  333. package/objects/roomShapeToDoorSlots.ts +0 -83
  334. package/objects/roomShapeToDoorSlotsToGridIndexDelta.ts +0 -127
  335. package/objects/roomShapeToGridWidth.ts +0 -21
  336. package/objects/roomShapeToTopLeftPosition.ts +0 -26
  337. package/objects/roomShapeVolumes.ts +0 -38
  338. package/objects/roomTypeNames.ts +0 -36
  339. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.ts +0 -14
  340. package/objects/stageTypeToLetter.ts +0 -15
  341. package/objects/transformationNames.ts +0 -18
  342. package/patchErrorFunctions.ts +0 -92
  343. package/sets/LRoomShapesSet.ts +0 -8
  344. package/sets/bossSets.ts +0 -470
  345. package/sets/charactersThatStartWithAnActiveItemSet.ts +0 -16
  346. package/sets/charactersWithBlackHeartFromEternalHeartSet.ts +0 -7
  347. package/sets/charactersWithFreeDevilDealsSet.ts +0 -4
  348. package/sets/charactersWithNoRedHeartsSet.ts +0 -17
  349. package/sets/charactersWithNoSoulHeartsSet.ts +0 -14
  350. package/sets/chestPickupVariantsSet.ts +0 -16
  351. package/sets/familiarsThatShootPlayerTearsSet.ts +0 -13
  352. package/sets/lostStyleCharactersSet.ts +0 -13
  353. package/sets/mineShaftRoomSubTypesSet.ts +0 -10
  354. package/sets/redHeartSubTypesSet.ts +0 -7
  355. package/sets/sinEntityTypesSet.ts +0 -11
  356. package/sets/singleUseActiveCollectibleTypesSet.ts +0 -13
  357. package/sets/storyBossesSet.ts +0 -17
  358. package/types/AnyEntity.ts +0 -12
  359. package/types/AwaitingTextInput.d.ts +0 -2
  360. package/types/CollectibleIndex.ts +0 -16
  361. package/types/PickingUpItem.ts +0 -89
  362. package/types/PlayerIndex.ts +0 -13
  363. package/types/private/IsaacAPIClass.ts +0 -3
  364. package/types/private/SerializedIsaacAPIClass.ts +0 -3
  365. package/types/private/TSTLClass.ts +0 -3
  366. 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
- }