isaacscript-common 14.1.3 → 14.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +919 -141
- package/dist/isaacscript-common.lua +4752 -1790
- package/dist/src/callbacks.d.ts +102 -20
- package/dist/src/callbacks.d.ts.map +1 -1
- package/dist/src/callbacks.lua +124 -1
- package/dist/src/classes/ModFeature.d.ts.map +1 -1
- package/dist/src/classes/ModFeature.lua +22 -1
- package/dist/src/classes/ModUpgraded.d.ts +10 -5
- package/dist/src/classes/ModUpgraded.d.ts.map +1 -1
- package/dist/src/classes/ModUpgraded.lua +30 -11
- package/dist/src/classes/callbacks/PostCustomRevive.d.ts +5 -2
- package/dist/src/classes/callbacks/PostCustomRevive.d.ts.map +1 -1
- package/dist/src/classes/callbacks/PostCustomRevive.lua +12 -4
- package/dist/src/classes/callbacks/PostGridEntityBroken.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityCollision.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityCustomBroken.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityCustomCollision.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityCustomInit.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityCustomRemove.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityCustomRender.d.ts +6 -0
- package/dist/src/classes/callbacks/PostGridEntityCustomRender.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostGridEntityCustomRender.lua +17 -0
- package/dist/src/classes/callbacks/PostGridEntityCustomStateChanged.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityCustomUpdate.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityInit.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityRemove.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityRender.d.ts +6 -0
- package/dist/src/classes/callbacks/PostGridEntityRender.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostGridEntityRender.lua +17 -0
- package/dist/src/classes/callbacks/PostGridEntityStateChanged.lua +1 -1
- package/dist/src/classes/callbacks/PostGridEntityUpdate.lua +1 -1
- package/dist/src/classes/callbacks/PostHolyMantleRemoved.d.ts +1 -1
- package/dist/src/classes/callbacks/PostHolyMantleRemoved.d.ts.map +1 -1
- package/dist/src/classes/callbacks/PostHolyMantleRemoved.lua +3 -4
- package/dist/src/classes/callbacks/PostItemDischarge.d.ts +43 -0
- package/dist/src/classes/callbacks/PostItemDischarge.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostItemDischarge.lua +113 -0
- package/dist/src/classes/callbacks/PostItemPickup.d.ts +6 -0
- package/dist/src/classes/callbacks/PostItemPickup.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostItemPickup.lua +17 -0
- package/dist/src/classes/callbacks/PostLaserInitLate.d.ts +12 -0
- package/dist/src/classes/callbacks/PostLaserInitLate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostLaserInitLate.lua +27 -0
- package/dist/src/classes/callbacks/PostNPCInitLate.d.ts +12 -0
- package/dist/src/classes/callbacks/PostNPCInitLate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostNPCInitLate.lua +27 -0
- package/dist/src/classes/callbacks/PostNPCStateChanged.d.ts +14 -0
- package/dist/src/classes/callbacks/PostNPCStateChanged.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostNPCStateChanged.lua +33 -0
- package/dist/src/classes/callbacks/PostPickupCollect.d.ts +12 -0
- package/dist/src/classes/callbacks/PostPickupCollect.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPickupCollect.lua +35 -0
- package/dist/src/classes/callbacks/PostPickupInitFirst.d.ts +12 -0
- package/dist/src/classes/callbacks/PostPickupInitFirst.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPickupInitFirst.lua +32 -0
- package/dist/src/classes/callbacks/PostPickupInitLate.d.ts +12 -0
- package/dist/src/classes/callbacks/PostPickupInitLate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPickupInitLate.lua +27 -0
- package/dist/src/classes/callbacks/PostPickupStateChanged.d.ts +13 -0
- package/dist/src/classes/callbacks/PostPickupStateChanged.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPickupStateChanged.lua +33 -0
- package/dist/src/classes/callbacks/PostPitUpdate.d.ts +7 -0
- package/dist/src/classes/callbacks/PostPitUpdate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPitUpdate.lua +24 -0
- package/dist/src/classes/callbacks/PostPlayerChangeHealth.d.ts +15 -0
- package/dist/src/classes/callbacks/PostPlayerChangeHealth.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPlayerChangeHealth.lua +52 -0
- package/dist/src/classes/callbacks/PostPlayerChangeStat.d.ts +16 -0
- package/dist/src/classes/callbacks/PostPlayerChangeStat.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPlayerChangeStat.lua +94 -0
- package/dist/src/classes/callbacks/PostPlayerChangeType.d.ts +15 -0
- package/dist/src/classes/callbacks/PostPlayerChangeType.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPlayerChangeType.lua +37 -0
- package/dist/src/classes/callbacks/PostPlayerCollectibleAdded.d.ts +6 -0
- package/dist/src/classes/callbacks/PostPlayerCollectibleAdded.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPlayerCollectibleAdded.lua +17 -0
- package/dist/src/classes/callbacks/PostPlayerCollectibleRemoved.d.ts +6 -0
- package/dist/src/classes/callbacks/PostPlayerCollectibleRemoved.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPlayerCollectibleRemoved.lua +17 -0
- package/dist/src/classes/callbacks/PostPlayerInitFirst.d.ts +8 -0
- package/dist/src/classes/callbacks/PostPlayerInitFirst.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPlayerInitFirst.lua +39 -0
- package/dist/src/classes/callbacks/PostPlayerInitLate.d.ts +13 -0
- package/dist/src/classes/callbacks/PostPlayerInitLate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPlayerInitLate.lua +29 -0
- package/dist/src/classes/callbacks/PostPoopRender.d.ts +7 -0
- package/dist/src/classes/callbacks/PostPoopRender.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPoopRender.lua +24 -0
- package/dist/src/classes/callbacks/PostPoopUpdate.d.ts +7 -0
- package/dist/src/classes/callbacks/PostPoopUpdate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPoopUpdate.lua +24 -0
- package/dist/src/classes/callbacks/PostPressurePlateRender.d.ts +7 -0
- package/dist/src/classes/callbacks/PostPressurePlateRender.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPressurePlateRender.lua +24 -0
- package/dist/src/classes/callbacks/PostPressurePlateUpdate.d.ts +7 -0
- package/dist/src/classes/callbacks/PostPressurePlateUpdate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPressurePlateUpdate.lua +24 -0
- package/dist/src/classes/callbacks/PostProjectileInitLate.d.ts +12 -0
- package/dist/src/classes/callbacks/PostProjectileInitLate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostProjectileInitLate.lua +27 -0
- package/dist/src/classes/callbacks/PostPurchase.d.ts +18 -0
- package/dist/src/classes/callbacks/PostPurchase.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostPurchase.lua +56 -0
- package/dist/src/classes/callbacks/PostRockRender.d.ts +7 -0
- package/dist/src/classes/callbacks/PostRockRender.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostRockRender.lua +24 -0
- package/dist/src/classes/callbacks/PostRockUpdate.d.ts +7 -0
- package/dist/src/classes/callbacks/PostRockUpdate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostRockUpdate.lua +24 -0
- package/dist/src/classes/callbacks/PostSacrifice.d.ts +15 -0
- package/dist/src/classes/callbacks/PostSacrifice.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSacrifice.lua +52 -0
- package/dist/src/classes/callbacks/PostSlotAnimationChanged.d.ts +6 -0
- package/dist/src/classes/callbacks/PostSlotAnimationChanged.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSlotAnimationChanged.lua +17 -0
- package/dist/src/classes/callbacks/PostSlotCollision.d.ts +7 -0
- package/dist/src/classes/callbacks/PostSlotCollision.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSlotCollision.lua +25 -0
- package/dist/src/classes/callbacks/PostSlotDestroyed.d.ts +14 -0
- package/dist/src/classes/callbacks/PostSlotDestroyed.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSlotDestroyed.lua +65 -0
- package/dist/src/classes/callbacks/PostSlotInit.d.ts +6 -0
- package/dist/src/classes/callbacks/PostSlotInit.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSlotInit.lua +17 -0
- package/dist/src/classes/callbacks/PostSlotRender.d.ts +6 -0
- package/dist/src/classes/callbacks/PostSlotRender.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSlotRender.lua +17 -0
- package/dist/src/classes/callbacks/PostSlotUpdate.d.ts +6 -0
- package/dist/src/classes/callbacks/PostSlotUpdate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSlotUpdate.lua +17 -0
- package/dist/src/classes/callbacks/PostSpikesUpdate.d.ts +7 -0
- package/dist/src/classes/callbacks/PostSpikesUpdate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostSpikesUpdate.lua +24 -0
- package/dist/src/classes/callbacks/PostTNTRender.d.ts +7 -0
- package/dist/src/classes/callbacks/PostTNTRender.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostTNTRender.lua +24 -0
- package/dist/src/classes/callbacks/PostTNTUpdate.d.ts +7 -0
- package/dist/src/classes/callbacks/PostTNTUpdate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostTNTUpdate.lua +24 -0
- package/dist/src/classes/callbacks/PostTearInitLate.d.ts +12 -0
- package/dist/src/classes/callbacks/PostTearInitLate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostTearInitLate.lua +27 -0
- package/dist/src/classes/callbacks/PostTearInitVeryLate.d.ts +12 -0
- package/dist/src/classes/callbacks/PostTearInitVeryLate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostTearInitVeryLate.lua +30 -0
- package/dist/src/classes/callbacks/PostTransformation.d.ts +18 -0
- package/dist/src/classes/callbacks/PostTransformation.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PostTransformation.lua +53 -0
- package/dist/src/classes/callbacks/PreBerserkDeath.d.ts +1 -1
- package/dist/src/classes/callbacks/PreBerserkDeath.d.ts.map +1 -1
- package/dist/src/classes/callbacks/PreBerserkDeath.lua +3 -4
- package/dist/src/classes/callbacks/PreItemPickup.d.ts +6 -0
- package/dist/src/classes/callbacks/PreItemPickup.d.ts.map +1 -0
- package/dist/src/classes/callbacks/PreItemPickup.lua +17 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackCollectibleType.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackCollectibleType.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackCollectibleType.lua +19 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackItemPickup.d.ts +11 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackItemPickup.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackItemPickup.lua +22 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackLaser.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackLaser.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackLaser.lua +19 -0
- package/dist/src/classes/callbacks/validation/{CustomCallbackRevive.d.ts → CustomCallbackNPC.d.ts} +4 -4
- package/dist/src/classes/callbacks/validation/CustomCallbackNPC.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackNPC.lua +22 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPickup.d.ts +12 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPickup.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPickup.lua +22 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPlayer.d.ts +5 -2
- package/dist/src/classes/callbacks/validation/CustomCallbackPlayer.d.ts.map +1 -1
- package/dist/src/classes/callbacks/validation/CustomCallbackPoop.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPoop.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPoop.lua +20 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPressurePlate.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPressurePlate.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackPressurePlate.lua +20 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackProjectile.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackProjectile.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackProjectile.lua +19 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackRock.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackRock.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackRock.lua +20 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackSlot.d.ts +12 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackSlot.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackSlot.lua +19 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackSpikes.lua +4 -4
- package/dist/src/classes/callbacks/validation/CustomCallbackTNT.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackTNT.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackTNT.lua +20 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackTear.d.ts +10 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackTear.d.ts.map +1 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackTear.lua +19 -0
- package/dist/src/classes/features/callbackLogic/CustomGridEntities.d.ts +1 -1
- package/dist/src/classes/features/callbackLogic/CustomGridEntities.d.ts.map +1 -1
- package/dist/src/classes/features/callbackLogic/CustomGridEntities.lua +27 -30
- package/dist/src/classes/features/callbackLogic/CustomRevive.d.ts +2 -2
- package/dist/src/classes/features/callbackLogic/CustomRevive.d.ts.map +1 -1
- package/dist/src/classes/features/callbackLogic/CustomRevive.lua +6 -6
- package/dist/src/classes/features/callbackLogic/EsauJrDetection.d.ts.map +1 -1
- package/dist/src/classes/features/callbackLogic/GameReorderedCallbacks.d.ts.map +1 -1
- package/dist/src/classes/features/callbackLogic/GameReorderedCallbacks.lua +3 -18
- package/dist/src/classes/features/callbackLogic/GridEntityCollisionDetection.d.ts.map +1 -1
- package/dist/src/classes/features/callbackLogic/GridEntityRenderDetection.d.ts +12 -0
- package/dist/src/classes/features/callbackLogic/GridEntityRenderDetection.d.ts.map +1 -0
- package/dist/src/classes/features/callbackLogic/GridEntityRenderDetection.lua +33 -0
- package/dist/src/classes/features/callbackLogic/{GridEntityDetection.d.ts → GridEntityUpdateDetection.d.ts} +3 -3
- package/dist/src/classes/features/callbackLogic/GridEntityUpdateDetection.d.ts.map +1 -0
- package/dist/src/classes/features/callbackLogic/{GridEntityDetection.lua → GridEntityUpdateDetection.lua} +11 -14
- package/dist/src/classes/features/callbackLogic/ItemPickupDetection.d.ts +20 -0
- package/dist/src/classes/features/callbackLogic/ItemPickupDetection.d.ts.map +1 -0
- package/dist/src/classes/features/callbackLogic/ItemPickupDetection.lua +60 -0
- package/dist/src/classes/features/callbackLogic/PlayerCollectibleDetection.d.ts +47 -0
- package/dist/src/classes/features/callbackLogic/PlayerCollectibleDetection.d.ts.map +1 -0
- package/dist/src/classes/features/callbackLogic/PlayerCollectibleDetection.lua +154 -0
- package/dist/src/classes/features/callbackLogic/SlotRenderDetection.d.ts +18 -0
- package/dist/src/classes/features/callbackLogic/SlotRenderDetection.d.ts.map +1 -0
- package/dist/src/classes/features/callbackLogic/SlotRenderDetection.lua +51 -0
- package/dist/src/classes/features/callbackLogic/SlotUpdateDetection.d.ts +17 -0
- package/dist/src/classes/features/callbackLogic/SlotUpdateDetection.d.ts.map +1 -0
- package/dist/src/classes/features/callbackLogic/SlotUpdateDetection.lua +45 -0
- package/dist/src/classes/features/other/RunInNFrames.d.ts.map +1 -1
- package/dist/src/classes/features/other/RunInNFrames.lua +9 -0
- package/dist/src/classes/features/other/SaveDataManager.d.ts +215 -0
- package/dist/src/classes/features/other/SaveDataManager.d.ts.map +1 -0
- package/dist/src/classes/features/other/SaveDataManager.lua +190 -0
- package/dist/src/classes/features/other/saveDataManager/glowingHourGlass.d.ts +6 -0
- package/dist/src/classes/features/other/saveDataManager/glowingHourGlass.d.ts.map +1 -0
- package/dist/src/classes/features/other/saveDataManager/glowingHourGlass.lua +98 -0
- package/dist/src/classes/features/other/saveDataManager/loadFromDisk.d.ts +6 -0
- package/dist/src/classes/features/other/saveDataManager/loadFromDisk.d.ts.map +1 -0
- package/dist/src/classes/features/other/saveDataManager/loadFromDisk.lua +81 -0
- package/dist/src/classes/features/other/saveDataManager/restoreDefaults.d.ts +7 -0
- package/dist/src/classes/features/other/saveDataManager/restoreDefaults.d.ts.map +1 -0
- package/dist/src/classes/features/other/saveDataManager/restoreDefaults.lua +69 -0
- package/dist/src/classes/features/other/saveDataManager/saveToDisk.d.ts +5 -0
- package/dist/src/classes/features/other/saveDataManager/saveToDisk.d.ts.map +1 -0
- package/dist/src/classes/features/other/saveDataManager/saveToDisk.lua +46 -0
- package/dist/src/classes/private/CustomCallback.d.ts +2 -3
- package/dist/src/classes/private/CustomCallback.d.ts.map +1 -1
- package/dist/src/classes/private/CustomCallback.lua +2 -5
- package/dist/src/classes/private/Feature.d.ts +1 -0
- package/dist/src/classes/private/Feature.d.ts.map +1 -1
- package/dist/src/classes/private/Feature.lua +1 -0
- package/dist/src/core/upgradeMod.d.ts.map +1 -1
- package/dist/src/decorators.d.ts +1 -1
- package/dist/src/decorators.d.ts.map +1 -1
- package/dist/src/decorators.lua +6 -8
- package/dist/src/enums/ISCFeature.d.ts +15 -9
- package/dist/src/enums/ISCFeature.d.ts.map +1 -1
- package/dist/src/enums/ISCFeature.lua +30 -9
- package/dist/src/enums/ModCallbackCustom.d.ts +34 -20
- package/dist/src/enums/ModCallbackCustom.d.ts.map +1 -1
- package/dist/src/enums/ModCallbackCustom2.d.ts +61 -20
- package/dist/src/enums/ModCallbackCustom2.d.ts.map +1 -1
- package/dist/src/enums/ModCallbackCustom2.lua +102 -20
- package/dist/src/enums/{private/SerializationBrand.d.ts → SerializationBrand.d.ts} +6 -1
- package/dist/src/enums/SerializationBrand.d.ts.map +1 -0
- package/dist/src/enums/{private/SerializationBrand.lua → SerializationBrand.lua} +1 -0
- package/dist/src/features/customItemPool.d.ts +52 -0
- package/dist/src/features/customItemPool.d.ts.map +1 -0
- package/dist/src/features/customItemPool.lua +111 -0
- package/dist/src/features/deployJSONRoom.d.ts +6 -4
- package/dist/src/features/deployJSONRoom.d.ts.map +1 -1
- package/dist/src/features/deployJSONRoom.lua +6 -4
- package/dist/src/features/fadeInRemover.d.ts.map +1 -1
- package/dist/src/features/fadeInRemover.lua +4 -16
- package/dist/src/features/saveDataManager/exports.d.ts +14 -4
- package/dist/src/features/saveDataManager/exports.d.ts.map +1 -1
- package/dist/src/features/saveDataManager/exports.lua +38 -0
- package/dist/src/features/saveDataManager/load.d.ts +2 -1
- package/dist/src/features/saveDataManager/load.d.ts.map +1 -1
- package/dist/src/features/saveDataManager/load.lua +10 -4
- package/dist/src/features/saveDataManager/main.d.ts.map +1 -1
- package/dist/src/features/saveDataManager/main.lua +12 -5
- package/dist/src/features/saveDataManager/maps.d.ts +14 -0
- package/dist/src/features/saveDataManager/maps.d.ts.map +1 -1
- package/dist/src/features/saveDataManager/maps.lua +7 -0
- package/dist/src/features.d.ts +31 -12
- package/dist/src/features.d.ts.map +1 -1
- package/dist/src/features.lua +24 -6
- package/dist/src/functions/array.d.ts.map +1 -1
- package/dist/src/functions/array.lua +4 -5
- package/dist/src/functions/bitSet128.d.ts +2 -2
- package/dist/src/functions/bitSet128.lua +3 -3
- package/dist/src/functions/color.d.ts +2 -2
- package/dist/src/functions/color.lua +3 -3
- package/dist/src/functions/decorators.d.ts +21 -0
- package/dist/src/functions/decorators.d.ts.map +1 -1
- package/dist/src/functions/deepCopy.d.ts +11 -4
- package/dist/src/functions/deepCopy.d.ts.map +1 -1
- package/dist/src/functions/deepCopy.lua +84 -32
- package/dist/src/functions/deepCopyTests.lua +1 -1
- package/dist/src/functions/initArray.d.ts +4 -4
- package/dist/src/functions/initArray.d.ts.map +1 -1
- package/dist/src/functions/initArray.lua +6 -12
- package/dist/src/functions/jsonRoom.d.ts +11 -0
- package/dist/src/functions/jsonRoom.d.ts.map +1 -1
- package/dist/src/functions/jsonRoom.lua +11 -0
- package/dist/src/functions/kColor.d.ts +2 -2
- package/dist/src/functions/kColor.lua +3 -3
- package/dist/src/functions/merge.d.ts +40 -0
- package/dist/src/functions/merge.d.ts.map +1 -0
- package/dist/src/{features/saveDataManager → functions}/merge.lua +84 -37
- package/dist/src/functions/mergeTests.d.ts +1 -2
- package/dist/src/functions/mergeTests.d.ts.map +1 -1
- package/dist/src/functions/mergeTests.lua +3 -4
- package/dist/src/functions/rng.d.ts +2 -2
- package/dist/src/functions/rng.lua +3 -3
- package/dist/src/functions/serialization.d.ts.map +1 -1
- package/dist/src/functions/serialization.lua +22 -0
- package/dist/src/functions/tstlClass.d.ts +0 -10
- package/dist/src/functions/tstlClass.d.ts.map +1 -1
- package/dist/src/functions/tstlClass.lua +2 -42
- package/dist/src/functions/vector.d.ts +2 -2
- package/dist/src/functions/vector.lua +3 -3
- package/dist/src/functions/weighted.d.ts +12 -1
- package/dist/src/functions/weighted.d.ts.map +1 -1
- package/dist/src/functions/weighted.lua +27 -10
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.lua +24 -0
- package/dist/src/interfaces/SaveData.d.ts +3 -7
- package/dist/src/interfaces/SaveData.d.ts.map +1 -1
- package/dist/src/interfaces/SaveData.lua +0 -11
- package/dist/src/interfaces/private/AddCallbackParametersCustom2.d.ts +195 -2
- package/dist/src/interfaces/private/AddCallbackParametersCustom2.d.ts.map +1 -1
- package/dist/src/objects/isaacAPIClassTypeToBrand.d.ts +1 -1
- package/dist/src/objects/isaacAPIClassTypeToBrand.d.ts.map +1 -1
- package/dist/src/objects/isaacAPIClassTypeToBrand.lua +1 -1
- package/dist/src/types/AnyClass.d.ts +2 -0
- package/dist/src/types/AnyClass.d.ts.map +1 -0
- package/dist/src/types/AnyClass.lua +2 -0
- package/dist/src/types/AnyFunction.d.ts +6 -0
- package/dist/src/types/AnyFunction.d.ts.map +1 -0
- package/dist/src/types/AnyFunction.lua +2 -0
- package/dist/src/types/FunctionTuple.d.ts +2 -4
- package/dist/src/types/FunctionTuple.d.ts.map +1 -1
- package/dist/src/types/HasFunction.d.ts +5 -0
- package/dist/src/types/HasFunction.d.ts.map +1 -0
- package/dist/src/types/HasFunction.lua +2 -0
- package/package.json +1 -1
- package/src/callbacks.ts +88 -5
- package/src/classes/ModFeature.ts +31 -1
- package/src/classes/ModUpgraded.ts +49 -21
- package/src/classes/callbacks/PostCustomRevive.ts +22 -2
- package/src/classes/callbacks/PostGridEntityBroken.ts +1 -1
- package/src/classes/callbacks/PostGridEntityCollision.ts +1 -1
- package/src/classes/callbacks/PostGridEntityCustomBroken.ts +1 -1
- package/src/classes/callbacks/PostGridEntityCustomCollision.ts +1 -1
- package/src/classes/callbacks/PostGridEntityCustomInit.ts +1 -1
- package/src/classes/callbacks/PostGridEntityCustomRemove.ts +1 -1
- package/src/classes/callbacks/PostGridEntityCustomRender.ts +11 -0
- package/src/classes/callbacks/PostGridEntityCustomStateChanged.ts +1 -1
- package/src/classes/callbacks/PostGridEntityCustomUpdate.ts +1 -1
- package/src/classes/callbacks/PostGridEntityInit.ts +1 -1
- package/src/classes/callbacks/PostGridEntityRemove.ts +1 -1
- package/src/classes/callbacks/PostGridEntityRender.ts +11 -0
- package/src/classes/callbacks/PostGridEntityStateChanged.ts +1 -1
- package/src/classes/callbacks/PostGridEntityUpdate.ts +1 -1
- package/src/classes/callbacks/PostHolyMantleRemoved.ts +5 -8
- package/src/classes/callbacks/PostItemDischarge.ts +181 -0
- package/src/classes/callbacks/PostItemPickup.ts +11 -0
- package/src/classes/callbacks/PostLaserInitLate.ts +28 -0
- package/src/classes/callbacks/PostNPCInitLate.ts +28 -0
- package/src/classes/callbacks/PostNPCStateChanged.ts +37 -0
- package/src/classes/callbacks/PostPickupCollect.ts +37 -0
- package/src/classes/callbacks/PostPickupInitFirst.ts +34 -0
- package/src/classes/callbacks/PostPickupInitLate.ts +28 -0
- package/src/classes/callbacks/PostPickupStateChanged.ts +35 -0
- package/src/classes/callbacks/PostPitUpdate.ts +21 -0
- package/src/classes/callbacks/PostPlayerChangeHealth.ts +57 -0
- package/src/classes/callbacks/PostPlayerChangeStat.ts +102 -0
- package/src/classes/callbacks/PostPlayerChangeType.ts +44 -0
- package/src/classes/callbacks/PostPlayerCollectibleAdded.ts +11 -0
- package/src/classes/callbacks/PostPlayerCollectibleRemoved.ts +11 -0
- package/src/classes/callbacks/PostPlayerInitFirst.ts +44 -0
- package/src/classes/callbacks/PostPlayerInitLate.ts +32 -0
- package/src/classes/callbacks/PostPoopRender.ts +21 -0
- package/src/classes/callbacks/PostPoopUpdate.ts +21 -0
- package/src/classes/callbacks/PostPressurePlateRender.ts +21 -0
- package/src/classes/callbacks/PostPressurePlateUpdate.ts +21 -0
- package/src/classes/callbacks/PostProjectileInitLate.ts +28 -0
- package/src/classes/callbacks/PostPurchase.ts +87 -0
- package/src/classes/callbacks/PostRockRender.ts +21 -0
- package/src/classes/callbacks/PostRockUpdate.ts +21 -0
- package/src/classes/callbacks/PostSacrifice.ts +89 -0
- package/src/classes/callbacks/PostSlotAnimationChanged.ts +11 -0
- package/src/classes/callbacks/PostSlotCollision.ts +26 -0
- package/src/classes/callbacks/PostSlotDestroyed.ts +79 -0
- package/src/classes/callbacks/PostSlotInit.ts +11 -0
- package/src/classes/callbacks/PostSlotRender.ts +11 -0
- package/src/classes/callbacks/PostSlotUpdate.ts +11 -0
- package/src/classes/callbacks/PostSpikesUpdate.ts +21 -0
- package/src/classes/callbacks/PostTNTRender.ts +21 -0
- package/src/classes/callbacks/PostTNTUpdate.ts +21 -0
- package/src/classes/callbacks/PostTearInitLate.ts +28 -0
- package/src/classes/callbacks/PostTearInitVeryLate.ts +33 -0
- package/src/classes/callbacks/PostTransformation.ts +71 -0
- package/src/classes/callbacks/PreBerserkDeath.ts +5 -8
- package/src/classes/callbacks/PreItemPickup.ts +11 -0
- package/src/classes/callbacks/validation/CustomCallbackCollectibleType.ts +32 -0
- package/src/classes/callbacks/validation/CustomCallbackItemPickup.ts +48 -0
- package/src/classes/callbacks/validation/CustomCallbackLaser.ts +27 -0
- package/src/classes/callbacks/validation/CustomCallbackNPC.ts +34 -0
- package/src/classes/callbacks/validation/CustomCallbackPickup.ts +41 -0
- package/src/classes/callbacks/validation/CustomCallbackPlayer.ts +25 -2
- package/src/classes/callbacks/validation/CustomCallbackPoop.ts +28 -0
- package/src/classes/callbacks/validation/CustomCallbackPressurePlate.ts +31 -0
- package/src/classes/callbacks/validation/CustomCallbackProjectile.ts +28 -0
- package/src/classes/callbacks/validation/CustomCallbackRock.ts +30 -0
- package/src/classes/callbacks/validation/CustomCallbackSlot.ts +37 -0
- package/src/classes/callbacks/validation/CustomCallbackSpikes.ts +4 -4
- package/src/classes/callbacks/validation/CustomCallbackTNT.ts +28 -0
- package/src/classes/callbacks/validation/CustomCallbackTear.ts +27 -0
- package/src/classes/features/callbackLogic/CustomGridEntities.ts +32 -36
- package/src/classes/features/callbackLogic/CustomRevive.ts +14 -21
- package/src/classes/features/callbackLogic/EsauJrDetection.ts +0 -4
- package/src/classes/features/callbackLogic/GameReorderedCallbacks.ts +7 -9
- package/src/classes/features/callbackLogic/GridEntityCollisionDetection.ts +0 -4
- package/src/classes/features/callbackLogic/GridEntityRenderDetection.ts +42 -0
- package/src/classes/features/callbackLogic/{GridEntityDetection.ts → GridEntityUpdateDetection.ts} +4 -20
- package/src/classes/features/callbackLogic/ItemPickupDetection.ts +91 -0
- package/src/classes/features/callbackLogic/PlayerCollectibleDetection.ts +245 -0
- package/src/classes/features/callbackLogic/SlotRenderDetection.ts +64 -0
- package/src/classes/features/callbackLogic/SlotUpdateDetection.ts +57 -0
- package/src/classes/features/other/RunInNFrames.ts +7 -0
- package/src/classes/features/other/SaveDataManager.ts +492 -0
- package/src/classes/features/other/saveDataManager/glowingHourGlass.ts +138 -0
- package/src/classes/features/other/saveDataManager/loadFromDisk.ts +99 -0
- package/src/classes/features/other/saveDataManager/restoreDefaults.ts +116 -0
- package/src/classes/features/other/saveDataManager/saveToDisk.ts +70 -0
- package/src/classes/private/CustomCallback.ts +2 -6
- package/src/classes/private/Feature.ts +1 -0
- package/src/core/upgradeMod.ts +2 -4
- package/src/decorators.ts +17 -19
- package/src/enums/ISCFeature.ts +44 -39
- package/src/enums/ModCallbackCustom.ts +34 -20
- package/src/enums/ModCallbackCustom2.ts +53 -5
- package/src/enums/{private/SerializationBrand.ts → SerializationBrand.ts} +8 -2
- package/src/features/customItemPool.ts +133 -0
- package/src/features/deployJSONRoom.ts +6 -4
- package/src/features/fadeInRemover.ts +4 -22
- package/src/features/saveDataManager/exports.ts +62 -3
- package/src/features/saveDataManager/load.ts +4 -1
- package/src/features/saveDataManager/main.ts +5 -3
- package/src/features/saveDataManager/maps.ts +16 -0
- package/src/features.ts +39 -4
- package/src/functions/array.ts +8 -9
- package/src/functions/bitSet128.ts +3 -3
- package/src/functions/color.ts +3 -3
- package/src/functions/decorators.ts +22 -0
- package/src/functions/deepCopy.ts +83 -17
- package/src/functions/deepCopyTests.ts +1 -1
- package/src/functions/initArray.ts +6 -11
- package/src/functions/jsonRoom.ts +11 -0
- package/src/functions/kColor.ts +3 -3
- package/src/{features/saveDataManager → functions}/merge.ts +79 -45
- package/src/functions/mergeTests.ts +2 -3
- package/src/functions/rng.ts +3 -3
- package/src/functions/serialization.ts +25 -1
- package/src/functions/table.ts +1 -1
- package/src/functions/tstlClass.ts +3 -57
- package/src/functions/vector.ts +3 -3
- package/src/functions/weighted.ts +28 -11
- package/src/index.ts +5 -0
- package/src/interfaces/SaveData.ts +3 -34
- package/src/interfaces/private/AddCallbackParametersCustom2.ts +298 -7
- package/src/objects/isaacAPIClassTypeToBrand.ts +1 -1
- package/src/types/AnyClass.ts +1 -0
- package/src/types/AnyFunction.ts +5 -0
- package/src/types/FunctionTuple.ts +3 -4
- package/src/types/HasFunction.ts +7 -0
- package/dist/src/classes/callbacks/validation/CustomCallbackRevive.d.ts.map +0 -1
- package/dist/src/classes/callbacks/validation/CustomCallbackRevive.lua +0 -19
- package/dist/src/classes/features/callbackLogic/GridEntityDetection.d.ts.map +0 -1
- package/dist/src/enums/private/SerializationBrand.d.ts.map +0 -1
- package/dist/src/features/saveDataManager/merge.d.ts +0 -26
- package/dist/src/features/saveDataManager/merge.d.ts.map +0 -1
- package/dist/src/features/saveDataManager/serializationBrands.d.ts +0 -2
- package/dist/src/features/saveDataManager/serializationBrands.d.ts.map +0 -1
- package/dist/src/features/saveDataManager/serializationBrands.lua +0 -19
- package/dist/src/indexLua.d.ts +0 -199
- package/dist/src/indexLua.d.ts.map +0 -1
- package/dist/src/indexLua.lua +0 -1354
- package/src/classes/callbacks/validation/CustomCallbackRevive.ts +0 -27
- package/src/features/saveDataManager/serializationBrands.ts +0 -16
|
@@ -794,9 +794,11 @@ export enum ModCallbackCustom {
|
|
|
794
794
|
* This callback is useful because many attributes cannot be set or retrieved properly in the
|
|
795
795
|
* normal `POST_NPC_INIT` callback.
|
|
796
796
|
*
|
|
797
|
-
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method
|
|
798
|
-
* an optional third argument that will make the callback only fire if it
|
|
799
|
-
* provided.
|
|
797
|
+
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method:
|
|
798
|
+
* - You can provide an optional third argument that will make the callback only fire if it
|
|
799
|
+
* matches the `EntityType` provided.
|
|
800
|
+
* - You can provide an optional fourth argument that will make the callback only fire if it
|
|
801
|
+
* matches the variant provided.
|
|
800
802
|
*
|
|
801
803
|
* ```ts
|
|
802
804
|
* function postNPCInitLate(npc: EntityNPC): void {}
|
|
@@ -855,9 +857,11 @@ export enum ModCallbackCustom {
|
|
|
855
857
|
*
|
|
856
858
|
* Use this callback to know when a pickup is added to the player's inventory or health.
|
|
857
859
|
*
|
|
858
|
-
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method
|
|
859
|
-
* an optional third argument that will make the callback only fire if it
|
|
860
|
-
* `PickupVariant` provided.
|
|
860
|
+
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method:
|
|
861
|
+
* - You can provide an optional third argument that will make the callback only fire if it
|
|
862
|
+
* matches the `PickupVariant` provided.
|
|
863
|
+
* - You can provide an optional fourth argument that will make the callback only fire if it
|
|
864
|
+
* matches the sub-type provided.
|
|
861
865
|
*
|
|
862
866
|
* ```ts
|
|
863
867
|
* function postPickupCollect(pickup: EntityPickup, player: EntityPlayer): void {}
|
|
@@ -872,9 +876,11 @@ export enum ModCallbackCustom {
|
|
|
872
876
|
* This callback is useful because pickups will despawn upon leaving the room and respawn upon
|
|
873
877
|
* re-entering the room.
|
|
874
878
|
*
|
|
875
|
-
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method
|
|
876
|
-
* an optional third argument that will make the callback only fire if it
|
|
877
|
-
* `PickupVariant` provided.
|
|
879
|
+
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method:
|
|
880
|
+
* - You can provide an optional third argument that will make the callback only fire if it
|
|
881
|
+
* matches the `PickupVariant` provided.
|
|
882
|
+
* - You can provide an optional fourth argument that will make the callback only fire if it
|
|
883
|
+
* matches the sub-type provided.
|
|
878
884
|
*
|
|
879
885
|
* ```ts
|
|
880
886
|
* function postPickupInitFirst(pickup: EntityPickup): void {}
|
|
@@ -888,9 +894,11 @@ export enum ModCallbackCustom {
|
|
|
888
894
|
* This callback is useful because many attributes cannot be set or retrieved properly in the
|
|
889
895
|
* normal `POST_PICKUP_INIT` callback.
|
|
890
896
|
*
|
|
891
|
-
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method
|
|
892
|
-
* an optional third argument that will make the callback only fire if it
|
|
893
|
-
* `PickupVariant` provided.
|
|
897
|
+
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method:
|
|
898
|
+
* - You can provide an optional third argument that will make the callback only fire if it
|
|
899
|
+
* matches the `PickupVariant` provided.
|
|
900
|
+
* - You can provide an optional fourth argument that will make the callback only fire if it
|
|
901
|
+
* matches the sub-type provided.
|
|
894
902
|
*
|
|
895
903
|
* ```ts
|
|
896
904
|
* function postPickupInitLate(pickup: EntityPickup): void {}
|
|
@@ -902,9 +910,11 @@ export enum ModCallbackCustom {
|
|
|
902
910
|
* Fires from the `POST_PICKUP_UPDATE` callback when a pickup's state has changed from what it was
|
|
903
911
|
* on the previous frame. (In this context, "state" refers to the `EntityPickup.State` field.)
|
|
904
912
|
*
|
|
905
|
-
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method
|
|
906
|
-
* an optional third argument that will make the callback only fire if it
|
|
907
|
-
* `PickupVariant` provided.
|
|
913
|
+
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method:
|
|
914
|
+
* - You can provide an optional third argument that will make the callback only fire if it
|
|
915
|
+
* matches the `PickupVariant` provided.
|
|
916
|
+
* - You can provide an optional fourth argument that will make the callback only fire if it
|
|
917
|
+
* matches the sub-type provided.
|
|
908
918
|
*
|
|
909
919
|
* ```ts
|
|
910
920
|
* function postPickupStateChanged(
|
|
@@ -984,13 +994,13 @@ export enum ModCallbackCustom {
|
|
|
984
994
|
* matches the `PlayerType` provided.
|
|
985
995
|
*
|
|
986
996
|
* ```ts
|
|
987
|
-
* function postPlayerChangeStat(
|
|
997
|
+
* function postPlayerChangeStat<T extends StatType>(
|
|
988
998
|
* player: EntityPlayer,
|
|
989
|
-
* statType:
|
|
999
|
+
* statType: T,
|
|
990
1000
|
* difference: int,
|
|
991
|
-
* oldValue:
|
|
992
|
-
* newValue:
|
|
993
|
-
* )
|
|
1001
|
+
* oldValue: StatTypeType[T],
|
|
1002
|
+
* newValue: StatTypeType[T],
|
|
1003
|
+
* ) => void {}
|
|
994
1004
|
* ```
|
|
995
1005
|
*/
|
|
996
1006
|
POST_PLAYER_CHANGE_STAT,
|
|
@@ -1282,6 +1292,10 @@ export enum ModCallbackCustom {
|
|
|
1282
1292
|
* Fires from the `POST_UPDATE` callback when the clear state of a room changes (as according to
|
|
1283
1293
|
* the `Room.IsClear` method).
|
|
1284
1294
|
*
|
|
1295
|
+
* For example, this callback fires when you defeat all the enemies in a room (clear --> not
|
|
1296
|
+
* clear) or when you bomb an angel statue (not clear --> clear). This callback does not fire when
|
|
1297
|
+
* you travel between a cleared room and an uncleared room.
|
|
1298
|
+
*
|
|
1285
1299
|
* When registering the callback with the `ModUpgraded.AddCallbackCustom` method, you can provide
|
|
1286
1300
|
* an optional third argument that will make the callback only fire if the room clear state
|
|
1287
1301
|
* matches the boolean provided.
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
eslint isaacscript/member-ordering: ["warn", {
|
|
3
|
+
enums: {
|
|
4
|
+
memberTypes: ["method", "field"],
|
|
5
|
+
order: "alphabetically"
|
|
6
|
+
},
|
|
7
|
+
}]
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
/** TODO */
|
|
2
11
|
export enum ModCallbackCustom2 {
|
|
3
12
|
POST_AMBUSH_FINISHED,
|
|
@@ -29,29 +38,68 @@ export enum ModCallbackCustom2 {
|
|
|
29
38
|
POST_GRID_ENTITY_CUSTOM_COLLISION,
|
|
30
39
|
POST_GRID_ENTITY_CUSTOM_INIT,
|
|
31
40
|
POST_GRID_ENTITY_CUSTOM_REMOVE,
|
|
32
|
-
|
|
41
|
+
POST_GRID_ENTITY_CUSTOM_RENDER,
|
|
33
42
|
POST_GRID_ENTITY_CUSTOM_STATE_CHANGED,
|
|
34
43
|
POST_GRID_ENTITY_CUSTOM_UPDATE,
|
|
35
44
|
POST_GRID_ENTITY_INIT,
|
|
36
45
|
POST_GRID_ENTITY_REMOVE,
|
|
37
|
-
|
|
46
|
+
POST_GRID_ENTITY_RENDER,
|
|
38
47
|
POST_GRID_ENTITY_STATE_CHANGED,
|
|
39
48
|
POST_GRID_ENTITY_UPDATE,
|
|
40
49
|
POST_HOLY_MANTLE_REMOVED,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
50
|
+
POST_ITEM_DISCHARGE,
|
|
51
|
+
POST_ITEM_PICKUP,
|
|
44
52
|
POST_KNIFE_INIT_LATE,
|
|
53
|
+
POST_LASER_INIT_LATE,
|
|
45
54
|
POST_NEW_LEVEL_REORDERED,
|
|
46
55
|
POST_NEW_ROOM_EARLY,
|
|
47
56
|
POST_NEW_ROOM_REORDERED,
|
|
57
|
+
POST_NPC_INIT_LATE,
|
|
58
|
+
POST_NPC_STATE_CHANGED,
|
|
48
59
|
POST_PEFFECT_UPDATE_REORDERED,
|
|
60
|
+
POST_PICKUP_COLLECT,
|
|
61
|
+
POST_PICKUP_INIT_FIRST,
|
|
62
|
+
POST_PICKUP_INIT_LATE,
|
|
63
|
+
POST_PICKUP_STATE_CHANGED,
|
|
49
64
|
POST_PIT_RENDER,
|
|
65
|
+
POST_PIT_UPDATE,
|
|
66
|
+
POST_PLAYER_CHANGE_HEALTH,
|
|
67
|
+
POST_PLAYER_CHANGE_STAT,
|
|
68
|
+
POST_PLAYER_CHANGE_TYPE,
|
|
69
|
+
POST_PLAYER_COLLECTIBLE_ADDED,
|
|
70
|
+
POST_PLAYER_COLLECTIBLE_REMOVED,
|
|
50
71
|
POST_PLAYER_FATAL_DAMAGE,
|
|
72
|
+
POST_PLAYER_INIT_FIRST,
|
|
73
|
+
POST_PLAYER_INIT_LATE,
|
|
51
74
|
POST_PLAYER_RENDER_REORDERED,
|
|
52
75
|
POST_PLAYER_UPDATE_REORDERED,
|
|
76
|
+
POST_POOP_RENDER,
|
|
77
|
+
POST_POOP_UPDATE,
|
|
78
|
+
POST_PRESSURE_PLATE_RENDER,
|
|
79
|
+
POST_PRESSURE_PLATE_UPDATE,
|
|
80
|
+
POST_PROJECTILE_INIT_LATE,
|
|
81
|
+
POST_PURCHASE,
|
|
82
|
+
POST_ROCK_RENDER,
|
|
83
|
+
POST_ROCK_UPDATE,
|
|
53
84
|
POST_ROOM_CLEAR_CHANGED,
|
|
85
|
+
POST_SACRIFICE,
|
|
86
|
+
POST_SLOT_ANIMATION_CHANGED,
|
|
87
|
+
POST_SLOT_COLLISION,
|
|
88
|
+
POST_SLOT_DESTROYED,
|
|
89
|
+
POST_SLOT_INIT,
|
|
90
|
+
POST_SLOT_RENDER,
|
|
91
|
+
POST_SLOT_UPDATE,
|
|
54
92
|
POST_SPIKES_RENDER,
|
|
93
|
+
POST_SPIKES_UPDATE,
|
|
94
|
+
POST_TEAR_INIT_LATE,
|
|
95
|
+
POST_TEAR_INIT_VERY_LATE,
|
|
96
|
+
POST_TNT_RENDER,
|
|
97
|
+
POST_TNT_UPDATE,
|
|
98
|
+
POST_TRANSFORMATION,
|
|
99
|
+
|
|
100
|
+
// ---------------------
|
|
101
|
+
|
|
55
102
|
PRE_BERSERK_DEATH,
|
|
56
103
|
PRE_CUSTOM_REVIVE,
|
|
104
|
+
PRE_ITEM_PICKUP,
|
|
57
105
|
}
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
* constructor during deserialization.
|
|
7
7
|
*/
|
|
8
8
|
export enum SerializationBrand {
|
|
9
|
-
// Specific TSTL class brands
|
|
9
|
+
// Specific TSTL class brands.
|
|
10
10
|
DEFAULT_MAP = "__TSTL_DEFAULT_MAP",
|
|
11
11
|
MAP = "__TSTL_MAP",
|
|
12
12
|
SET = "__TSTL_SET",
|
|
13
13
|
|
|
14
|
-
// Specific Isaac API class brands
|
|
14
|
+
// Specific Isaac API class brands.
|
|
15
15
|
BIT_SET_128 = "__BIT_SET_128",
|
|
16
16
|
COLOR = "__COLOR",
|
|
17
17
|
K_COLOR = "__K_COLOR",
|
|
@@ -36,4 +36,10 @@ export enum SerializationBrand {
|
|
|
36
36
|
* to keep track of the mutation.
|
|
37
37
|
*/
|
|
38
38
|
OBJECT_WITH_NUMBER_KEYS = "__TSTL_OBJECT_WITH_NUMBER_KEYS",
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* This brand represents a user-defined class other than a `DefaultMap`, `Map`, or `Set`. It will
|
|
42
|
+
* have a string value that corresponds to the name of the class.
|
|
43
|
+
*/
|
|
44
|
+
TSTL_CLASS = "__TSTL_CLASS",
|
|
39
45
|
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { CollectibleType, ItemPoolType } from "isaac-typescript-definitions";
|
|
2
|
+
import { ModUpgraded } from "../classes/ModUpgraded";
|
|
3
|
+
import { ModCallbackCustom } from "../enums/ModCallbackCustom";
|
|
4
|
+
import { errorIfFeaturesNotInitialized } from "../featuresInitialized";
|
|
5
|
+
import { arrayRemoveIndexInPlace } from "../functions/array";
|
|
6
|
+
import { copyMap } from "../functions/map";
|
|
7
|
+
import { getRandomSeed } from "../functions/rng";
|
|
8
|
+
import { getRandomIndexFromWeightedArray } from "../functions/weighted";
|
|
9
|
+
import { WeightedArray } from "../types/WeightedArray";
|
|
10
|
+
import { saveDataManager } from "./saveDataManager/exports";
|
|
11
|
+
|
|
12
|
+
const FEATURE_NAME = "customItemPool";
|
|
13
|
+
|
|
14
|
+
const customItemPoolMap = new Map<
|
|
15
|
+
ItemPoolType,
|
|
16
|
+
WeightedArray<CollectibleType>
|
|
17
|
+
>();
|
|
18
|
+
|
|
19
|
+
const v = {
|
|
20
|
+
run: {
|
|
21
|
+
customItemPools: new Map<ItemPoolType, WeightedArray<CollectibleType>>(),
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** @internal */
|
|
26
|
+
export function customItemPoolsInit(mod: ModUpgraded): void {
|
|
27
|
+
saveDataManager(FEATURE_NAME, v);
|
|
28
|
+
|
|
29
|
+
mod.AddCallbackCustom(
|
|
30
|
+
ModCallbackCustom.POST_GAME_STARTED_REORDERED,
|
|
31
|
+
postGameStartedReordered,
|
|
32
|
+
); // 20
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ModCallbackCustom.POST_GAME_STARTED_REORDERED
|
|
36
|
+
function postGameStartedReordered(isContinued: boolean) {
|
|
37
|
+
if (isContinued) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
v.run.customItemPools = copyMap(customItemPoolMap);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Helper function to register a custom item pool. Use this function once when your mod first loads
|
|
46
|
+
* to declare the items that you want to be in the item pools. Then, in the middle of a run, you can
|
|
47
|
+
* use `getCustomItemPoolCollectible`.
|
|
48
|
+
*
|
|
49
|
+
* For example:
|
|
50
|
+
*
|
|
51
|
+
* ```ts
|
|
52
|
+
* const ItemPoolTypeCustom = {
|
|
53
|
+
* FOO = 0 as ItemPoolType,
|
|
54
|
+
* } as const;
|
|
55
|
+
*
|
|
56
|
+
* const FOO_ITEM_POOL = [
|
|
57
|
+
* [CollectibleType.SAD_ONION, 1],
|
|
58
|
+
* [CollectibleType.INNER_EYE, 0.5],
|
|
59
|
+
* ];
|
|
60
|
+
*
|
|
61
|
+
* registerCustomItemPool(ItemPoolTypeCustom.FOO, FOO_ITEM_POOL);
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* Note that custom item pools do not currently support partial weight decrementation on sight.
|
|
65
|
+
*
|
|
66
|
+
* @param itemPoolTypeCustom An integer that identifies what kind of item pool you are creating. It
|
|
67
|
+
* should correspond to a local enum value created in your mod. The
|
|
68
|
+
* integer can be any unique value and can safely overlap with the vanilla
|
|
69
|
+
* item pool type values.
|
|
70
|
+
* @param collectibles An array of weighted collectible tuples that represent the item pool that you
|
|
71
|
+
* are creating. The first element in he tuple is the `CollectibleType`, and the
|
|
72
|
+
* second element in the tuple is the float that represents the weight of the
|
|
73
|
+
* collectible.
|
|
74
|
+
*/
|
|
75
|
+
export function registerCustomItemPool(
|
|
76
|
+
itemPoolTypeCustom: ItemPoolType,
|
|
77
|
+
collectibles: WeightedArray<CollectibleType>,
|
|
78
|
+
): void {
|
|
79
|
+
errorIfFeaturesNotInitialized(FEATURE_NAME);
|
|
80
|
+
|
|
81
|
+
if (customItemPoolMap.has(itemPoolTypeCustom)) {
|
|
82
|
+
error(
|
|
83
|
+
`Failed to register a custom item pool since the provided type of ${itemPoolTypeCustom} was already registered.`,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
customItemPoolMap.set(itemPoolTypeCustom, collectibles);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Helper function to get a new collectible from a custom item pool created with the
|
|
92
|
+
* `registerCustomItemPool` function. This function has the same format as the
|
|
93
|
+
* `ItemPool.GetCollectible` method.
|
|
94
|
+
*
|
|
95
|
+
* By default, a collectible will not be removed from the pool once it is selected, unless the
|
|
96
|
+
* `decrease` argument is set to true (similar to how a vanilla item pool works).
|
|
97
|
+
*
|
|
98
|
+
* @param itemPoolTypeCustom An integer representing the custom item pool to use.
|
|
99
|
+
* @param decrease Optional. Whether or not to remove the selected collectible from the item pool.
|
|
100
|
+
* Default is true.
|
|
101
|
+
* @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
|
|
102
|
+
* `RNG.Next` method will be called. Default is `getRandomSeed()`.
|
|
103
|
+
* @param defaultItem Optional. The collectible to return if the item pool is depleted. Default is
|
|
104
|
+
* `CollectibleType.NULL`.
|
|
105
|
+
*/
|
|
106
|
+
export function getCustomItemPoolCollectible(
|
|
107
|
+
itemPoolTypeCustom: ItemPoolType,
|
|
108
|
+
decrease = false,
|
|
109
|
+
seedOrRNG: Seed | RNG = getRandomSeed(),
|
|
110
|
+
defaultItem = CollectibleType.NULL,
|
|
111
|
+
): CollectibleType {
|
|
112
|
+
const customItemPool = v.run.customItemPools.get(itemPoolTypeCustom);
|
|
113
|
+
if (customItemPool === undefined) {
|
|
114
|
+
error(`Failed to find the custom item pool of: ${itemPoolTypeCustom}`);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (customItemPool.length === 0) {
|
|
118
|
+
return defaultItem;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const randomIndex = getRandomIndexFromWeightedArray(
|
|
122
|
+
customItemPool,
|
|
123
|
+
seedOrRNG,
|
|
124
|
+
);
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
126
|
+
const tuple = customItemPool[randomIndex]!;
|
|
127
|
+
|
|
128
|
+
if (decrease) {
|
|
129
|
+
arrayRemoveIndexInPlace(customItemPool, randomIndex);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return tuple[0];
|
|
133
|
+
}
|
|
@@ -221,8 +221,9 @@ function respawnPersistentEntities() {
|
|
|
221
221
|
* Specifically, this will clear the current room of all entities and grid entities, and then spawn
|
|
222
222
|
* all of the entries and grid entities in the provided JSON room.
|
|
223
223
|
*
|
|
224
|
-
* You can create JSON rooms by using the
|
|
225
|
-
*
|
|
224
|
+
* A JSON room is simply an XML file converted to JSON. You can create JSON rooms by using the
|
|
225
|
+
* Basement Renovator room editor to create an XML file, and then convert it to JSON using the
|
|
226
|
+
* `convert-xml-to-json` tool (e.g. `npx convert-xml-to-json my-rooms.xml`).
|
|
226
227
|
*
|
|
227
228
|
* This function is meant to be used in the `POST_NEW_ROOM` callback.
|
|
228
229
|
*
|
|
@@ -283,8 +284,9 @@ export function deployJSONRoom(
|
|
|
283
284
|
* Specifically, this will clear the current room of all entities and grid entities, and then spawn
|
|
284
285
|
* all of the entries and grid entities in one of the provided JSON rooms.
|
|
285
286
|
*
|
|
286
|
-
* You can create JSON rooms by using the
|
|
287
|
-
*
|
|
287
|
+
* A JSON room is simply an XML file converted to JSON. You can create JSON rooms by using the
|
|
288
|
+
* Basement Renovator room editor to create an XML file, and then convert it to JSON using the
|
|
289
|
+
* `convert-xml-to-json` tool (e.g. `npx convert-xml-to-json my-rooms.xml`).
|
|
288
290
|
*
|
|
289
291
|
* This function is meant to be used in the `POST_NEW_ROOM` callback.
|
|
290
292
|
*
|
|
@@ -1,42 +1,24 @@
|
|
|
1
1
|
import { ModCallback } from "isaac-typescript-definitions";
|
|
2
2
|
import { game } from "../core/cachedClasses";
|
|
3
3
|
import { errorIfFeaturesNotInitialized } from "../featuresInitialized";
|
|
4
|
-
import { saveDataManager } from "./saveDataManager/exports";
|
|
5
4
|
|
|
6
5
|
const FEATURE_NAME = "fadeInRemover";
|
|
7
6
|
const FADE_IN_SPEED = 1;
|
|
8
7
|
|
|
9
8
|
let enabled = false;
|
|
10
9
|
|
|
11
|
-
const v = {
|
|
12
|
-
run: {
|
|
13
|
-
removedFadeIn: false,
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
|
|
17
10
|
/** @internal */
|
|
18
11
|
export function fadeInRemoverInit(mod: Mod): void {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
mod.AddCallback(ModCallback.POST_RENDER, postRender); // 2
|
|
12
|
+
mod.AddCallback(ModCallback.POST_GAME_STARTED, postGameStarted); // 15
|
|
22
13
|
}
|
|
23
14
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (shouldRemoveFadeIn()) {
|
|
30
|
-
v.run.removedFadeIn = true;
|
|
15
|
+
// ModCallback.POST_GAME_STARTED (15)
|
|
16
|
+
function postGameStarted(_isContinued: boolean) {
|
|
17
|
+
if (enabled) {
|
|
31
18
|
game.Fadein(FADE_IN_SPEED);
|
|
32
19
|
}
|
|
33
20
|
}
|
|
34
21
|
|
|
35
|
-
function shouldRemoveFadeIn() {
|
|
36
|
-
const gameFrameCount = game.GetFrameCount();
|
|
37
|
-
return !v.run.removedFadeIn && gameFrameCount === 0;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
22
|
/**
|
|
41
23
|
* Removes the fade-in that occurs at the beginning of a run. If this behavior is desired, call this
|
|
42
24
|
* function once at the beginning of your mod.
|
|
@@ -2,8 +2,10 @@ import { SaveDataKey } from "../../enums/SaveDataKey";
|
|
|
2
2
|
import { SerializationType } from "../../enums/SerializationType";
|
|
3
3
|
import { errorIfFeaturesNotInitialized } from "../../featuresInitialized";
|
|
4
4
|
import { deepCopy } from "../../functions/deepCopy";
|
|
5
|
-
import {
|
|
5
|
+
import { getTSTLClassName } from "../../functions/tstlClass";
|
|
6
|
+
import { isString, isTable } from "../../functions/types";
|
|
6
7
|
import { SaveData } from "../../interfaces/SaveData";
|
|
8
|
+
import { AnyClass } from "../../types/AnyClass";
|
|
7
9
|
import { SAVE_DATA_MANAGER_FEATURE_NAME } from "./constants";
|
|
8
10
|
import {
|
|
9
11
|
forceSaveDataManagerLoad,
|
|
@@ -14,9 +16,16 @@ import {
|
|
|
14
16
|
saveDataConditionalFuncMap,
|
|
15
17
|
saveDataDefaultsMap,
|
|
16
18
|
saveDataGlowingHourGlassMap,
|
|
19
|
+
saveDataManagerClassConstructors,
|
|
17
20
|
saveDataMap,
|
|
18
21
|
} from "./maps";
|
|
19
22
|
|
|
23
|
+
const NON_USER_DEFINED_CLASS_NAMES: ReadonlySet<string> = new Set([
|
|
24
|
+
"Map",
|
|
25
|
+
"Set",
|
|
26
|
+
"DefaultMap",
|
|
27
|
+
]);
|
|
28
|
+
|
|
20
29
|
/**
|
|
21
30
|
* This is the entry point to the save data manager, a system which provides two major features:
|
|
22
31
|
*
|
|
@@ -114,12 +123,14 @@ import {
|
|
|
114
123
|
* `EntityPtr`.
|
|
115
124
|
*/
|
|
116
125
|
export function saveDataManager<Persistent, Run, Level>(
|
|
117
|
-
|
|
126
|
+
// This is the overload for the standard case with serializable data.
|
|
127
|
+
key: string,
|
|
118
128
|
v: SaveData<Persistent, Run, Level>,
|
|
119
129
|
conditionalFunc?: () => boolean,
|
|
120
130
|
): void;
|
|
121
131
|
export function saveDataManager(
|
|
122
|
-
|
|
132
|
+
// This is the overload for the case when saving data is disabled.
|
|
133
|
+
key: string,
|
|
123
134
|
v: SaveData,
|
|
124
135
|
conditionalFunc: false,
|
|
125
136
|
): void;
|
|
@@ -142,6 +153,10 @@ export function saveDataManager<Persistent, Run, Level>(
|
|
|
142
153
|
);
|
|
143
154
|
}
|
|
144
155
|
|
|
156
|
+
// First, recursively look through the new save data for any classes, so we can register them with
|
|
157
|
+
// the save data manager.
|
|
158
|
+
storeClassConstructorsFromObject(v as LuaMap);
|
|
159
|
+
|
|
145
160
|
// Add the new save data to the map.
|
|
146
161
|
saveDataMap.set(key, v);
|
|
147
162
|
|
|
@@ -169,6 +184,26 @@ export function saveDataManager<Persistent, Run, Level>(
|
|
|
169
184
|
}
|
|
170
185
|
}
|
|
171
186
|
|
|
187
|
+
/** Recursively traverses an object, collecting all of the class constructors that it encounters. */
|
|
188
|
+
function storeClassConstructorsFromObject(luaMap: LuaMap<AnyNotNil, unknown>) {
|
|
189
|
+
const tstlClassName = getTSTLClassName(luaMap);
|
|
190
|
+
if (
|
|
191
|
+
tstlClassName !== undefined &&
|
|
192
|
+
!NON_USER_DEFINED_CLASS_NAMES.has(tstlClassName)
|
|
193
|
+
) {
|
|
194
|
+
saveDataManagerClassConstructors.set(
|
|
195
|
+
tstlClassName,
|
|
196
|
+
luaMap as unknown as AnyClass,
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
for (const [_key, value] of luaMap) {
|
|
201
|
+
if (isTable(value)) {
|
|
202
|
+
storeClassConstructorsFromObject(value);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
172
207
|
/**
|
|
173
208
|
* The save data manager will automatically load variables from disk at the appropriate times (i.e.
|
|
174
209
|
* when a new run is started). Use this function to explicitly force the save data manager to load
|
|
@@ -279,3 +314,27 @@ export function saveDataManagerRemove(key: string): void {
|
|
|
279
314
|
saveDataConditionalFuncMap.delete(key);
|
|
280
315
|
saveDataGlowingHourGlassMap.delete(key);
|
|
281
316
|
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* By default, the save data manager will not be able to serialize classes that are nested inside of
|
|
320
|
+
* maps, sets, and arrays, because it does not have access to the corresponding class constructor.
|
|
321
|
+
* If you want to use nested classes in this way, then use this function to register a class
|
|
322
|
+
* constructor with the save data manager. If the save data manager finds a registered class of the
|
|
323
|
+
* same name when deserializing, it will automatically run the registered constructor (in addition
|
|
324
|
+
* to copying over the data fields).
|
|
325
|
+
*
|
|
326
|
+
* This function is variadic, which means you can pass as many classes as you want to register.
|
|
327
|
+
*/
|
|
328
|
+
export function saveDataManagerRegisterClass(...tstlClasses: AnyClass[]): void {
|
|
329
|
+
for (const tstlClass of tstlClasses) {
|
|
330
|
+
const { name } = tstlClass;
|
|
331
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
332
|
+
if (name === undefined) {
|
|
333
|
+
error(
|
|
334
|
+
"Failed to register a class with the save data manager due to not being able to derive the name of the class.",
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
saveDataManagerClassConstructors.set(name, tstlClass);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { jsonDecode } from "../../functions/jsonHelpers";
|
|
2
2
|
import { log } from "../../functions/log";
|
|
3
3
|
import { logError } from "../../functions/logMisc";
|
|
4
|
+
import { merge } from "../../functions/merge";
|
|
4
5
|
import { iterateTableInOrder } from "../../functions/table";
|
|
5
6
|
import { isString, isTable } from "../../functions/types";
|
|
6
7
|
import { SaveData } from "../../interfaces/SaveData";
|
|
8
|
+
import { AnyClass } from "../../types/AnyClass";
|
|
7
9
|
import {
|
|
8
10
|
SAVE_DATA_MANAGER_DEBUG,
|
|
9
11
|
SAVE_DATA_MANAGER_FEATURE_NAME,
|
|
10
12
|
} from "./constants";
|
|
11
|
-
import { merge } from "./merge";
|
|
12
13
|
|
|
13
14
|
const DEFAULT_MOD_DATA = "{}";
|
|
14
15
|
|
|
15
16
|
export function loadFromDisk(
|
|
16
17
|
mod: Mod,
|
|
17
18
|
oldSaveData: LuaMap<string, SaveData>,
|
|
19
|
+
classConstructors: LuaMap<string, AnyClass>,
|
|
18
20
|
): void {
|
|
19
21
|
if (!mod.HasData()) {
|
|
20
22
|
// There is no "save#.dat" file for this save slot.
|
|
@@ -62,6 +64,7 @@ export function loadFromDisk(
|
|
|
62
64
|
oldSaveDataForSubscriber as LuaMap<AnyNotNil, unknown>,
|
|
63
65
|
saveData,
|
|
64
66
|
subscriberName,
|
|
67
|
+
classConstructors,
|
|
65
68
|
);
|
|
66
69
|
},
|
|
67
70
|
SAVE_DATA_MANAGER_DEBUG,
|
|
@@ -5,6 +5,7 @@ import { SaveDataKey } from "../../enums/SaveDataKey";
|
|
|
5
5
|
import { SerializationType } from "../../enums/SerializationType";
|
|
6
6
|
import { deepCopy } from "../../functions/deepCopy";
|
|
7
7
|
import { logError } from "../../functions/logMisc";
|
|
8
|
+
import { merge } from "../../functions/merge";
|
|
8
9
|
import { onFirstFloor } from "../../functions/stage";
|
|
9
10
|
import { clearTable, iterateTableInOrder } from "../../functions/table";
|
|
10
11
|
import { SaveData } from "../../interfaces/SaveData";
|
|
@@ -20,9 +21,9 @@ import {
|
|
|
20
21
|
saveDataConditionalFuncMap,
|
|
21
22
|
saveDataDefaultsMap,
|
|
22
23
|
saveDataGlowingHourGlassMap,
|
|
24
|
+
saveDataManagerClassConstructors,
|
|
23
25
|
saveDataMap,
|
|
24
26
|
} from "./maps";
|
|
25
|
-
import { merge } from "./merge";
|
|
26
27
|
import { saveToDisk } from "./save";
|
|
27
28
|
|
|
28
29
|
const RESETTABLE_SAVE_DATA_KEYS: ReadonlySet<SaveDataKey> = new Set([
|
|
@@ -82,7 +83,7 @@ function postPlayerInit(): void {
|
|
|
82
83
|
|
|
83
84
|
// We want to unconditionally load save data on every new run since there might be persistent data
|
|
84
85
|
// that is not tied to an individual run.
|
|
85
|
-
loadFromDisk(mod, saveDataMap);
|
|
86
|
+
loadFromDisk(mod, saveDataMap, saveDataManagerClassConstructors);
|
|
86
87
|
|
|
87
88
|
const gameFrameCount = game.GetFrameCount();
|
|
88
89
|
const isContinued = gameFrameCount !== 0;
|
|
@@ -246,6 +247,7 @@ function restoreGlowingHourGlassBackup() {
|
|
|
246
247
|
childTableBackup as LuaMap<AnyNotNil, unknown>,
|
|
247
248
|
// Append an arbitrary suffix for better error messages.
|
|
248
249
|
`${subscriberName}__glowingHourGlass`,
|
|
250
|
+
saveDataManagerClassConstructors,
|
|
249
251
|
);
|
|
250
252
|
}
|
|
251
253
|
},
|
|
@@ -347,5 +349,5 @@ export function forceSaveDataManagerLoad(): void {
|
|
|
347
349
|
return;
|
|
348
350
|
}
|
|
349
351
|
|
|
350
|
-
loadFromDisk(mod, saveDataMap);
|
|
352
|
+
loadFromDisk(mod, saveDataMap, saveDataManagerClassConstructors);
|
|
351
353
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SaveData } from "../../interfaces/SaveData";
|
|
2
|
+
import { AnyClass } from "../../types/AnyClass";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* The save data map is indexed by subscriber name. We use Lua tables instead of TypeScriptToLua
|
|
@@ -7,7 +8,16 @@ import { SaveData } from "../../interfaces/SaveData";
|
|
|
7
8
|
*/
|
|
8
9
|
export const saveDataMap = new LuaMap<string, SaveData>();
|
|
9
10
|
|
|
11
|
+
/**
|
|
12
|
+
* When mod feature data is initialized, we copy the initial values into a separate map so that we
|
|
13
|
+
* can restore them later on.
|
|
14
|
+
*/
|
|
10
15
|
export const saveDataDefaultsMap = new LuaMap<string, SaveData>();
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Each mod feature can optionally provide a function that can control whether or not the save data
|
|
19
|
+
* is written to disk.
|
|
20
|
+
*/
|
|
11
21
|
export const saveDataConditionalFuncMap = new LuaMap<string, () => boolean>();
|
|
12
22
|
|
|
13
23
|
/**
|
|
@@ -18,3 +28,9 @@ export const saveDataConditionalFuncMap = new LuaMap<string, () => boolean>();
|
|
|
18
28
|
* to restore it.
|
|
19
29
|
*/
|
|
20
30
|
export const saveDataGlowingHourGlassMap = new LuaMap<string, SaveData>();
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* End-users can register their classes with the save data manager for proper serialization when
|
|
34
|
+
* contained in nested maps, sets, and arrays.
|
|
35
|
+
*/
|
|
36
|
+
export const saveDataManagerClassConstructors = new LuaMap<string, AnyClass>();
|