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.
- package/cachedClasses.d.ts +1 -0
- package/cachedClasses.js +59 -0
- package/cachedClasses.lua +2 -0
- package/callbacks/customRevive.js +153 -0
- package/callbacks/customRevive.lua +2 -0
- package/callbacks/itemPickup.js +64 -0
- package/callbacks/itemPickup.lua +2 -0
- package/callbacks/postAmbush.js +54 -0
- package/callbacks/postAmbush.lua +2 -0
- package/callbacks/postBombExploded.js +20 -0
- package/callbacks/postBombExploded.lua +2 -0
- package/callbacks/postBombInitLate.js +28 -0
- package/callbacks/postBombInitLate.lua +2 -0
- package/callbacks/postBoneSwing.js +49 -0
- package/callbacks/postBoneSwing.lua +2 -0
- package/callbacks/postCollectibleEmpty.js +32 -0
- package/callbacks/postCollectibleEmpty.lua +2 -0
- package/callbacks/postCollectibleInitFirst.js +27 -0
- package/callbacks/postCollectibleInitFirst.lua +2 -0
- package/callbacks/postCursedTeleport.js +120 -0
- package/callbacks/postCursedTeleport.lua +2 -0
- package/callbacks/postCustomDoorEnter.js +205 -0
- package/callbacks/postCustomDoorEnter.lua +2 -0
- package/callbacks/postDiceRoomActivated.js +39 -0
- package/callbacks/postDiceRoomActivated.lua +2 -0
- package/callbacks/postDoorRender.js +20 -0
- package/callbacks/postDoorRender.lua +2 -0
- package/callbacks/postDoorUpdate.js +20 -0
- package/callbacks/postDoorUpdate.lua +2 -0
- package/callbacks/postEffectInitLate.js +28 -0
- package/callbacks/postEffectInitLate.lua +2 -0
- package/callbacks/postEffectStateChanged.js +31 -0
- package/callbacks/postEffectStateChanged.lua +2 -0
- package/callbacks/postEsauJr.js +70 -0
- package/callbacks/postEsauJr.lua +2 -0
- package/callbacks/postFamiliarInitLate.js +28 -0
- package/callbacks/postFamiliarInitLate.lua +2 -0
- package/callbacks/postFamiliarStateChanged.js +31 -0
- package/callbacks/postFamiliarStateChanged.lua +2 -0
- package/callbacks/postFlip.js +59 -0
- package/callbacks/postFlip.lua +2 -0
- package/callbacks/postGreedModeWave.js +31 -0
- package/callbacks/postGreedModeWave.lua +2 -0
- package/callbacks/postGridEntity.js +107 -0
- package/callbacks/postGridEntity.lua +2 -0
- package/callbacks/postGridEntityCollision.js +49 -0
- package/callbacks/postGridEntityCollision.lua +2 -0
- package/callbacks/postGridEntityRender.js +20 -0
- package/callbacks/postGridEntityRender.lua +2 -0
- package/callbacks/postHolyMantleRemoved.js +33 -0
- package/callbacks/postHolyMantleRemoved.lua +2 -0
- package/callbacks/postItemDischarged.js +94 -0
- package/callbacks/postItemDischarged.lua +2 -0
- package/callbacks/postKnifeInitLate.js +28 -0
- package/callbacks/postKnifeInitLate.lua +2 -0
- package/callbacks/postLaserInitLate.js +28 -0
- package/callbacks/postLaserInitLate.lua +2 -0
- package/callbacks/postNPCInitLate.js +28 -0
- package/callbacks/postNPCInitLate.lua +2 -0
- package/callbacks/postNPCStateChanged.js +31 -0
- package/callbacks/postNPCStateChanged.lua +2 -0
- package/callbacks/postNewRoomEarly.js +69 -0
- package/callbacks/postNewRoomEarly.lua +2 -0
- package/callbacks/postPickupCollect.js +37 -0
- package/callbacks/postPickupCollect.lua +2 -0
- package/callbacks/postPickupInitFirst.js +52 -0
- package/callbacks/postPickupInitFirst.lua +2 -0
- package/callbacks/postPickupInitLate.js +28 -0
- package/callbacks/postPickupInitLate.lua +2 -0
- package/callbacks/postPickupStateChanged.js +31 -0
- package/callbacks/postPickupStateChanged.lua +2 -0
- package/callbacks/postPitRender.js +20 -0
- package/callbacks/postPitRender.lua +2 -0
- package/callbacks/postPitUpdate.js +20 -0
- package/callbacks/postPitUpdate.lua +2 -0
- package/callbacks/postPlayerChangeHealth.js +43 -0
- package/callbacks/postPlayerChangeHealth.lua +2 -0
- package/callbacks/postPlayerChangeType.js +31 -0
- package/callbacks/postPlayerChangeType.lua +2 -0
- package/callbacks/postPlayerCollectible.js +74 -0
- package/callbacks/postPlayerCollectible.lua +2 -0
- package/callbacks/postPlayerFatalDamage.js +74 -0
- package/callbacks/postPlayerFatalDamage.lua +2 -0
- package/callbacks/postPlayerInitLate.js +28 -0
- package/callbacks/postPlayerInitLate.lua +2 -0
- package/callbacks/postPlayerReordered.js +109 -0
- package/callbacks/postPlayerReordered.lua +2 -0
- package/callbacks/postPoopRender.js +20 -0
- package/callbacks/postPoopRender.lua +2 -0
- package/callbacks/postPoopUpdate.js +20 -0
- package/callbacks/postPoopUpdate.lua +2 -0
- package/callbacks/postPressurePlateRender.js +20 -0
- package/callbacks/postPressurePlateRender.lua +2 -0
- package/callbacks/postPressurePlateUpdate.js +20 -0
- package/callbacks/postPressurePlateUpdate.lua +2 -0
- package/callbacks/postProjectileInitLate.js +28 -0
- package/callbacks/postProjectileInitLate.lua +2 -0
- package/callbacks/postPurchase.js +39 -0
- package/callbacks/postPurchase.lua +2 -0
- package/callbacks/postRockRender.js +20 -0
- package/callbacks/postRockRender.lua +2 -0
- package/callbacks/postRockUpdate.js +20 -0
- package/callbacks/postRockUpdate.lua +2 -0
- package/callbacks/postRoomClearChanged.js +41 -0
- package/callbacks/postRoomClearChanged.lua +2 -0
- package/callbacks/postSacrifice.js +38 -0
- package/callbacks/postSacrifice.lua +2 -0
- package/callbacks/postSlotDestroyed.js +64 -0
- package/callbacks/postSlotDestroyed.lua +2 -0
- package/callbacks/postSlotInitUpdate.js +49 -0
- package/callbacks/postSlotInitUpdate.lua +2 -0
- package/callbacks/postSlotRender.js +48 -0
- package/callbacks/postSlotRender.lua +2 -0
- package/callbacks/postSpikesRender.js +20 -0
- package/callbacks/postSpikesRender.lua +2 -0
- package/callbacks/postSpikesUpdate.js +20 -0
- package/callbacks/postSpikesUpdate.lua +2 -0
- package/callbacks/postTNTRender.js +20 -0
- package/callbacks/postTNTRender.lua +2 -0
- package/callbacks/postTNTUpdate.js +20 -0
- package/callbacks/postTNTUpdate.lua +2 -0
- package/callbacks/postTearInitLate.js +28 -0
- package/callbacks/postTearInitLate.lua +2 -0
- package/callbacks/postTearInitVeryLate.js +32 -0
- package/callbacks/postTearInitVeryLate.lua +2 -0
- package/callbacks/postTransformation.js +37 -0
- package/callbacks/postTransformation.lua +2 -0
- package/callbacks/postTrinketBreak.js +64 -0
- package/callbacks/postTrinketBreak.lua +2 -0
- package/callbacks/preBerserkDeath.js +35 -0
- package/callbacks/preBerserkDeath.lua +2 -0
- package/callbacks/preNewLevel.js +45 -0
- package/callbacks/preNewLevel.lua +2 -0
- package/callbacks/reorderedCallbacks.js +136 -0
- package/callbacks/reorderedCallbacks.lua +2 -0
- package/callbacks/subscriptions/postAmbushFinished.js +20 -0
- package/callbacks/subscriptions/postAmbushFinished.lua +2 -0
- package/callbacks/subscriptions/postAmbushStarted.js +20 -0
- package/callbacks/subscriptions/postAmbushStarted.lua +2 -0
- package/callbacks/subscriptions/postBombInitLate.js +20 -0
- package/callbacks/subscriptions/postBombInitLate.lua +2 -0
- package/callbacks/subscriptions/postBoneExploded.js +20 -0
- package/callbacks/subscriptions/postBoneExploded.lua +2 -0
- package/callbacks/subscriptions/postBoneSwing.js +16 -0
- package/callbacks/subscriptions/postBoneSwing.lua +2 -0
- package/callbacks/subscriptions/postCollectibleEmpty.js +21 -0
- package/callbacks/subscriptions/postCollectibleEmpty.lua +2 -0
- package/callbacks/subscriptions/postCollectibleInitFirst.js +21 -0
- package/callbacks/subscriptions/postCollectibleInitFirst.lua +2 -0
- package/callbacks/subscriptions/postCursedTeleport.js +16 -0
- package/callbacks/subscriptions/postCursedTeleport.lua +2 -0
- package/callbacks/subscriptions/postCustomDoorEnter.js +21 -0
- package/callbacks/subscriptions/postCustomDoorEnter.lua +2 -0
- package/callbacks/subscriptions/postCustomRevive.js +21 -0
- package/callbacks/subscriptions/postCustomRevive.lua +2 -0
- package/callbacks/subscriptions/postDiceRoomActivated.js +21 -0
- package/callbacks/subscriptions/postDiceRoomActivated.lua +2 -0
- package/callbacks/subscriptions/postDoorRender.js +22 -0
- package/callbacks/subscriptions/postDoorRender.lua +2 -0
- package/callbacks/subscriptions/postDoorUpdate.js +22 -0
- package/callbacks/subscriptions/postDoorUpdate.lua +2 -0
- package/callbacks/subscriptions/postEffectInitLate.js +20 -0
- package/callbacks/subscriptions/postEffectInitLate.lua +2 -0
- package/callbacks/subscriptions/postEffectStateChanged.js +20 -0
- package/callbacks/subscriptions/postEffectStateChanged.lua +2 -0
- package/callbacks/subscriptions/postEsauJr.js +16 -0
- package/callbacks/subscriptions/postEsauJr.lua +2 -0
- package/callbacks/subscriptions/postFamiliarInitLate.js +20 -0
- package/callbacks/subscriptions/postFamiliarInitLate.lua +2 -0
- package/callbacks/subscriptions/postFamiliarStateChanged.js +20 -0
- package/callbacks/subscriptions/postFamiliarStateChanged.lua +2 -0
- package/callbacks/subscriptions/postFirstEsauJr.js +16 -0
- package/callbacks/subscriptions/postFirstEsauJr.lua +2 -0
- package/callbacks/subscriptions/postFirstFlip.js +16 -0
- package/callbacks/subscriptions/postFirstFlip.lua +2 -0
- package/callbacks/subscriptions/postFlip.js +16 -0
- package/callbacks/subscriptions/postFlip.lua +2 -0
- package/callbacks/subscriptions/postGameStartedReordered.js +16 -0
- package/callbacks/subscriptions/postGameStartedReordered.lua +2 -0
- package/callbacks/subscriptions/postGreedModeWave.js +16 -0
- package/callbacks/subscriptions/postGreedModeWave.lua +2 -0
- package/callbacks/subscriptions/postGridEntityBroken.js +28 -0
- package/callbacks/subscriptions/postGridEntityBroken.lua +2 -0
- package/callbacks/subscriptions/postGridEntityCollision.js +28 -0
- package/callbacks/subscriptions/postGridEntityCollision.lua +2 -0
- package/callbacks/subscriptions/postGridEntityInit.js +28 -0
- package/callbacks/subscriptions/postGridEntityInit.lua +2 -0
- package/callbacks/subscriptions/postGridEntityRemove.js +26 -0
- package/callbacks/subscriptions/postGridEntityRemove.lua +2 -0
- package/callbacks/subscriptions/postGridEntityRender.js +28 -0
- package/callbacks/subscriptions/postGridEntityRender.lua +2 -0
- package/callbacks/subscriptions/postGridEntityStateChanged.js +28 -0
- package/callbacks/subscriptions/postGridEntityStateChanged.lua +2 -0
- package/callbacks/subscriptions/postGridEntityUpdate.js +28 -0
- package/callbacks/subscriptions/postGridEntityUpdate.lua +2 -0
- package/callbacks/subscriptions/postHolyMantleRemoved.js +25 -0
- package/callbacks/subscriptions/postHolyMantleRemoved.lua +2 -0
- package/callbacks/subscriptions/postItemDischarged.js +21 -0
- package/callbacks/subscriptions/postItemDischarged.lua +2 -0
- package/callbacks/subscriptions/postItemPickup.js +25 -0
- package/callbacks/subscriptions/postItemPickup.lua +2 -0
- package/callbacks/subscriptions/postKnifeInitLate.js +20 -0
- package/callbacks/subscriptions/postKnifeInitLate.lua +2 -0
- package/callbacks/subscriptions/postLaserInitLate.js +20 -0
- package/callbacks/subscriptions/postLaserInitLate.lua +2 -0
- package/callbacks/subscriptions/postNPCInitLate.js +20 -0
- package/callbacks/subscriptions/postNPCInitLate.lua +2 -0
- package/callbacks/subscriptions/postNPCStateChanged.js +24 -0
- package/callbacks/subscriptions/postNPCStateChanged.lua +2 -0
- package/callbacks/subscriptions/postNewLevelReordered.js +16 -0
- package/callbacks/subscriptions/postNewLevelReordered.lua +2 -0
- package/callbacks/subscriptions/postNewRoomEarly.js +16 -0
- package/callbacks/subscriptions/postNewRoomEarly.lua +2 -0
- package/callbacks/subscriptions/postNewRoomReordered.js +16 -0
- package/callbacks/subscriptions/postNewRoomReordered.lua +2 -0
- package/callbacks/subscriptions/postPEffectUpdateReordered.js +25 -0
- package/callbacks/subscriptions/postPEffectUpdateReordered.lua +2 -0
- package/callbacks/subscriptions/postPickupCollect.js +20 -0
- package/callbacks/subscriptions/postPickupCollect.lua +2 -0
- package/callbacks/subscriptions/postPickupInitFirst.js +20 -0
- package/callbacks/subscriptions/postPickupInitFirst.lua +2 -0
- package/callbacks/subscriptions/postPickupInitLate.js +20 -0
- package/callbacks/subscriptions/postPickupInitLate.lua +2 -0
- package/callbacks/subscriptions/postPickupStateChanged.js +20 -0
- package/callbacks/subscriptions/postPickupStateChanged.lua +2 -0
- package/callbacks/subscriptions/postPitRender.js +22 -0
- package/callbacks/subscriptions/postPitRender.lua +2 -0
- package/callbacks/subscriptions/postPitUpdate.js +22 -0
- package/callbacks/subscriptions/postPitUpdate.lua +2 -0
- package/callbacks/subscriptions/postPlayerChangeHealth.js +25 -0
- package/callbacks/subscriptions/postPlayerChangeHealth.lua +2 -0
- package/callbacks/subscriptions/postPlayerChangeType.js +20 -0
- package/callbacks/subscriptions/postPlayerChangeType.lua +2 -0
- package/callbacks/subscriptions/postPlayerCollectibleAdded.js +21 -0
- package/callbacks/subscriptions/postPlayerCollectibleAdded.lua +2 -0
- package/callbacks/subscriptions/postPlayerCollectibleRemoved.js +21 -0
- package/callbacks/subscriptions/postPlayerCollectibleRemoved.lua +2 -0
- package/callbacks/subscriptions/postPlayerFatalDamage.js +29 -0
- package/callbacks/subscriptions/postPlayerFatalDamage.lua +2 -0
- package/callbacks/subscriptions/postPlayerInitLate.js +25 -0
- package/callbacks/subscriptions/postPlayerInitLate.lua +2 -0
- package/callbacks/subscriptions/postPlayerInitReordered.js +25 -0
- package/callbacks/subscriptions/postPlayerInitReordered.lua +2 -0
- package/callbacks/subscriptions/postPlayerRenderReordered.js +25 -0
- package/callbacks/subscriptions/postPlayerRenderReordered.lua +2 -0
- package/callbacks/subscriptions/postPlayerUpdateReordered.js +25 -0
- package/callbacks/subscriptions/postPlayerUpdateReordered.lua +2 -0
- package/callbacks/subscriptions/postPoopRender.js +22 -0
- package/callbacks/subscriptions/postPoopRender.lua +2 -0
- package/callbacks/subscriptions/postPoopUpdate.js +22 -0
- package/callbacks/subscriptions/postPoopUpdate.lua +2 -0
- package/callbacks/subscriptions/postPressurePlateRender.js +22 -0
- package/callbacks/subscriptions/postPressurePlateRender.lua +2 -0
- package/callbacks/subscriptions/postPressurePlateUpdate.js +22 -0
- package/callbacks/subscriptions/postPressurePlateUpdate.lua +2 -0
- package/callbacks/subscriptions/postProjectileInitLate.js +21 -0
- package/callbacks/subscriptions/postProjectileInitLate.lua +2 -0
- package/callbacks/subscriptions/postPurchase.js +16 -0
- package/callbacks/subscriptions/postPurchase.lua +2 -0
- package/callbacks/subscriptions/postRockRender.js +22 -0
- package/callbacks/subscriptions/postRockRender.lua +2 -0
- package/callbacks/subscriptions/postRockUpdate.js +22 -0
- package/callbacks/subscriptions/postRockUpdate.lua +2 -0
- package/callbacks/subscriptions/postRoomClearChanged.js +20 -0
- package/callbacks/subscriptions/postRoomClearChanged.lua +2 -0
- package/callbacks/subscriptions/postSacrifice.js +25 -0
- package/callbacks/subscriptions/postSacrifice.lua +2 -0
- package/callbacks/subscriptions/postSlotAnimationChanged.js +20 -0
- package/callbacks/subscriptions/postSlotAnimationChanged.lua +2 -0
- package/callbacks/subscriptions/postSlotDestroyed.js +26 -0
- package/callbacks/subscriptions/postSlotDestroyed.lua +2 -0
- package/callbacks/subscriptions/postSlotInit.js +20 -0
- package/callbacks/subscriptions/postSlotInit.lua +2 -0
- package/callbacks/subscriptions/postSlotRender.js +20 -0
- package/callbacks/subscriptions/postSlotRender.lua +2 -0
- package/callbacks/subscriptions/postSlotUpdate.js +20 -0
- package/callbacks/subscriptions/postSlotUpdate.lua +2 -0
- package/callbacks/subscriptions/postSpikesRender.js +22 -0
- package/callbacks/subscriptions/postSpikesRender.lua +2 -0
- package/callbacks/subscriptions/postSpikesUpdate.js +22 -0
- package/callbacks/subscriptions/postSpikesUpdate.lua +2 -0
- package/callbacks/subscriptions/postTNTRender.js +22 -0
- package/callbacks/subscriptions/postTNTRender.lua +2 -0
- package/callbacks/subscriptions/postTNTUpdate.js +22 -0
- package/callbacks/subscriptions/postTNTUpdate.lua +2 -0
- package/callbacks/subscriptions/postTearInitLate.js +20 -0
- package/callbacks/subscriptions/postTearInitLate.lua +2 -0
- package/callbacks/subscriptions/postTearInitVeryLate.js +20 -0
- package/callbacks/subscriptions/postTearInitVeryLate.lua +2 -0
- package/callbacks/subscriptions/postTransformation.js +20 -0
- package/callbacks/subscriptions/postTransformation.lua +2 -0
- package/callbacks/subscriptions/postTrinketBreak.js +21 -0
- package/callbacks/subscriptions/postTrinketBreak.lua +2 -0
- package/callbacks/subscriptions/preBerserkDeath.js +26 -0
- package/callbacks/subscriptions/preBerserkDeath.lua +2 -0
- package/callbacks/subscriptions/preCustomRevive.js +29 -0
- package/callbacks/subscriptions/preCustomRevive.lua +2 -0
- package/callbacks/subscriptions/preItemPickup.js +25 -0
- package/callbacks/subscriptions/preItemPickup.lua +2 -0
- package/callbacks/subscriptions/preNewLevel.js +16 -0
- package/callbacks/subscriptions/preNewLevel.lua +2 -0
- package/classes/DefaultMap.js +145 -0
- package/classes/DefaultMap.lua +2 -0
- package/classes/ModUpgraded.js +57 -0
- package/classes/ModUpgraded.lua +2 -0
- package/constants.js +143 -0
- package/constants.lua +2 -0
- package/constantsFirstLast.js +156 -0
- package/constantsFirstLast.lua +2 -0
- package/enums/AmbushType.js +6 -0
- package/enums/AmbushType.lua +2 -0
- package/enums/CornerType.js +8 -0
- package/enums/CornerType.lua +2 -0
- package/enums/DecorationVariant.js +11 -0
- package/enums/DecorationVariant.lua +2 -0
- package/enums/HealthType.js +18 -0
- package/enums/HealthType.lua +2 -0
- package/enums/ModCallbackCustom.js +1213 -0
- package/enums/ModCallbackCustom.lua +2 -0
- package/enums/PocketItemType.js +10 -0
- package/enums/PocketItemType.lua +2 -0
- package/enums/RockAltType.js +9 -0
- package/enums/RockAltType.lua +2 -0
- package/enums/SerializationType.js +7 -0
- package/enums/SerializationType.lua +2 -0
- package/enums/SlotDestructionType.js +6 -0
- package/enums/SlotDestructionType.lua +2 -0
- package/enums/private/CopyableIsaacAPIClassType.js +9 -0
- package/enums/private/CopyableIsaacAPIClassType.lua +2 -0
- package/enums/private/SaveDataKey.js +8 -0
- package/enums/private/SaveDataKey.lua +2 -0
- package/enums/private/SerializationBrand.js +41 -0
- package/enums/private/SerializationBrand.lua +2 -0
- package/features/characterHealthConversion.js +86 -0
- package/features/characterHealthConversion.lua +2 -0
- package/features/characterStats.js +52 -0
- package/features/characterStats.lua +2 -0
- package/features/collectibleItemPoolType.js +45 -0
- package/features/collectibleItemPoolType.lua +2 -0
- package/features/customGridEntity.js +148 -0
- package/features/customGridEntity.lua +2 -0
- package/features/customStage/backdrop.js +191 -0
- package/features/customStage/backdrop.lua +9 -7
- package/features/customStage/customStageConstants.js +2 -0
- package/features/customStage/customStageConstants.lua +2 -0
- package/features/customStage/exports.js +147 -0
- package/features/customStage/exports.lua +8 -1
- package/features/customStage/gridEntities.js +138 -0
- package/features/customStage/gridEntities.lua +2 -0
- package/features/customStage/init.js +104 -0
- package/features/customStage/init.lua +4 -9
- package/features/customStage/metadata.json +1 -0
- package/features/customStage/metadata.lua +2 -0
- package/features/customStage/shadows.d.ts +0 -1
- package/features/customStage/shadows.js +63 -0
- package/features/customStage/shadows.lua +31 -19
- package/features/customStage/streakText.d.ts +1 -1
- package/features/customStage/streakText.js +35 -0
- package/features/customStage/streakText.lua +14 -3
- package/features/customStage/util.js +36 -0
- package/features/customStage/util.lua +2 -0
- package/features/customStage/v.js +18 -0
- package/features/customStage/v.lua +2 -0
- package/features/customStage/versusScreen.js +184 -0
- package/features/customStage/versusScreen.lua +8 -1
- package/features/debugDisplay/debugDisplay.js +183 -0
- package/features/debugDisplay/debugDisplay.lua +2 -0
- package/features/debugDisplay/exports.js +441 -0
- package/features/debugDisplay/exports.lua +2 -0
- package/features/debugDisplay/v.d.ts +18 -0
- package/features/debugDisplay/v.js +61 -0
- package/features/debugDisplay/v.lua +2 -0
- package/features/deployJSONRoom.js +532 -0
- package/features/deployJSONRoom.lua +2 -0
- package/features/disableAllSound.js +63 -0
- package/features/disableAllSound.lua +2 -0
- package/features/disableInputs.js +130 -0
- package/features/disableInputs.lua +2 -0
- package/features/extraConsoleCommands/commandsDisplay.js +236 -0
- package/features/extraConsoleCommands/commandsDisplay.lua +2 -0
- package/features/extraConsoleCommands/commandsSubroutines.js +109 -0
- package/features/extraConsoleCommands/commandsSubroutines.lua +2 -0
- package/features/extraConsoleCommands/exports.js +53 -0
- package/features/extraConsoleCommands/exports.lua +2 -0
- package/features/extraConsoleCommands/init.js +239 -0
- package/features/extraConsoleCommands/init.lua +2 -0
- package/features/extraConsoleCommands/listCommands.js +1081 -0
- package/features/extraConsoleCommands/listCommands.lua +2 -0
- package/features/extraConsoleCommands/v.js +25 -0
- package/features/extraConsoleCommands/v.lua +2 -0
- package/features/fadeInRemover.js +51 -0
- package/features/fadeInRemover.lua +2 -0
- package/features/fastReset.js +61 -0
- package/features/fastReset.lua +2 -0
- package/features/forgottenSwitch.js +33 -0
- package/features/forgottenSwitch.lua +2 -0
- package/features/pause.js +68 -0
- package/features/pause.lua +2 -0
- package/features/persistentEntities.js +120 -0
- package/features/persistentEntities.lua +2 -0
- package/features/playerInventory.js +89 -0
- package/features/playerInventory.lua +2 -0
- package/features/ponyDetection.js +63 -0
- package/features/ponyDetection.lua +2 -0
- package/features/preventCollectibleRotation.js +81 -0
- package/features/preventCollectibleRotation.lua +2 -0
- package/features/registerHotkey.js +91 -0
- package/features/registerHotkey.lua +2 -0
- package/features/roomClearFrame.js +42 -0
- package/features/roomClearFrame.lua +2 -0
- package/features/runInNFrames.js +189 -0
- package/features/runInNFrames.lua +2 -0
- package/features/runNextRoom.js +34 -0
- package/features/runNextRoom.lua +2 -0
- package/features/saveDataManager/exports.js +183 -0
- package/features/saveDataManager/exports.lua +2 -0
- package/features/saveDataManager/load.js +69 -0
- package/features/saveDataManager/load.lua +2 -0
- package/features/saveDataManager/main.js +131 -0
- package/features/saveDataManager/main.lua +2 -0
- package/features/saveDataManager/maps.js +9 -0
- package/features/saveDataManager/maps.lua +2 -0
- package/features/saveDataManager/merge.js +139 -0
- package/features/saveDataManager/merge.lua +2 -0
- package/features/saveDataManager/save.js +43 -0
- package/features/saveDataManager/save.lua +2 -0
- package/features/saveDataManager/saveDataManagerConstants.js +4 -0
- package/features/saveDataManager/saveDataManagerConstants.lua +2 -0
- package/features/saveDataManager/serializationBrand.js +12 -0
- package/features/saveDataManager/serializationBrand.lua +2 -0
- package/features/sirenHelpers.js +90 -0
- package/features/sirenHelpers.lua +2 -0
- package/features/stageHistory.js +43 -0
- package/features/stageHistory.lua +2 -0
- package/features/taintedLazarusPlayers.js +92 -0
- package/features/taintedLazarusPlayers.lua +2 -0
- package/featuresInitialized.js +16 -0
- package/featuresInitialized.lua +2 -0
- package/functions/ambush.js +35 -0
- package/functions/ambush.lua +2 -0
- package/functions/array.js +423 -0
- package/functions/array.lua +2 -0
- package/functions/benchmark.js +28 -0
- package/functions/benchmark.lua +2 -0
- package/functions/bitwise.js +74 -0
- package/functions/bitwise.lua +2 -0
- package/functions/bombs.js +11 -0
- package/functions/bombs.lua +2 -0
- package/functions/boss.js +137 -0
- package/functions/boss.lua +2 -0
- package/functions/cacheFlag.js +11 -0
- package/functions/cacheFlag.lua +2 -0
- package/functions/cards.js +217 -0
- package/functions/cards.lua +2 -0
- package/functions/challenges.js +9 -0
- package/functions/challenges.lua +2 -0
- package/functions/character.js +102 -0
- package/functions/character.lua +2 -0
- package/functions/charge.js +202 -0
- package/functions/charge.lua +2 -0
- package/functions/chargeBar.js +44 -0
- package/functions/chargeBar.lua +2 -0
- package/functions/collectibleCacheFlag.js +68 -0
- package/functions/collectibleCacheFlag.lua +2 -0
- package/functions/collectibleSet.js +108 -0
- package/functions/collectibleSet.lua +2 -0
- package/functions/collectibleTag.js +65 -0
- package/functions/collectibleTag.lua +2 -0
- package/functions/collectibles.js +469 -0
- package/functions/collectibles.lua +2 -0
- package/functions/color.d.ts +1 -1
- package/functions/color.js +60 -0
- package/functions/color.lua +2 -0
- package/functions/debug.js +60 -0
- package/functions/debug.lua +2 -0
- package/functions/deepCopy.js +361 -0
- package/functions/deepCopy.lua +2 -0
- package/functions/deepCopyTests.js +308 -0
- package/functions/deepCopyTests.lua +2 -0
- package/functions/direction.js +41 -0
- package/functions/direction.lua +2 -0
- package/functions/doors.js +326 -0
- package/functions/doors.lua +2 -0
- package/functions/easing.js +142 -0
- package/functions/easing.lua +2 -0
- package/functions/eden.js +32 -0
- package/functions/eden.lua +2 -0
- package/functions/effects.js +11 -0
- package/functions/effects.lua +2 -0
- package/functions/entity.js +324 -0
- package/functions/entity.lua +2 -0
- package/functions/entitySpecific.js +481 -0
- package/functions/entitySpecific.lua +2 -0
- package/functions/entityTypes.js +6 -0
- package/functions/entityTypes.lua +2 -0
- package/functions/enums.js +151 -0
- package/functions/enums.lua +2 -0
- package/functions/familiars.js +85 -0
- package/functions/familiars.lua +2 -0
- package/functions/flag.js +137 -0
- package/functions/flag.lua +2 -0
- package/functions/flying.js +88 -0
- package/functions/flying.lua +2 -0
- package/functions/globals.js +230 -0
- package/functions/globals.lua +2 -0
- package/functions/gridEntity.js +488 -0
- package/functions/gridEntity.lua +2 -0
- package/functions/gridEntitySpecific.js +109 -0
- package/functions/gridEntitySpecific.lua +2 -0
- package/functions/input.js +95 -0
- package/functions/input.lua +2 -0
- package/functions/isaacAPIClass.js +48 -0
- package/functions/isaacAPIClass.lua +2 -0
- package/functions/jsonHelpers.js +40 -0
- package/functions/jsonHelpers.lua +2 -0
- package/functions/jsonRoom.js +132 -0
- package/functions/jsonRoom.lua +2 -0
- package/functions/kColor.d.ts +1 -1
- package/functions/kColor.js +63 -0
- package/functions/kColor.lua +2 -0
- package/functions/language.js +13 -0
- package/functions/language.lua +2 -0
- package/functions/level.js +20 -0
- package/functions/level.lua +2 -0
- package/functions/log.js +567 -0
- package/functions/log.lua +2 -0
- package/functions/map.js +45 -0
- package/functions/map.lua +2 -0
- package/functions/math.js +103 -0
- package/functions/math.lua +2 -0
- package/functions/mergeTests.js +213 -0
- package/functions/mergeTests.lua +2 -0
- package/functions/minimap.js +80 -0
- package/functions/minimap.lua +2 -0
- package/functions/nextStage.js +290 -0
- package/functions/nextStage.lua +2 -0
- package/functions/npc.js +101 -0
- package/functions/npc.lua +2 -0
- package/functions/pickupVariants.js +47 -0
- package/functions/pickupVariants.lua +2 -0
- package/functions/pickups.js +219 -0
- package/functions/pickups.lua +2 -0
- package/functions/pills.js +160 -0
- package/functions/pills.lua +2 -0
- package/functions/player.js +808 -0
- package/functions/player.lua +2 -0
- package/functions/playerCenter.js +50 -0
- package/functions/playerCenter.lua +2 -0
- package/functions/playerDataStructures.js +114 -0
- package/functions/playerDataStructures.lua +2 -0
- package/functions/playerHealth.js +321 -0
- package/functions/playerHealth.lua +2 -0
- package/functions/playerIndex.js +160 -0
- package/functions/playerIndex.lua +2 -0
- package/functions/pocketItems.js +124 -0
- package/functions/pocketItems.lua +2 -0
- package/functions/positionVelocity.js +136 -0
- package/functions/positionVelocity.lua +2 -0
- package/functions/random.js +73 -0
- package/functions/random.lua +2 -0
- package/functions/revive.js +140 -0
- package/functions/revive.lua +2 -0
- package/functions/rng.d.ts +1 -1
- package/functions/rng.js +117 -0
- package/functions/rng.lua +2 -0
- package/functions/roomData.js +174 -0
- package/functions/roomData.lua +2 -0
- package/functions/roomGrid.js +81 -0
- package/functions/roomGrid.lua +2 -0
- package/functions/roomShape.js +99 -0
- package/functions/roomShape.lua +2 -0
- package/functions/rooms.js +487 -0
- package/functions/rooms.lua +2 -0
- package/functions/run.js +53 -0
- package/functions/run.lua +2 -0
- package/functions/saveFile.js +104 -0
- package/functions/saveFile.lua +2 -0
- package/functions/seeds.js +18 -0
- package/functions/seeds.lua +2 -0
- package/functions/serialization.js +52 -0
- package/functions/serialization.lua +2 -0
- package/functions/set.js +99 -0
- package/functions/set.lua +2 -0
- package/functions/sound.js +9 -0
- package/functions/sound.lua +2 -0
- package/functions/spawnCollectible.js +66 -0
- package/functions/spawnCollectible.lua +2 -0
- package/functions/sprite.js +80 -0
- package/functions/sprite.lua +2 -0
- package/functions/stage.js +172 -0
- package/functions/stage.lua +2 -0
- package/functions/string.js +37 -0
- package/functions/string.lua +2 -0
- package/functions/table.js +143 -0
- package/functions/table.lua +2 -0
- package/functions/tears.js +31 -0
- package/functions/tears.lua +2 -0
- package/functions/transformations.js +101 -0
- package/functions/transformations.lua +2 -0
- package/functions/trinketCacheFlag.js +46 -0
- package/functions/trinketCacheFlag.lua +2 -0
- package/functions/trinketGive.js +121 -0
- package/functions/trinketGive.lua +2 -0
- package/functions/trinkets.js +169 -0
- package/functions/trinkets.lua +2 -0
- package/functions/tstlClass.js +125 -0
- package/functions/tstlClass.lua +2 -0
- package/functions/types.js +27 -0
- package/functions/types.lua +2 -0
- package/functions/ui.js +124 -0
- package/functions/ui.lua +2 -0
- package/functions/utils.js +172 -0
- package/functions/utils.lua +2 -0
- package/functions/vector.js +68 -0
- package/functions/vector.lua +2 -0
- package/index.js +140 -0
- package/index.lua +2 -0
- package/initCustomCallbacks.js +133 -0
- package/initCustomCallbacks.lua +2 -0
- package/initFeatures.js +51 -0
- package/initFeatures.lua +2 -0
- package/interfaces/AddCallbackParameterCustom.js +2 -0
- package/interfaces/AddCallbackParameterCustom.lua +2 -0
- package/interfaces/ChargeBarSprites.js +2 -0
- package/interfaces/ChargeBarSprites.lua +2 -0
- package/interfaces/Corner.js +2 -0
- package/interfaces/Corner.lua +2 -0
- package/interfaces/CustomGridEntityData.js +2 -0
- package/interfaces/CustomGridEntityData.lua +2 -0
- package/interfaces/CustomStage.js +2 -0
- package/interfaces/CustomStage.lua +2 -0
- package/interfaces/CustomStageLua.d.ts +64 -24
- package/interfaces/CustomStageLua.js +13 -0
- package/interfaces/CustomStageLua.lua +2 -0
- package/interfaces/JSONRoomsFile.js +2 -0
- package/interfaces/JSONRoomsFile.lua +2 -0
- package/interfaces/PlayerHealth.js +2 -0
- package/interfaces/PlayerHealth.lua +2 -0
- package/interfaces/PocketItemDescription.js +2 -0
- package/interfaces/PocketItemDescription.lua +2 -0
- package/interfaces/SaveData.js +2 -0
- package/interfaces/SaveData.lua +2 -0
- package/interfaces/TrinketSituation.js +2 -0
- package/interfaces/TrinketSituation.lua +2 -0
- package/interfaces/private/TSTLClassMetatable.js +2 -0
- package/interfaces/private/TSTLClassMetatable.lua +2 -0
- package/maps/PHDPillConversions.js +20 -0
- package/maps/PHDPillConversions.lua +2 -0
- package/maps/cardMap.js +208 -0
- package/maps/cardMap.lua +2 -0
- package/maps/characterMap.js +86 -0
- package/maps/characterMap.lua +2 -0
- package/maps/collectibleDescriptionMap.js +728 -0
- package/maps/collectibleDescriptionMap.lua +2 -0
- package/maps/collectibleNameMap.js +727 -0
- package/maps/collectibleNameMap.lua +2 -0
- package/maps/defaultPlayerStatMap.js +14 -0
- package/maps/defaultPlayerStatMap.lua +2 -0
- package/maps/falsePHDPillConversions.js +34 -0
- package/maps/falsePHDPillConversions.lua +2 -0
- package/maps/gridEntityTypeToBrokenStateMap.js +29 -0
- package/maps/gridEntityTypeToBrokenStateMap.lua +2 -0
- package/maps/gridEntityXMLMap.js +128 -0
- package/maps/gridEntityXMLMap.lua +2 -0
- package/maps/pillEffectMap.js +88 -0
- package/maps/pillEffectMap.lua +2 -0
- package/maps/roomShapeToTopLeftWallGridIndexMap.js +14 -0
- package/maps/roomShapeToTopLeftWallGridIndexMap.lua +2 -0
- package/maps/roomTypeMap.js +39 -0
- package/maps/roomTypeMap.lua +2 -0
- package/maps/trinketDescriptionMap.js +196 -0
- package/maps/trinketDescriptionMap.lua +2 -0
- package/maps/trinketNameMap.js +195 -0
- package/maps/trinketNameMap.lua +2 -0
- package/objects/LRoomShapeToRectangles.js +33 -0
- package/objects/LRoomShapeToRectangles.lua +2 -0
- package/objects/backdropTypeToRockAltType.js +66 -0
- package/objects/backdropTypeToRockAltType.lua +2 -0
- package/objects/bossNamePNGFileNames.js +112 -0
- package/objects/bossNamePNGFileNames.lua +2 -0
- package/objects/bossPortraitPNGFileNames.js +115 -0
- package/objects/bossPortraitPNGFileNames.lua +2 -0
- package/objects/callbackRegisterFunctions.js +170 -0
- package/objects/callbackRegisterFunctions.lua +2 -0
- package/objects/cardDescriptions.js +104 -0
- package/objects/cardDescriptions.lua +2 -0
- package/objects/cardNames.js +104 -0
- package/objects/cardNames.lua +2 -0
- package/objects/cardTypes.js +103 -0
- package/objects/cardTypes.lua +2 -0
- package/objects/challengeNames.js +51 -0
- package/objects/challengeNames.lua +2 -0
- package/objects/characterNames.js +46 -0
- package/objects/characterNames.lua +2 -0
- package/objects/coinSubTypeToValue.js +13 -0
- package/objects/coinSubTypeToValue.lua +2 -0
- package/objects/colors.d.ts +1 -0
- package/objects/colors.js +24 -0
- package/objects/colors.lua +2 -0
- package/objects/directionNames.js +9 -0
- package/objects/directionNames.lua +2 -0
- package/objects/directionToDegrees.js +9 -0
- package/objects/directionToDegrees.lua +2 -0
- package/objects/directionToVector.js +10 -0
- package/objects/directionToVector.lua +2 -0
- package/objects/doorSlotFlagToDoorSlot.js +13 -0
- package/objects/doorSlotFlagToDoorSlot.lua +2 -0
- package/objects/doorSlotToDirection.js +13 -0
- package/objects/doorSlotToDirection.lua +2 -0
- package/objects/doorSlotToDoorSlotFlag.js +13 -0
- package/objects/doorSlotToDoorSlotFlag.lua +2 -0
- package/objects/isaacAPIClassTypeToBrand.js +9 -0
- package/objects/isaacAPIClassTypeToBrand.lua +2 -0
- package/objects/isaacAPIClassTypeToCopyFunction.js +12 -0
- package/objects/isaacAPIClassTypeToCopyFunction.lua +2 -0
- package/objects/languageNames.js +11 -0
- package/objects/languageNames.lua +2 -0
- package/objects/oppositeDoorSlots.js +13 -0
- package/objects/oppositeDoorSlots.lua +2 -0
- package/objects/pillEffectClasses.js +56 -0
- package/objects/pillEffectClasses.lua +2 -0
- package/objects/pillEffectNames.js +55 -0
- package/objects/pillEffectNames.lua +2 -0
- package/objects/pillEffectTypes.js +55 -0
- package/objects/pillEffectTypes.lua +2 -0
- package/objects/playerNamePNGFileNames.js +55 -0
- package/objects/playerNamePNGFileNames.lua +2 -0
- package/objects/playerPortraitPNGFileNames.js +52 -0
- package/objects/playerPortraitPNGFileNames.lua +2 -0
- package/objects/roomShapeBounds.js +46 -0
- package/objects/roomShapeBounds.lua +2 -0
- package/objects/roomShapeCorners.js +268 -0
- package/objects/roomShapeCorners.lua +2 -0
- package/objects/roomShapeLayoutSizes.js +39 -0
- package/objects/roomShapeLayoutSizes.lua +2 -0
- package/objects/roomShapeToBottomRightPosition.js +22 -0
- package/objects/roomShapeToBottomRightPosition.lua +2 -0
- package/objects/roomShapeToDoorSlotCoordinates.js +109 -0
- package/objects/roomShapeToDoorSlotCoordinates.lua +2 -0
- package/objects/roomShapeToDoorSlots.js +69 -0
- package/objects/roomShapeToDoorSlots.lua +2 -0
- package/objects/roomShapeToDoorSlotsToGridIndexDelta.js +113 -0
- package/objects/roomShapeToDoorSlotsToGridIndexDelta.lua +2 -0
- package/objects/roomShapeToGridWidth.js +18 -0
- package/objects/roomShapeToGridWidth.lua +2 -0
- package/objects/roomShapeToTopLeftPosition.js +23 -0
- package/objects/roomShapeToTopLeftPosition.lua +2 -0
- package/objects/roomShapeVolumes.js +30 -0
- package/objects/roomShapeVolumes.lua +2 -0
- package/objects/roomTypeGotoPrefixes.js +33 -0
- package/objects/roomTypeGotoPrefixes.lua +2 -0
- package/objects/roomTypeNames.js +34 -0
- package/objects/roomTypeNames.lua +2 -0
- package/objects/serializedIsaacAPIClassTypeToIdentityFunction.js +12 -0
- package/objects/serializedIsaacAPIClassTypeToIdentityFunction.lua +2 -0
- package/objects/stageTypeSuffixes.js +10 -0
- package/objects/stageTypeSuffixes.lua +2 -0
- package/objects/stageTypeToLetter.js +12 -0
- package/objects/stageTypeToLetter.lua +2 -0
- package/objects/transformationNames.js +18 -0
- package/objects/transformationNames.lua +2 -0
- package/objects/versusScreenBackgroundColors.js +36 -0
- package/objects/versusScreenBackgroundColors.lua +2 -0
- package/objects/versusScreenDirtSpotColors.js +36 -0
- package/objects/versusScreenDirtSpotColors.lua +2 -0
- package/package.json +1 -1
- package/patchErrorFunctions.js +67 -0
- package/patchErrorFunctions.lua +2 -0
- package/sets/LRoomShapesSet.js +8 -0
- package/sets/LRoomShapesSet.lua +2 -0
- package/sets/bossSets.js +374 -0
- package/sets/bossSets.lua +2 -0
- package/sets/charactersThatStartWithAnActiveItemSet.js +15 -0
- package/sets/charactersThatStartWithAnActiveItemSet.lua +2 -0
- package/sets/charactersWithBlackHeartFromEternalHeartSet.js +6 -0
- package/sets/charactersWithBlackHeartFromEternalHeartSet.lua +2 -0
- package/sets/charactersWithFreeDevilDealsSet.js +3 -0
- package/sets/charactersWithFreeDevilDealsSet.lua +2 -0
- package/sets/charactersWithNoRedHeartsSet.js +16 -0
- package/sets/charactersWithNoRedHeartsSet.lua +2 -0
- package/sets/charactersWithNoSoulHeartsSet.js +13 -0
- package/sets/charactersWithNoSoulHeartsSet.lua +2 -0
- package/sets/chestPickupVariantsSet.js +16 -0
- package/sets/chestPickupVariantsSet.lua +2 -0
- package/sets/consoleCommandsSet.js +61 -0
- package/sets/consoleCommandsSet.lua +2 -0
- package/sets/familiarsThatShootPlayerTearsSet.js +12 -0
- package/sets/familiarsThatShootPlayerTearsSet.lua +2 -0
- package/sets/lostStyleCharactersSet.js +13 -0
- package/sets/lostStyleCharactersSet.lua +2 -0
- package/sets/mineShaftRoomSubTypesSet.js +9 -0
- package/sets/mineShaftRoomSubTypesSet.lua +2 -0
- package/sets/narrowRoomShapesSet.js +8 -0
- package/sets/narrowRoomShapesSet.lua +2 -0
- package/sets/redHeartSubTypesSet.js +7 -0
- package/sets/redHeartSubTypesSet.lua +2 -0
- package/sets/sinEntityTypesSet.js +11 -0
- package/sets/sinEntityTypesSet.lua +2 -0
- package/sets/singleUseActiveCollectibleTypesSet.js +12 -0
- package/sets/singleUseActiveCollectibleTypesSet.lua +2 -0
- package/sets/storyBossesSet.js +17 -0
- package/sets/storyBossesSet.lua +2 -0
- package/shaderCrashFix.js +17 -0
- package/shaderCrashFix.lua +2 -0
- package/types/AnyEntity.js +2 -0
- package/types/AnyEntity.lua +2 -0
- package/types/CollectibleIndex.js +2 -0
- package/types/CollectibleIndex.lua +2 -0
- package/types/PickingUpItem.js +38 -0
- package/types/PickingUpItem.lua +2 -0
- package/types/PlayerIndex.js +2 -0
- package/types/PlayerIndex.lua +2 -0
- package/types/private/IsaacAPIClass.js +2 -0
- package/types/private/IsaacAPIClass.lua +2 -0
- package/types/private/SerializedIsaacAPIClass.js +2 -0
- package/types/private/SerializedIsaacAPIClass.lua +2 -0
- package/types/private/TSTLClass.js +2 -0
- package/types/private/TSTLClass.lua +2 -0
- package/upgradeMod.js +47 -0
- package/upgradeMod.lua +2 -0
package/functions/run.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Challenge, PlayerType } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../cachedClasses";
|
|
3
|
+
import { FIRST_CHARACTER } from "../constantsFirstLast";
|
|
4
|
+
import { log } from "./log";
|
|
5
|
+
/**
|
|
6
|
+
* Whether or not the player is playing on a set seed (i.e. that they entered in a specific seed by
|
|
7
|
+
* pressing tab on the character selection screen). When the player resets the game on a set seed,
|
|
8
|
+
* the game will not switch to a different seed.
|
|
9
|
+
*/
|
|
10
|
+
export function onSetSeed() {
|
|
11
|
+
const seeds = game.GetSeeds();
|
|
12
|
+
const customRun = seeds.IsCustomRun();
|
|
13
|
+
const challenge = Isaac.GetChallenge();
|
|
14
|
+
return challenge === Challenge.NULL && customRun;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Helper function to restart the run using the console command of "restart". If the player is
|
|
18
|
+
* playing a seeded run, then it will restart the game to the beginning of the seed. Otherwise, it
|
|
19
|
+
* will put the player on a run with an entirely new seed.
|
|
20
|
+
*
|
|
21
|
+
* You can optionally specify a `PlayerType` to restart the game as that character.
|
|
22
|
+
*/
|
|
23
|
+
export function restart(character) {
|
|
24
|
+
if (character === undefined) {
|
|
25
|
+
const command = "restart";
|
|
26
|
+
log(`Restarting the run with a console command of: ${command}`);
|
|
27
|
+
Isaac.ExecuteCommand(command);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (character < FIRST_CHARACTER) {
|
|
31
|
+
error(`Restarting as a character of ${character} would crash the game.`);
|
|
32
|
+
}
|
|
33
|
+
const command = `restart ${character}`;
|
|
34
|
+
log(`Restarting the run as PlayerType.${PlayerType[character]} (${character}) with a console command of: ${command}`);
|
|
35
|
+
Isaac.ExecuteCommand(command);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Helper function to change the run status to that of an unseeded run with a new random seed.
|
|
39
|
+
*
|
|
40
|
+
* This is useful to revert the behavior where playing on a set and restarting the game will not
|
|
41
|
+
* take you to a new seed.
|
|
42
|
+
*/
|
|
43
|
+
export function setUnseeded() {
|
|
44
|
+
const seeds = game.GetSeeds();
|
|
45
|
+
// Invoking the `Seeds.Reset` method will cause the start seed to be set to 0. Subsequently, the
|
|
46
|
+
// `Seeds.GetStartSeed` method will return 0, and can cause crashes (due to RNG objects not being
|
|
47
|
+
// able to handle a seed of 0). It also causes the log to be spammed with: "[ASSERT] - Error: Game
|
|
48
|
+
// Start Seed was not set." Thus, we must immediately re-initialize the game start seed by using
|
|
49
|
+
// the `Seeds.Restart` method.
|
|
50
|
+
seeds.Reset();
|
|
51
|
+
seeds.Restart(Challenge.NULL);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUztJQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV2QyxPQUFPLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxTQUFzQjtJQUM1QyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxpREFBaUQsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLE9BQU87S0FDUjtJQUVELElBQUksU0FBUyxHQUFHLGVBQWUsRUFBRTtRQUMvQixLQUFLLENBQUMsZ0NBQWdDLFNBQVMsd0JBQXdCLENBQUMsQ0FBQztLQUMxRTtJQUVELE1BQU0sT0FBTyxHQUFHLFdBQVcsU0FBUyxFQUFFLENBQUM7SUFDdkMsR0FBRyxDQUNELG9DQUFvQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxnQ0FBZ0MsT0FBTyxFQUFFLENBQ2pILENBQUM7SUFDRixLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU5QixnR0FBZ0c7SUFDaEcsaUdBQWlHO0lBQ2pHLGtHQUFrRztJQUNsRyxnR0FBZ0c7SUFDaEcsOEJBQThCO0lBQzlCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUMifQ==
|
package/functions/run.lua
CHANGED
|
@@ -46,3 +46,5 @@ function ____exports.setUnseeded(self)
|
|
|
46
46
|
seeds:Restart(Challenge.NULL)
|
|
47
47
|
end
|
|
48
48
|
return ____exports
|
|
49
|
+
|
|
50
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkNBQXNDO0FBQTdCO0FBQVc7QUFDcEIsMEJBQXFCO0FBQVo7QUFDVCwrQkFBZ0M7QUFBdkI7QUFDVCxnQkFBb0I7QUFBWDs7OztBQU9UO0FBQ1Esa0JBQVEsS0FBSztBQUNiLHNCQUFZLE1BQU07QUFDbEIsc0JBQVk7QUFFbEIsV0FBTyxhQUFjLG1CQUFrQjtBQUx6Qzs7Ozs7O0FBZUEsbUNBQXdCO09BQ2xCO0FBQ0ksd0JBQVU7UUFDaEIsSUFBSSxvREFBaUQ7UUFDckQscUJBQXFCO0FBQ3JCOztPQUdFLFlBQVk7UUFDZCxPQUFNLDRDQUFnQyxlQUFTOztBQUczQyxvQkFBVSx1QkFBVztJQUMzQixRQUNFLGdEQUFvQyxXQUFXLGdCQUFVLGtCQUFLLGVBQVMsb0NBQWdDO0lBRXpHLHFCQUFxQjtBQWhCdkI7Ozs7O0FBeUJBO0FBQ1Esa0JBQVEsS0FBSztJQU9uQixNQUFNO0lBQ04sTUFBTSxRQUFRO0FBVGhCIiwiZmlsZSI6InJ1bi5sdWEiLCJzb3VyY2VSb290IjoiIn0=
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { CollectibleType, PlayerType, TrinketType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../cachedClasses";
|
|
3
|
+
import { getCollectibleSet } from "./collectibleSet";
|
|
4
|
+
import { anyPlayerHasCollectible, getPlayersOfType } from "./player";
|
|
5
|
+
import { mapGetPlayer, mapSetPlayer } from "./playerDataStructures";
|
|
6
|
+
import { getPlayers } from "./playerIndex";
|
|
7
|
+
import { repeat } from "./utils";
|
|
8
|
+
const COLLECTIBLES_THAT_AFFECT_ITEM_POOLS = [
|
|
9
|
+
CollectibleType.CHAOS,
|
|
10
|
+
CollectibleType.SACRED_ORB,
|
|
11
|
+
CollectibleType.TMTRAINER, // 721
|
|
12
|
+
];
|
|
13
|
+
const TRINKETS_THAT_AFFECT_ITEM_POOLS = [
|
|
14
|
+
TrinketType.NO,
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* Helper function to see if the given collectible is unlocked on the player's save file. This
|
|
18
|
+
* requires providing the corresponding item pool that the collectible is located in.
|
|
19
|
+
*
|
|
20
|
+
* - If any player currently has the item, then it is assumed to be unlocked. (This is because Eden
|
|
21
|
+
* may have randomly started with the provided collectible, and it will be subsequently removed
|
|
22
|
+
* from all pools.)
|
|
23
|
+
* - If the collectible is located in more than one item pool, then any item pool can be provided.
|
|
24
|
+
* - If the collectible is not located in any item pools, then this function will always return
|
|
25
|
+
* false.
|
|
26
|
+
* - If any player is Tainted Lost, they will be temporarily changed to Isaac and then temporarily
|
|
27
|
+
* changed back (because Tainted Lost is not able to retrieve some collectibles from item pools).
|
|
28
|
+
*/
|
|
29
|
+
export function isCollectibleUnlocked(collectibleTypeToCheckFor, itemPoolToCheckFor) {
|
|
30
|
+
// If Eden is holding this collectible, then it is obviously unlocked (and it will also be removed
|
|
31
|
+
// from pools, so the below check won't work).
|
|
32
|
+
if (anyPlayerHasCollectible(collectibleTypeToCheckFor)) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
// On Tainted Lost, it is impossible to retrieve non-offensive collectibles from pools, so we
|
|
36
|
+
// temporarily change the character to Isaac.
|
|
37
|
+
const taintedLosts = getPlayersOfType(PlayerType.THE_LOST_B);
|
|
38
|
+
for (const player of taintedLosts) {
|
|
39
|
+
player.ChangePlayerType(PlayerType.ISAAC);
|
|
40
|
+
}
|
|
41
|
+
// Before checking the item pools, remove any collectibles or trinkets that affect retrieved
|
|
42
|
+
// collectible types.
|
|
43
|
+
const removedItemsMap = new Map();
|
|
44
|
+
const removedTrinketsMap = new Map();
|
|
45
|
+
for (const player of getPlayers()) {
|
|
46
|
+
const removedItems = [];
|
|
47
|
+
for (const itemToRemove of COLLECTIBLES_THAT_AFFECT_ITEM_POOLS) {
|
|
48
|
+
if (player.HasCollectible(itemToRemove)) {
|
|
49
|
+
const numCollectibles = player.GetCollectibleNum(itemToRemove);
|
|
50
|
+
repeat(numCollectibles, () => {
|
|
51
|
+
player.RemoveCollectible(itemToRemove);
|
|
52
|
+
removedItems.push(itemToRemove);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
mapSetPlayer(removedItemsMap, player, removedItems);
|
|
57
|
+
const removedTrinkets = [];
|
|
58
|
+
for (const trinketToRemove of TRINKETS_THAT_AFFECT_ITEM_POOLS) {
|
|
59
|
+
if (player.HasTrinket(trinketToRemove)) {
|
|
60
|
+
const numTrinkets = player.GetTrinketMultiplier(trinketToRemove);
|
|
61
|
+
repeat(numTrinkets, () => {
|
|
62
|
+
player.TryRemoveTrinket(trinketToRemove);
|
|
63
|
+
removedTrinkets.push(trinketToRemove);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
mapSetPlayer(removedTrinketsMap, player, removedTrinkets);
|
|
68
|
+
}
|
|
69
|
+
// Blacklist every collectible in the game except for the provided collectible.
|
|
70
|
+
const itemPool = game.GetItemPool();
|
|
71
|
+
const collectibleSet = getCollectibleSet();
|
|
72
|
+
for (const collectibleType of collectibleSet.values()) {
|
|
73
|
+
if (collectibleType !== collectibleTypeToCheckFor) {
|
|
74
|
+
itemPool.AddRoomBlacklist(collectibleType);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Get a collectible from the pool and see if it is the intended collectible. (We can use any
|
|
78
|
+
// arbitrary value as the seed since it should not influence the result.)
|
|
79
|
+
const retrievedCollectibleType = itemPool.GetCollectible(itemPoolToCheckFor, false, 1);
|
|
80
|
+
const collectibleUnlocked = retrievedCollectibleType === collectibleTypeToCheckFor;
|
|
81
|
+
// Reset the blacklist
|
|
82
|
+
itemPool.ResetRoomBlacklist();
|
|
83
|
+
// Give back items/trinkets, if necessary.
|
|
84
|
+
for (const player of getPlayers()) {
|
|
85
|
+
const removedItems = mapGetPlayer(removedItemsMap, player);
|
|
86
|
+
if (removedItems !== undefined) {
|
|
87
|
+
for (const collectibleType of removedItems) {
|
|
88
|
+
player.AddCollectible(collectibleType, 0, false); // Prevent Chaos from spawning pickups
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const removedTrinkets = mapGetPlayer(removedTrinketsMap, player);
|
|
92
|
+
if (removedTrinkets !== undefined) {
|
|
93
|
+
for (const trinketType of removedTrinkets) {
|
|
94
|
+
player.AddTrinket(trinketType, false);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Change any players back to Tainted Lost, if necessary.
|
|
99
|
+
for (const player of taintedLosts) {
|
|
100
|
+
player.ChangePlayerType(PlayerType.THE_LOST_B);
|
|
101
|
+
}
|
|
102
|
+
return collectibleUnlocked;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZUZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9zYXZlRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUVmLFVBQVUsRUFDVixXQUFXLEdBQ1osTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE1BQU0sbUNBQW1DLEdBQStCO0lBQ3RFLGVBQWUsQ0FBQyxLQUFLO0lBQ3JCLGVBQWUsQ0FBQyxVQUFVO0lBQzFCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTTtDQUNsQyxDQUFDO0FBRUYsTUFBTSwrQkFBK0IsR0FBMkI7SUFDOUQsV0FBVyxDQUFDLEVBQUU7Q0FDZixDQUFDO0FBRUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyx5QkFBMEMsRUFDMUMsa0JBQWdDO0lBRWhDLGtHQUFrRztJQUNsRyw4Q0FBOEM7SUFDOUMsSUFBSSx1QkFBdUIsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCw2RkFBNkY7SUFDN0YsNkNBQTZDO0lBQzdDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRTtRQUNqQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzNDO0lBRUQsNEZBQTRGO0lBQzVGLHFCQUFxQjtJQUNyQixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztJQUNsRSxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0lBQ2pFLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLEVBQUU7UUFDakMsTUFBTSxZQUFZLEdBQXNCLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sWUFBWSxJQUFJLG1DQUFtQyxFQUFFO1lBQzlELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDdkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtvQkFDM0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVwRCxNQUFNLGVBQWUsR0FBa0IsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxlQUFlLElBQUksK0JBQStCLEVBQUU7WUFDN0QsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO29CQUN2QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3pDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDM0Q7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFDM0MsS0FBSyxNQUFNLGVBQWUsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDckQsSUFBSSxlQUFlLEtBQUsseUJBQXlCLEVBQUU7WUFDakQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzVDO0tBQ0Y7SUFFRCw2RkFBNkY7SUFDN0YseUVBQXlFO0lBQ3pFLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FDdEQsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxDQUFTLENBQ1YsQ0FBQztJQUVGLE1BQU0sbUJBQW1CLEdBQ3ZCLHdCQUF3QixLQUFLLHlCQUF5QixDQUFDO0lBRXpELHNCQUFzQjtJQUN0QixRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUU5QiwwQ0FBMEM7SUFDMUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsRUFBRTtRQUNqQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixLQUFLLE1BQU0sZUFBZSxJQUFJLFlBQVksRUFBRTtnQkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsc0NBQXNDO2FBQ3pGO1NBQ0Y7UUFFRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ2pDLEtBQUssTUFBTSxXQUFXLElBQUksZUFBZSxFQUFFO2dCQUN6QyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN2QztTQUNGO0tBQ0Y7SUFFRCx5REFBeUQ7SUFDekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxZQUFZLEVBQUU7UUFDakMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNoRDtJQUVELE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQyJ9
|
package/functions/saveFile.lua
CHANGED
|
@@ -106,3 +106,5 @@ function ____exports.isCollectibleUnlocked(self, collectibleTypeToCheckFor, item
|
|
|
106
106
|
return collectibleUnlocked
|
|
107
107
|
end
|
|
108
108
|
return ____exports
|
|
109
|
+
|
|
110
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NhdmVGaWxlLnRzIl0sIm5hbWVzIjpbInJlcGVhdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FLTztBQUpMO0FBRUE7QUFDQTtBQUVGLDBCQUFxQjtBQUFaO0FBRVQsMkJBQWtDO0FBQXpCO0FBQ1QsbUJBQTBEO0FBQWpEO0FBQXlCO0FBQ2xDLGlDQUEyQztBQUFsQztBQUFjO0FBQ3ZCLHdCQUEyQjtBQUFsQjtBQUNULGtCQUF1QjtBQUFkLE1BQUFBO0FBRUgsNENBQWtFLENBQ3RFLHVCQUNBLDRCQUNBO0FBR0ksd0NBQTBELENBQzlEOzs7Ozs7Ozs7Ozs7QUFnQkYsaURBQ0UsMkJBQ0E7T0FJSSw2QkFBd0I7QUFDMUIsZUFBTzs7QUFLSCx5QkFBZSxzQkFBaUI7QUFDdEMsY0FBVyxpQkFBVTtRQUNuQixPQUFPLGlCQUFpQjs7QUFLcEIsNEJBQWtCLFVBQUk7QUFDdEIsK0JBQXFCLFVBQUk7QUFDL0IsY0FBVyxpQkFBVTtBQUNiLDZCQUFrQztBQUN4QyxrQkFBVyx1QkFBZ0I7ZUFDckIsT0FBTyxlQUFlO0FBQ2xCLHdDQUFrQixPQUFPLGtCQUFrQjtnQkFDakQsQUFBQUE7O29CQUFPO29CQUFpQjt3QkFDdEIsT0FBTyxrQkFBa0I7QUFDekIsMERBQWtCO29CQUZJOzs7O1FBTzVCLGtCQUFhLGlCQUFpQixRQUFRO0FBRWhDLGdDQUFpQztBQUN2QyxrQkFBVywwQkFBbUI7ZUFDeEIsT0FBTyxXQUFXO0FBQ2Qsb0NBQWMsT0FBTyxxQkFBcUI7Z0JBQ2hELEFBQUFBOztvQkFBTztvQkFBYTt3QkFDbEIsT0FBTyxpQkFBaUI7QUFDeEIsZ0VBQXFCO29CQUZIOzs7O1FBT3hCLGtCQUFhLG9CQUFvQixRQUFROztBQUlyQyxxQkFBVyxLQUFLO0FBQ2hCLDJCQUFpQjtBQUN2QixjQUFXLG1CQUFtQiw4QkFBZTtXQUN2QyxtQkFBb0I7WUFDdEIsU0FBUyxpQkFBaUI7OztBQU14QixxQ0FBMkIsU0FBUyxlQUN4QyxvQkFDQSxPQUNBO0FBR0ksZ0NBQ0osNEJBQTZCO0lBRy9CLFNBQVM7QUFHVCxjQUFXLGlCQUFVO0FBQ2IsNkJBQWUsa0JBQWEsaUJBQWlCO1dBQy9DO0FBQ0Ysc0JBQVcsMEJBQW1CO2dCQUM1QixPQUFPLGVBQWUsaUJBQWlCLEdBQUc7OztBQUl4QyxnQ0FBa0Isa0JBQWEsb0JBQW9CO1dBQ3JEO0FBQ0Ysc0JBQVcsc0JBQWU7Z0JBQ3hCLE9BQU8sV0FBVyxhQUFhOzs7O0FBTXJDLGNBQVcsaUJBQVU7UUFDbkIsT0FBTyxpQkFBaUI7O0FBRzFCLFdBQU87QUE5RlQiLCJmaWxlIjoic2F2ZUZpbGUubHVhIiwic291cmNlUm9vdCI6IiJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { game } from "../cachedClasses";
|
|
2
|
+
import { newRNG } from "./rng";
|
|
3
|
+
/** Alias for the `Seeds.GetStartSeedString` method. */
|
|
4
|
+
export function getStartSeedString() {
|
|
5
|
+
const seeds = game.GetSeeds();
|
|
6
|
+
return seeds.GetStartSeedString();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Helper function to get the next seed value.
|
|
10
|
+
*
|
|
11
|
+
* This function is useful when you are working with seed values directly over RNG objects.
|
|
12
|
+
*/
|
|
13
|
+
export function nextSeed(seed) {
|
|
14
|
+
const rng = newRNG(seed);
|
|
15
|
+
rng.Next();
|
|
16
|
+
return rng.GetSeed();
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VlZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9zZWVkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUUvQix1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsT0FBTyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBVTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkIsQ0FBQyJ9
|
package/functions/seeds.lua
CHANGED
|
@@ -17,3 +17,5 @@ function ____exports.nextSeed(self, seed)
|
|
|
17
17
|
return rng:GetSeed()
|
|
18
18
|
end
|
|
19
19
|
return ____exports
|
|
20
|
+
|
|
21
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NlZWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBcUI7QUFBWjtBQUNULGdCQUF1QjtBQUFkOztBQUdUO0FBQ1Esa0JBQVEsS0FBSztBQUNuQixXQUFPLE1BQU07QUFGZjs7OztBQVVBLG9DQUF5QjtBQUNqQixnQkFBTSxZQUFPO0lBQ25CLElBQUk7QUFDSixXQUFPLElBQUk7QUFIYiIsImZpbGUiOiJzZWVkcy5sdWEiLCJzb3VyY2VSb290IjoiIn0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SerializationType } from "../enums/SerializationType";
|
|
2
|
+
import { ISAAC_API_CLASS_TYPE_TO_BRAND } from "../objects/isaacAPIClassTypeToBrand";
|
|
3
|
+
import { ISAAC_API_CLASS_TYPE_TO_COPY_FUNCTION } from "../objects/isaacAPIClassTypeToCopyFunction";
|
|
4
|
+
import { SERIALIZED_ISAAC_API_CLASS_TYPE_TO_IDENTITY_FUNCTION } from "../objects/serializedIsaacAPIClassTypeToIdentityFunction";
|
|
5
|
+
import { getIsaacAPIClassName } from "./isaacAPIClass";
|
|
6
|
+
import { isTable, isUserdata } from "./types";
|
|
7
|
+
export function copyIsaacAPIClass(isaacAPIClass, serializationType) {
|
|
8
|
+
if (!isUserdata(isaacAPIClass)) {
|
|
9
|
+
error(`Failed to copy an Isaac API class since the provided object was of type: ${typeof isaacAPIClass}`);
|
|
10
|
+
}
|
|
11
|
+
const isaacAPIClassType = getIsaacAPIClassName(isaacAPIClass);
|
|
12
|
+
if (isaacAPIClassType === undefined) {
|
|
13
|
+
error("Failed to copy an Isaac API class since it does not have a class type.");
|
|
14
|
+
}
|
|
15
|
+
const copyableIsaacAPIClassType = isaacAPIClassType;
|
|
16
|
+
const copyFunction = ISAAC_API_CLASS_TYPE_TO_COPY_FUNCTION[copyableIsaacAPIClassType];
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
18
|
+
if (copyFunction === undefined) {
|
|
19
|
+
error(`Failed to copy Isaac API class "${copyableIsaacAPIClassType}" since there is not a defined copy function for this class type.`);
|
|
20
|
+
}
|
|
21
|
+
return copyFunction(isaacAPIClass, serializationType);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Deserialization is a special case, so we make a dedicated function for this.
|
|
25
|
+
*
|
|
26
|
+
* There is no need for a corresponding "serializeIsaacAPIClass" function because the
|
|
27
|
+
* "copyIsaacAPIClass" function can handle all serialization types.
|
|
28
|
+
*/
|
|
29
|
+
export function deserializeIsaacAPIClass(serializedIsaacAPIClass) {
|
|
30
|
+
if (!isTable(serializedIsaacAPIClass)) {
|
|
31
|
+
error(`Failed to deserialize an Isaac API class since the provided object was of type: ${typeof serializedIsaacAPIClass}`);
|
|
32
|
+
}
|
|
33
|
+
const copyableIsaacAPIClassType = getSerializedTableType(serializedIsaacAPIClass);
|
|
34
|
+
if (copyableIsaacAPIClassType === undefined) {
|
|
35
|
+
error("Failed to deserialize an API class since a valid class type brand was not found.");
|
|
36
|
+
}
|
|
37
|
+
const copyFunction = ISAAC_API_CLASS_TYPE_TO_COPY_FUNCTION[copyableIsaacAPIClassType];
|
|
38
|
+
return copyFunction(serializedIsaacAPIClass, SerializationType.DESERIALIZE);
|
|
39
|
+
}
|
|
40
|
+
function getSerializedTableType(serializedIsaacAPIClass) {
|
|
41
|
+
for (const [copyableIsaacAPIClassType, serializationBrand] of Object.entries(ISAAC_API_CLASS_TYPE_TO_BRAND)) {
|
|
42
|
+
if (serializedIsaacAPIClass.has(serializationBrand)) {
|
|
43
|
+
return copyableIsaacAPIClassType;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
export function isSerializedIsaacAPIClass(object) {
|
|
49
|
+
const identityFunctions = Object.values(SERIALIZED_ISAAC_API_CLASS_TYPE_TO_IDENTITY_FUNCTION);
|
|
50
|
+
return identityFunctions.some((identityFunction) => identityFunction(object));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkcsT0FBTyxFQUFFLG9EQUFvRCxFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFaEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFOUMsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixhQUFzQixFQUN0QixpQkFBb0M7SUFFcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUM5QixLQUFLLENBQ0gsNEVBQTRFLE9BQU8sYUFBYSxFQUFFLENBQ25HLENBQUM7S0FDSDtJQUVELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7UUFDbkMsS0FBSyxDQUNILHdFQUF3RSxDQUN6RSxDQUFDO0tBQ0g7SUFFRCxNQUFNLHlCQUF5QixHQUM3QixpQkFBOEMsQ0FBQztJQUNqRCxNQUFNLFlBQVksR0FDaEIscUNBQXFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSx1RUFBdUU7SUFDdkUsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1FBQzlCLEtBQUssQ0FDSCxtQ0FBbUMseUJBQXlCLG1FQUFtRSxDQUNoSSxDQUFDO0tBQ0g7SUFFRCxPQUFPLFlBQVksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLHVCQUFnRDtJQUVoRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7UUFDckMsS0FBSyxDQUNILG1GQUFtRixPQUFPLHVCQUF1QixFQUFFLENBQ3BILENBQUM7S0FDSDtJQUVELE1BQU0seUJBQXlCLEdBQUcsc0JBQXNCLENBQ3RELHVCQUF1QixDQUN4QixDQUFDO0lBQ0YsSUFBSSx5QkFBeUIsS0FBSyxTQUFTLEVBQUU7UUFDM0MsS0FBSyxDQUNILGtGQUFrRixDQUNuRixDQUFDO0tBQ0g7SUFFRCxNQUFNLFlBQVksR0FDaEIscUNBQXFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSxPQUFPLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsdUJBQWdEO0lBRWhELEtBQUssTUFBTSxDQUFDLHlCQUF5QixFQUFFLGtCQUFrQixDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDMUUsNkJBQTZCLENBQzlCLEVBQUU7UUFDRCxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ25ELE9BQU8seUJBQXNELENBQUM7U0FDL0Q7S0FDRjtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLE1BQWU7SUFFZixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3JDLG9EQUFvRCxDQUNyRCxDQUFDO0lBQ0YsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDIn0=
|
|
@@ -66,3 +66,5 @@ function ____exports.isSerializedIsaacAPIClass(self, object)
|
|
|
66
66
|
)
|
|
67
67
|
end
|
|
68
68
|
return ____exports
|
|
69
|
+
|
|
70
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O01BcUVTO0FBcEVULDhCQUFrQztBQUF6QjtBQUNULHFDQUE4QztBQUFyQztBQUNULDRDQUFzRDtBQUE3QztBQUNULDBEQUFxRTtBQUE1RDtBQUVULDBCQUFxQztBQUE1QjtBQUNULGtCQUFvQztBQUEzQjtBQUFTO0FBOERsQixTQUFTLDZCQUNQO0FBRUEsa0NBQThELG9CQUM1RDtjQURVO2NBQTJCO1dBR2pDLHdCQUE0QjtBQUM5QixtQkFBTzs7O0FBSVg7O0FBdkVGLDZDQUNFLGVBQ0E7V0FFSyxnQkFBVztRQUNkLE1BQ0UsK0VBQTRFLGFBQU87O0FBSWpGLDhCQUFvQiwwQkFBcUI7T0FDM0M7UUFDRixNQUNFOztBQUlFLHNDQUNKO0FBQ0kseUJBQ0osc0NBQXNDO09BRXBDO1FBQ0YsT0FDRSx1Q0FBbUMsOEJBQXlCOztBQUloRSxXQUFPLGtCQUFhLGVBQWU7QUE1QnJDOzs7OztBQXFDQSxvREFDRTtXQUVLLGFBQVE7UUFDWCxNQUNFLHNGQUFtRixhQUFPOztBQUl4RixzQ0FBNEIsNEJBQ2hDO09BRUU7UUFDRixNQUNFOztBQUlFLHlCQUNKLHNDQUFzQztBQUN4QyxXQUFPLGtCQUFhLHlCQUF5QjtBQXBCL0M7QUFxQ0EscURBQ0U7QUFFTSw4QkFBb0IsbUJBQ3hCO0FBRUYsV0FBTztRQUFBO1FBQXVCLGVBQUMsa0JBQXFCLDZCQUFpQixPQUF2Qzs7QUFOaEMiLCJmaWxlIjoic2VyaWFsaXphdGlvbi5sdWEiLCJzb3VyY2VSb290IjoiIn0=
|
package/functions/set.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { getArrayCombinations, getRandomArrayElement } from "./array";
|
|
2
|
+
import { getRandomSeed } from "./rng";
|
|
3
|
+
/**
|
|
4
|
+
* Helper function to add all of the values in one set to another set. The first set passed will be
|
|
5
|
+
* modified in place.
|
|
6
|
+
*
|
|
7
|
+
* This function is variadic, meaning that you can specify N sets to add to the first set.
|
|
8
|
+
*/
|
|
9
|
+
export function addSetsToSet(mainSet, ...setsToAdd) {
|
|
10
|
+
for (const set of setsToAdd) {
|
|
11
|
+
for (const value of set.values()) {
|
|
12
|
+
mainSet.add(value);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Helper function to create a new set that is the composition of two or more sets.
|
|
18
|
+
*
|
|
19
|
+
* This function is variadic, meaning that you can specify N sets.
|
|
20
|
+
*/
|
|
21
|
+
export function combineSets(...sets) {
|
|
22
|
+
const newSet = new Set();
|
|
23
|
+
for (const set of sets) {
|
|
24
|
+
for (const value of set.values()) {
|
|
25
|
+
newSet.add(value);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return newSet;
|
|
29
|
+
}
|
|
30
|
+
/** Helper function to copy a set. (You can also use a Set constructor to accomplish this task.) */
|
|
31
|
+
export function copySet(oldSet) {
|
|
32
|
+
const newSet = new Set();
|
|
33
|
+
for (const value of oldSet.values()) {
|
|
34
|
+
newSet.add(value);
|
|
35
|
+
}
|
|
36
|
+
return newSet;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Helper function to delete all of the values in one set from another set. The first set passed
|
|
40
|
+
* will be modified in place.
|
|
41
|
+
*
|
|
42
|
+
* This function is variadic, meaning that you can specify N sets to remove from the first set.
|
|
43
|
+
*/
|
|
44
|
+
export function deleteSetsFromSet(mainSet, ...setsToRemove) {
|
|
45
|
+
for (const set of setsToRemove) {
|
|
46
|
+
for (const value of set.values()) {
|
|
47
|
+
mainSet.delete(value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Helper function to get a random element from the provided set.
|
|
53
|
+
*
|
|
54
|
+
* @param set The set to get an element from.
|
|
55
|
+
* @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
|
|
56
|
+
* `RNG.Next` method will be called. Default is `getRandomSeed()`.
|
|
57
|
+
* @param exceptions Optional. An array of elements to skip over if selected.
|
|
58
|
+
*/
|
|
59
|
+
export function getRandomSetElement(set, seedOrRNG = getRandomSeed(), exceptions = []) {
|
|
60
|
+
const array = getSortedSetValues(set);
|
|
61
|
+
return getRandomArrayElement(array, seedOrRNG, exceptions);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Helper function to get all possible combinations of the given set. This includes the combination
|
|
65
|
+
* of an empty set.
|
|
66
|
+
*
|
|
67
|
+
* For example, if this function is provided a set containing 1, 2, and 3, then it will return an
|
|
68
|
+
* array containing the following sets:
|
|
69
|
+
*
|
|
70
|
+
* - [] (if `includeEmptyArray` is set to true)
|
|
71
|
+
* - [1]
|
|
72
|
+
* - [2]
|
|
73
|
+
* - [3]
|
|
74
|
+
* - [1, 2]
|
|
75
|
+
* - [1, 3]
|
|
76
|
+
* - [2, 3]
|
|
77
|
+
* - [1, 2, 3]
|
|
78
|
+
*
|
|
79
|
+
* @param set The set to get the combinations of.
|
|
80
|
+
* @param includeEmptyArray Whether or not to include an empty array in the combinations.
|
|
81
|
+
*/
|
|
82
|
+
export function getSetCombinations(set, includeEmptyArray) {
|
|
83
|
+
const values = getSortedSetValues(set);
|
|
84
|
+
const combinations = getArrayCombinations(values, includeEmptyArray);
|
|
85
|
+
return combinations.map((array) => new Set(array));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Helper function to get a sorted array based on the contents of a set.
|
|
89
|
+
*
|
|
90
|
+
* Normally, set values are returned in a random order, so use this function when the ordering of
|
|
91
|
+
* the contents is important.
|
|
92
|
+
*/
|
|
93
|
+
export function getSortedSetValues(set) {
|
|
94
|
+
const values = set.values();
|
|
95
|
+
const array = [...values];
|
|
96
|
+
array.sort();
|
|
97
|
+
return array;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsT0FBZSxFQUNmLEdBQUcsU0FBeUM7SUFFNUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUU7UUFDM0IsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQjtLQUNGO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixHQUFHLElBQW9DO0lBRXZDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFLLENBQUM7SUFDNUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELG1HQUFtRztBQUNuRyxNQUFNLFVBQVUsT0FBTyxDQUFJLE1BQStCO0lBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFLLENBQUM7SUFDNUIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuQjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBZSxFQUNmLEdBQUcsWUFBNEM7SUFFL0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUU7UUFDOUIsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtLQUNGO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLEdBQTRCLEVBQzVCLFlBQXdCLGFBQWEsRUFBRSxFQUN2QyxhQUFpQyxFQUFFO0lBRW5DLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLE9BQU8scUJBQXFCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsR0FBNEIsRUFDNUIsaUJBQTBCO0lBRTFCLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRXJFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUksR0FBNEI7SUFDaEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzVCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUMxQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFYixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==
|
package/functions/set.lua
CHANGED
|
@@ -108,3 +108,5 @@ function ____exports.getSetCombinations(self, set, includeEmptyArray)
|
|
|
108
108
|
)
|
|
109
109
|
end
|
|
110
110
|
return ____exports
|
|
111
|
+
|
|
112
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLGtCQUE0RDtBQUFuRDtBQUFzQjtBQUMvQixnQkFBOEI7QUFBckI7Ozs7O0FBb0hULDhDQUFzQztBQUM5QixtQkFBUyxJQUFJO0FBQ2Isa0JBQVEsQ0FBQyxhQUFHO0lBQ2xCO0FBRUEsV0FBTztBQUxUOzs7OztBQTVHQSx3Q0FDRTtVQUNHO0FBRUgsY0FBVyxjQUFPO0FBQ2hCLGtCQUFXLFNBQVMsbUJBQUk7WUFDdEIsUUFBUSxJQUFJOzs7QUFObEI7Ozs7QUFnQkE7VUFDSztBQUVHLG1CQUFTLFVBQUk7QUFDbkIsY0FBVyxjQUFPO0FBQ2hCLGtCQUFXLFNBQVMsbUJBQUk7WUFDdEIsT0FBTyxJQUFJOzs7QUFJZixXQUFPO0FBVlQ7O0FBY0EsbUNBQTJCO0FBQ25CLG1CQUFTLFVBQUk7QUFDbkIsY0FBVyxTQUFTLHNCQUFPO1FBQ3pCLE9BQU8sSUFBSTs7QUFHYixXQUFPO0FBTlQ7Ozs7O0FBZUEsNkNBQ0U7VUFDRztBQUVILGNBQVcsY0FBTztBQUNoQixrQkFBVyxTQUFTLG1CQUFJO1lBQ3RCLFFBQVEsT0FBTzs7O0FBTnJCOzs7Ozs7O0FBbUJBLCtDQUNFLEtBQ0EsV0FDQTtPQURBO1FBQUEsWUFBd0I7O09BQ3hCO1FBQUEsYUFBaUM7O0FBRTNCLGtCQUFRLG9DQUFtQjtBQUNqQyxXQUFPLDJCQUFzQixPQUFPLFdBQVc7QUFOakQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQSw4Q0FDRSxLQUNBO0FBRU0sbUJBQVMsb0NBQW1CO0FBQzVCLHlCQUFlLDBCQUFxQixRQUFRO0FBRWxELFdBQU87UUFBQTtRQUFpQixlQUFDLE9BQVUsaUJBQUksS0FBSSxNQUFuQjs7QUFQMUIiLCJmaWxlIjoic2V0Lmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SoundEffect } from "isaac-typescript-definitions";
|
|
2
|
+
import { sfxManager } from "../cachedClasses";
|
|
3
|
+
import { getEnumValues } from "./enums";
|
|
4
|
+
export function stopAllSoundEffects() {
|
|
5
|
+
for (const soundEffect of getEnumValues(SoundEffect)) {
|
|
6
|
+
sfxManager.Stop(soundEffect);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9zb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxLQUFLLE1BQU0sV0FBVyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNwRCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQzlCO0FBQ0gsQ0FBQyJ9
|
package/functions/sound.lua
CHANGED
|
@@ -11,3 +11,5 @@ function ____exports.stopAllSoundEffects(self)
|
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
return ____exports
|
|
14
|
+
|
|
15
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NvdW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw2Q0FBNEI7QUFBbkI7QUFDVCwwQkFBMkI7QUFBbEI7QUFDVCxrQkFBOEI7QUFBckI7QUFFVDtBQUNFLGNBQVcsc0JBQWUsbUJBQWM7UUFDdEMsV0FBVyxLQUFLOztBQUZwQiIsImZpbGUiOiJzb3VuZC5sdWEiLCJzb3VyY2VSb290IjoiIn0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { CollectibleType, PickupVariant, PlayerType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { VectorZero } from "../constants";
|
|
3
|
+
import { preventCollectibleRotation } from "../features/preventCollectibleRotation";
|
|
4
|
+
import { areFeaturesInitialized } from "../featuresInitialized";
|
|
5
|
+
import { setCollectibleEmpty } from "./collectibles";
|
|
6
|
+
import { isQuestCollectible } from "./collectibleTag";
|
|
7
|
+
import { spawnPickupWithSeed } from "./entitySpecific";
|
|
8
|
+
import { anyPlayerIs } from "./player";
|
|
9
|
+
import { getRandomSeed, isRNG } from "./rng";
|
|
10
|
+
/**
|
|
11
|
+
* Helper function to spawn a collectible. Use this instead of the `Game.Spawn` method because it
|
|
12
|
+
* handles the cases of Tainted Keeper collectibles costing coins and preventing quest items from
|
|
13
|
+
* being rotated by Tainted Isaac's rotation mechanic. (Rotation prevention will only occur in
|
|
14
|
+
* upgraded mods.)
|
|
15
|
+
*
|
|
16
|
+
* @param collectibleType The collectible type to spawn.
|
|
17
|
+
* @param position The position to spawn the collectible at.
|
|
18
|
+
* @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
|
|
19
|
+
* `RNG.Next` method will be called. Default is `getRandomSeed()`.
|
|
20
|
+
* @param options Optional. Set to true to make the collectible a "There's Options" style
|
|
21
|
+
* collectible. Default is false.
|
|
22
|
+
* @param forceFreeItem Optional. Set to true to disable the logic that gives the item a price for
|
|
23
|
+
* Tainted Keeper. Default is false.
|
|
24
|
+
* @param spawner Optional.
|
|
25
|
+
*/
|
|
26
|
+
export function spawnCollectible(collectibleType, position, seedOrRNG = getRandomSeed(), options = false, forceFreeItem = false, spawner) {
|
|
27
|
+
const seed = isRNG(seedOrRNG) ? seedOrRNG.Next() : seedOrRNG;
|
|
28
|
+
const collectible = spawnPickupWithSeed(PickupVariant.COLLECTIBLE, collectibleType, position, seed, VectorZero, spawner);
|
|
29
|
+
if (options) {
|
|
30
|
+
collectible.OptionsPickupIndex = 1;
|
|
31
|
+
}
|
|
32
|
+
if (anyPlayerIs(PlayerType.KEEPER_B) &&
|
|
33
|
+
!isQuestCollectible(collectibleType) &&
|
|
34
|
+
!forceFreeItem) {
|
|
35
|
+
// When playing Tainted Keeper, collectibles are supposed to have a price, and manually spawned
|
|
36
|
+
// items will not have a price, so we have to set it manually.
|
|
37
|
+
// Setting the shop item ID in this way prevents the bug where the item will sometimes change to
|
|
38
|
+
// 99 cents.
|
|
39
|
+
collectible.ShopItemId = -1;
|
|
40
|
+
// We can set the price to any arbitrary value; it will auto-update to the true price on the
|
|
41
|
+
// next frame.
|
|
42
|
+
collectible.Price = 15;
|
|
43
|
+
}
|
|
44
|
+
if (isQuestCollectible(collectibleType) && areFeaturesInitialized()) {
|
|
45
|
+
preventCollectibleRotation(collectible, collectibleType);
|
|
46
|
+
}
|
|
47
|
+
return collectible;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Helper function to spawn an empty collectible. Doing this is tricky since spawning a collectible
|
|
51
|
+
* with `CollectibleType.NULL` will result in spawning a collectible with a random type from the
|
|
52
|
+
* current room's item pool.
|
|
53
|
+
*
|
|
54
|
+
* Instead, this function arbitrarily spawns a collectible with `CollectibleType.SAD_ONION`, and
|
|
55
|
+
* then converts it to an empty pedestal afterward.
|
|
56
|
+
*
|
|
57
|
+
* @param position The position to spawn the empty collectible at.
|
|
58
|
+
* @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
|
|
59
|
+
* `RNG.Next` method will be called. Default is `getRandomSeed()`.
|
|
60
|
+
*/
|
|
61
|
+
export function spawnEmptyCollectible(position, seedOrRNG = getRandomSeed()) {
|
|
62
|
+
const collectible = spawnCollectible(CollectibleType.SAD_ONION, position, seedOrRNG, false, true);
|
|
63
|
+
setCollectibleEmpty(collectible);
|
|
64
|
+
return collectible;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhd25Db2xsZWN0aWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NwYXduQ29sbGVjdGlibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsVUFBVSxHQUNYLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTdDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsZUFBZ0MsRUFDaEMsUUFBZ0IsRUFDaEIsWUFBd0IsYUFBYSxFQUFFLEVBQ3ZDLE9BQU8sR0FBRyxLQUFLLEVBQ2YsYUFBYSxHQUFHLEtBQUssRUFDckIsT0FBZ0I7SUFFaEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FDckMsYUFBYSxDQUFDLFdBQVcsRUFDekIsZUFBZSxFQUNmLFFBQVEsRUFDUixJQUFJLEVBQ0osVUFBVSxFQUNWLE9BQU8sQ0FDbUIsQ0FBQztJQUU3QixJQUFJLE9BQU8sRUFBRTtRQUNYLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7S0FDcEM7SUFFRCxJQUNFLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ2hDLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDO1FBQ3BDLENBQUMsYUFBYSxFQUNkO1FBQ0EsK0ZBQStGO1FBQy9GLDhEQUE4RDtRQUU5RCxnR0FBZ0c7UUFDaEcsWUFBWTtRQUNaLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFNUIsNEZBQTRGO1FBQzVGLGNBQWM7UUFDZCxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQWlCLENBQUM7S0FDdkM7SUFFRCxJQUFJLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLHNCQUFzQixFQUFFLEVBQUU7UUFDbkUsMEJBQTBCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxRQUFnQixFQUNoQixZQUF3QixhQUFhLEVBQUU7SUFFdkMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQ2xDLGVBQWUsQ0FBQyxTQUFTLEVBQ3pCLFFBQVEsRUFDUixTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksQ0FDTCxDQUFDO0lBQ0YsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFakMsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyJ9
|
|
@@ -92,3 +92,5 @@ function ____exports.spawnEmptyCollectible(self, position, seedOrRNG)
|
|
|
92
92
|
return collectible
|
|
93
93
|
end
|
|
94
94
|
return ____exports
|
|
95
|
+
|
|
96
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NwYXduQ29sbGVjdGlibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZDQUtPO0FBSkw7QUFFQTtBQUNBO0FBRUYsc0JBQTJCO0FBQWxCO0FBQ1QsdUNBQTJDO0FBQWxDO0FBQ1QsZ0NBQXVDO0FBQTlCO0FBQ1QseUJBQW9DO0FBQTNCO0FBQ1QsMkJBQW1DO0FBQTFCO0FBQ1QsMkJBQW9DO0FBQTNCO0FBQ1QsbUJBQTRCO0FBQW5CO0FBQ1QsZ0JBQXFDO0FBQTVCO0FBQWU7Ozs7Ozs7Ozs7Ozs7OztBQWtCeEIsNENBQ0UsaUJBQ0EsVUFDQSxXQUNBLFNBQ0EsZUFDQTtPQUhBO1FBQUEsWUFBd0I7O09BQ3hCO1FBQUEsVUFBVTs7T0FDVjtRQUFBLGdCQUFnQjs7QUFHVixpQkFBTyxXQUFNLGVBQWEsVUFBVSxVQUFTO0FBQzdDLHdCQUFjOztRQUNsQjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O09BR0U7QUFDRix5Q0FBaUM7O09BSWpDLGlCQUFZLDZCQUNYLHdCQUFtQix5QkFDbkI7QUFPRCxrQ0FBMEI7QUFJMUIsNEJBQW9COztPQUdsQix3QkFBbUIscUJBQW9CO1FBQ3pDLGdDQUEyQixhQUFhOztBQUcxQyxXQUFPO0FBM0NUOzs7Ozs7Ozs7OztBQTBEQSxpREFDRSxVQUNBO09BQUE7UUFBQSxZQUF3Qjs7QUFFbEIsd0JBQWM7O1FBQ2xCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O0lBRUYseUJBQW9CO0FBRXBCLFdBQU87QUFiVCIsImZpbGUiOiJzcGF3bkNvbGxlY3RpYmxlLmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { EMPTY_PNG_PATH, VectorZero } from "../constants";
|
|
2
|
+
import { kColorEquals } from "./kColor";
|
|
3
|
+
import { erange } from "./utils";
|
|
4
|
+
/**
|
|
5
|
+
* Helper function to clear all layers or specific layers from a sprite.
|
|
6
|
+
*
|
|
7
|
+
* This function is variadic, so pass as many layer IDs as you want to clear. If no specific layers
|
|
8
|
+
* are passed, it will clear every layer.
|
|
9
|
+
*
|
|
10
|
+
* Since there is no official API method to "clear" a sprite, we can work around it by setting the
|
|
11
|
+
* spritesheet to a non-existent or completely transparent file. If the path to the spritesheet does
|
|
12
|
+
* not exist, then this function might cause spurious errors to appear in the "log.txt file". To
|
|
13
|
+
* silence these errors, create a transparent 1 pixel PNG file in your mod's resources folder at the
|
|
14
|
+
* path corresponding to the "EMPTY_PNG_PATH" constant.
|
|
15
|
+
*/
|
|
16
|
+
export function clearSprite(sprite, ...layerIDs) {
|
|
17
|
+
if (layerIDs.length === 0) {
|
|
18
|
+
const numLayers = sprite.GetLayerCount();
|
|
19
|
+
layerIDs = erange(numLayers);
|
|
20
|
+
}
|
|
21
|
+
for (const layerID of layerIDs) {
|
|
22
|
+
sprite.ReplaceSpritesheet(layerID, EMPTY_PNG_PATH);
|
|
23
|
+
}
|
|
24
|
+
sprite.LoadGraphics();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Helper function that returns the number of the final frame in a particular animation for a
|
|
28
|
+
* sprite. By default, it will use the currently playing animation, but you can also specify a
|
|
29
|
+
* specific animation to check.
|
|
30
|
+
*
|
|
31
|
+
* Note that this function is bugged with the Stop Watch or the Broken Watch, since using the
|
|
32
|
+
* `Sprite.SetFrame` method will reset the internal accumulator used to slow down the playback speed
|
|
33
|
+
* of the animation. (The `PlaybackSpeed` property of the sprite is not used.) Thus, it is only safe
|
|
34
|
+
* to use this function on animations that are not slowed down by Stop Watch or Broken Watch, such
|
|
35
|
+
* as player animations.
|
|
36
|
+
*/
|
|
37
|
+
export function getLastFrameOfAnimation(sprite, animation) {
|
|
38
|
+
// Record the current sprite status.
|
|
39
|
+
const currentAnimation = sprite.GetAnimation();
|
|
40
|
+
const currentFrame = sprite.GetFrame();
|
|
41
|
+
// Get the final frame.
|
|
42
|
+
if (animation !== undefined && animation !== currentAnimation) {
|
|
43
|
+
sprite.SetAnimation(animation);
|
|
44
|
+
}
|
|
45
|
+
sprite.SetLastFrame();
|
|
46
|
+
const finalFrame = sprite.GetFrame();
|
|
47
|
+
// Set the sprite back to the way it was.
|
|
48
|
+
if (animation !== undefined && animation !== currentAnimation) {
|
|
49
|
+
sprite.Play(currentAnimation, true);
|
|
50
|
+
}
|
|
51
|
+
sprite.SetFrame(currentFrame);
|
|
52
|
+
return finalFrame;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Helper function to check if two sprite layers have the same sprite sheet by using the
|
|
56
|
+
* `Sprite.GetTexel` method.
|
|
57
|
+
*
|
|
58
|
+
* Since checking every single texel in the entire sprite is very expensive, this function requires
|
|
59
|
+
* that you provide a range of specific texels to check.
|
|
60
|
+
*/
|
|
61
|
+
export function spriteEquals(sprite1, sprite2, layerID, xStart, xFinish, xIncrement, yStart, yFinish, yIncrement) {
|
|
62
|
+
// Iterate over N texels, checking for equality at each step. The center of the sprite is equal to
|
|
63
|
+
// the "pivot" point in the anm2 file.
|
|
64
|
+
for (let x = xStart; x <= xFinish; x += xIncrement) {
|
|
65
|
+
for (let y = yStart; y <= yFinish; y += yIncrement) {
|
|
66
|
+
const position = Vector(x, y);
|
|
67
|
+
if (!texelEquals(sprite1, sprite2, position, layerID)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
/** Helper function to check if two texels on a sprite are equivalent to each other. */
|
|
75
|
+
export function texelEquals(sprite1, sprite2, position, layerID) {
|
|
76
|
+
const kColor1 = sprite1.GetTexel(position, VectorZero, 1, layerID);
|
|
77
|
+
const kColor2 = sprite2.GetTexel(position, VectorZero, 1, layerID);
|
|
78
|
+
return kColorEquals(kColor1, kColor2);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvc3ByaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVqQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYyxFQUFFLEdBQUcsUUFBZTtJQUM1RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7UUFDOUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztLQUNwRDtJQUVELE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsTUFBYyxFQUNkLFNBQWtCO0lBRWxCLG9DQUFvQztJQUNwQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFdkMsdUJBQXVCO0lBQ3ZCLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssZ0JBQWdCLEVBQUU7UUFDN0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNoQztJQUNELE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFckMseUNBQXlDO0lBQ3pDLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssZ0JBQWdCLEVBQUU7UUFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyQztJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFOUIsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLE9BQWUsRUFDZixPQUFlLEVBQ2YsT0FBWSxFQUNaLE1BQVcsRUFDWCxPQUFZLEVBQ1osVUFBZSxFQUNmLE1BQVcsRUFDWCxPQUFZLEVBQ1osVUFBZTtJQUVmLGtHQUFrRztJQUNsRyxzQ0FBc0M7SUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRTtZQUNsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ3JELE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQWUsRUFDZixPQUFlLEVBQ2YsUUFBZ0IsRUFDaEIsT0FBWTtJQUVaLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRSxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQyJ9
|
package/functions/sprite.lua
CHANGED
|
@@ -87,3 +87,5 @@ function ____exports.spriteEquals(self, sprite1, sprite2, layerID, xStart, xFini
|
|
|
87
87
|
return true
|
|
88
88
|
end
|
|
89
89
|
return ____exports
|
|
90
|
+
|
|
91
|
+
--# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3Nwcml0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsc0JBQTJDO0FBQWxDO0FBQWdCO0FBQ3pCLG1CQUE2QjtBQUFwQjtBQUNULGtCQUF1QjtBQUFkOztBQStGVCx1Q0FDRSxTQUNBLFNBQ0EsVUFDQTtBQUVNLG9CQUFVLFFBQVEsU0FBUyxVQUFVLFlBQVksR0FBRztBQUNwRCxvQkFBVSxRQUFRLFNBQVMsVUFBVSxZQUFZLEdBQUc7QUFDMUQsV0FBTyxrQkFBYSxTQUFTO0FBUi9COzs7Ozs7Ozs7OztBQWpGQSx1Q0FBNEI7VUFBbUI7T0FDekMsYUFBb0I7QUFDaEIsMEJBQVksT0FBTztBQUN6QixtQkFBVyxZQUFPOztBQUdwQixjQUFXLGtCQUFXO1FBQ3BCLE9BQU8sbUJBQW1CLFNBQVM7O0lBR3JDLE9BQU87QUFWVDs7Ozs7Ozs7OztBQXdCQSxtREFDRSxRQUNBO0FBR00sNkJBQW1CLE9BQU87QUFDMUIseUJBQWUsT0FBTztPQUd4QixxQkFBMkIsYUFBYztRQUMzQyxPQUFPLGFBQWE7O0lBRXRCLE9BQU87QUFDRCx1QkFBYSxPQUFPO09BR3RCLHFCQUEyQixhQUFjO1FBQzNDLE9BQU8sS0FBSyxrQkFBa0I7O0lBRWhDLE9BQU8sU0FBUztBQUVoQixXQUFPO0FBckJUOzs7Ozs7QUErQkEsd0NBQ0UsU0FDQSxTQUNBLFNBQ0EsUUFDQSxTQUNBLFlBQ0EsUUFDQSxTQUNBOztBQUlTLGtCQUFJO2NBQVEsS0FBSzs7QUFDZiwwQkFBSTtzQkFBUSxLQUFLO0FBQ2xCLHFDQUFXLE9BQU8sR0FBRzsyQkFDdEI7O3dCQUFZO3dCQUFTO3dCQUFTO3dCQUFVOztBQUMzQywrQkFBTzs7QUFId0IsNEJBQUs7OztBQURQLG9CQUFLOzs7QUFTeEMsV0FBTztBQXRCVCIsImZpbGUiOiJzcHJpdGUubHVhIiwic291cmNlUm9vdCI6IiJ9
|