isaacscript-common 87.9.7 → 87.9.8
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/cachedEnumValues.js +29 -32
- package/dist/callbackClasses.js +142 -289
- package/dist/callbacks.js +147 -183
- package/dist/classes/DefaultMap.js +4 -8
- package/dist/classes/ModFeature.js +21 -25
- package/dist/classes/ModUpgraded.js +43 -47
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +6 -10
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +7 -11
- package/dist/classes/callbacks/InputActionFilter.js +4 -8
- package/dist/classes/callbacks/InputActionPlayer.js +4 -8
- package/dist/classes/callbacks/PostAmbushFinished.js +10 -14
- package/dist/classes/callbacks/PostAmbushStarted.js +10 -14
- package/dist/classes/callbacks/PostBombExploded.js +8 -12
- package/dist/classes/callbacks/PostBombInitFilter.js +6 -10
- package/dist/classes/callbacks/PostBombInitLate.js +6 -10
- package/dist/classes/callbacks/PostBombRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostBombUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostBoneSwing.js +7 -11
- package/dist/classes/callbacks/PostCollectibleEmpty.js +6 -10
- package/dist/classes/callbacks/PostCursedTeleport.js +30 -34
- package/dist/classes/callbacks/PostCustomRevive.js +4 -8
- package/dist/classes/callbacks/PostDiceRoomActivated.js +9 -13
- package/dist/classes/callbacks/PostDoorRender.js +8 -12
- package/dist/classes/callbacks/PostDoorUpdate.js +8 -12
- package/dist/classes/callbacks/PostEffectInitFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectInitLate.js +6 -10
- package/dist/classes/callbacks/PostEffectRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectStateChanged.js +8 -12
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityKillFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityRemoveFilter.js +6 -10
- package/dist/classes/callbacks/PostEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarInitLate.js +6 -10
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +8 -12
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostFirstEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFirstFlip.js +4 -8
- package/dist/classes/callbacks/PostFlip.js +4 -8
- package/dist/classes/callbacks/PostGameEndFilter.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReordered.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +6 -10
- package/dist/classes/callbacks/PostGreedModeWave.js +7 -11
- package/dist/classes/callbacks/PostGridEntityBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +6 -10
- package/dist/classes/callbacks/PostGridEntityInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityUpdate.js +6 -10
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +15 -19
- package/dist/classes/callbacks/PostItemDischarge.js +23 -27
- package/dist/classes/callbacks/PostItemPickup.js +6 -10
- package/dist/classes/callbacks/PostKeyboardChanged.js +9 -13
- package/dist/classes/callbacks/PostKnifeInitFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeInitLate.js +6 -10
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitLate.js +6 -10
- package/dist/classes/callbacks/PostLaserRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCDeathFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitLate.js +6 -10
- package/dist/classes/callbacks/PostNPCRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCStateChanged.js +8 -12
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNewLevelReordered.js +6 -10
- package/dist/classes/callbacks/PostNewRoomEarly.js +17 -21
- package/dist/classes/callbacks/PostNewRoomReordered.js +6 -10
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPickupChanged.js +6 -10
- package/dist/classes/callbacks/PostPickupCollect.js +8 -12
- package/dist/classes/callbacks/PostPickupInitFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupInitFirst.js +10 -14
- package/dist/classes/callbacks/PostPickupInitLate.js +6 -10
- package/dist/classes/callbacks/PostPickupRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +4 -8
- package/dist/classes/callbacks/PostPickupStateChanged.js +8 -12
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPitRender.js +8 -12
- package/dist/classes/callbacks/PostPitUpdate.js +8 -12
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +14 -18
- package/dist/classes/callbacks/PostPlayerChangeStat.js +26 -30
- package/dist/classes/callbacks/PostPlayerChangeType.js +11 -15
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +6 -10
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +6 -10
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +24 -28
- package/dist/classes/callbacks/PostPlayerInitFirst.js +12 -16
- package/dist/classes/callbacks/PostPlayerInitLate.js +9 -13
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +6 -10
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPoopRender.js +8 -12
- package/dist/classes/callbacks/PostPoopUpdate.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateRender.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +8 -12
- package/dist/classes/callbacks/PostProjectileInitFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileInitLate.js +6 -10
- package/dist/classes/callbacks/PostProjectileKill.js +8 -12
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPurchase.js +21 -25
- package/dist/classes/callbacks/PostRockRender.js +8 -12
- package/dist/classes/callbacks/PostRockUpdate.js +8 -12
- package/dist/classes/callbacks/PostRoomClearChanged.js +9 -13
- package/dist/classes/callbacks/PostSacrifice.js +12 -16
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +6 -10
- package/dist/classes/callbacks/PostSlotCollision.js +8 -12
- package/dist/classes/callbacks/PostSlotDestroyed.js +6 -10
- package/dist/classes/callbacks/PostSlotInit.js +6 -10
- package/dist/classes/callbacks/PostSlotRender.js +6 -10
- package/dist/classes/callbacks/PostSlotUpdate.js +6 -10
- package/dist/classes/callbacks/PostSpikesRender.js +8 -12
- package/dist/classes/callbacks/PostSpikesUpdate.js +8 -12
- package/dist/classes/callbacks/PostTNTRender.js +8 -12
- package/dist/classes/callbacks/PostTNTUpdate.js +8 -12
- package/dist/classes/callbacks/PostTearInitFilter.js +6 -10
- package/dist/classes/callbacks/PostTearInitLate.js +6 -10
- package/dist/classes/callbacks/PostTearInitVeryLate.js +6 -10
- package/dist/classes/callbacks/PostTearKill.js +8 -12
- package/dist/classes/callbacks/PostTearRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostTearUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostTransformation.js +10 -14
- package/dist/classes/callbacks/PostTrinketBreak.js +16 -20
- package/dist/classes/callbacks/PostUsePillFilter.js +18 -22
- package/dist/classes/callbacks/PreBerserkDeath.js +14 -18
- package/dist/classes/callbacks/PreBombCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreCustomRevive.js +6 -10
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreGetPedestal.js +8 -12
- package/dist/classes/callbacks/PreItemPickup.js +6 -10
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PreNewLevel.js +10 -14
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreTearCollisionFilter.js +6 -10
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +46 -50
- package/dist/classes/features/callbackLogic/CustomRevive.js +28 -32
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +11 -15
- package/dist/classes/features/callbackLogic/FlipDetection.js +11 -15
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +26 -30
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +10 -14
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +6 -10
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +12 -16
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +17 -21
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +6 -10
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +39 -43
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +18 -22
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +17 -21
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +8 -12
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +9 -13
- package/dist/classes/features/other/CharacterHealthConversion.js +13 -17
- package/dist/classes/features/other/CharacterStats.js +9 -13
- package/dist/classes/features/other/CollectibleItemPoolType.js +17 -21
- package/dist/classes/features/other/CustomHotkeys.js +15 -19
- package/dist/classes/features/other/CustomItemPools.js +20 -24
- package/dist/classes/features/other/CustomPickups.js +15 -19
- package/dist/classes/features/other/CustomStages.js +116 -153
- package/dist/classes/features/other/CustomTrapdoors.js +119 -123
- package/dist/classes/features/other/DebugDisplay.js +77 -81
- package/dist/classes/features/other/DeployJSONRoom.js +65 -69
- package/dist/classes/features/other/DisableAllSound.js +14 -18
- package/dist/classes/features/other/DisableInputs.js +24 -28
- package/dist/classes/features/other/EdenStartingStatsHealth.js +36 -40
- package/dist/classes/features/other/ExtraConsoleCommands.js +65 -102
- package/dist/classes/features/other/FadeInRemover.js +9 -13
- package/dist/classes/features/other/FastReset.js +18 -22
- package/dist/classes/features/other/FlyingDetection.js +10 -14
- package/dist/classes/features/other/ForgottenSwitch.js +8 -12
- package/dist/classes/features/other/ItemPoolDetection.js +35 -39
- package/dist/classes/features/other/ModdedElementDetection.js +43 -47
- package/dist/classes/features/other/ModdedElementSets.js +135 -139
- package/dist/classes/features/other/NoSirenSteal.js +7 -11
- package/dist/classes/features/other/Pause.js +48 -52
- package/dist/classes/features/other/PersistentEntities.js +16 -20
- package/dist/classes/features/other/PickupIndexCreation.js +31 -35
- package/dist/classes/features/other/PlayerCollectibleTracking.js +18 -22
- package/dist/classes/features/other/PonyDetection.js +22 -26
- package/dist/classes/features/other/PressInput.js +10 -14
- package/dist/classes/features/other/PreventChildEntities.js +6 -10
- package/dist/classes/features/other/PreventGridEntityRespawn.js +34 -38
- package/dist/classes/features/other/RerunDetection.js +11 -15
- package/dist/classes/features/other/RoomClearFrame.js +11 -15
- package/dist/classes/features/other/RoomHistory.js +30 -34
- package/dist/classes/features/other/RunInNFrames.js +24 -28
- package/dist/classes/features/other/RunNextRoom.js +8 -12
- package/dist/classes/features/other/RunNextRun.js +8 -12
- package/dist/classes/features/other/SaveDataManager.js +61 -65
- package/dist/classes/features/other/SpawnRockAltRewards.js +115 -119
- package/dist/classes/features/other/StageHistory.js +76 -80
- package/dist/classes/features/other/StartAmbush.js +12 -16
- package/dist/classes/features/other/TaintedLazarusPlayers.js +10 -14
- package/dist/classes/features/other/UnlockAchievementsDetection.js +10 -14
- package/dist/classes/features/other/customStages/backdrop.js +68 -71
- package/dist/classes/features/other/customStages/constants.js +7 -10
- package/dist/classes/features/other/customStages/gridEntities.js +23 -30
- package/dist/classes/features/other/customStages/shadows.js +27 -30
- package/dist/classes/features/other/customStages/streakText.js +55 -60
- package/dist/classes/features/other/customStages/utils.js +13 -17
- package/dist/classes/features/other/customStages/v.js +4 -7
- package/dist/classes/features/other/customStages/versusScreen.js +46 -50
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +8 -12
- package/dist/classes/features/other/debugDisplay/utils.js +6 -10
- package/dist/classes/features/other/extraConsoleCommands/commands.js +411 -557
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +47 -57
- package/dist/classes/features/other/extraConsoleCommands/v.js +1 -4
- package/dist/classes/features/other/saveDataManager/constants.js +1 -4
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +17 -21
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +19 -22
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +20 -25
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +13 -16
- package/dist/classes/private/CustomCallback.js +4 -8
- package/dist/classes/private/Feature.js +1 -5
- package/dist/core/cachedClasses.js +12 -15
- package/dist/core/constants.js +126 -130
- package/dist/core/constantsFirstLast.js +22 -25
- package/dist/core/constantsVanilla.js +25 -28
- package/dist/core/upgradeMod.js +7 -10
- package/dist/decorators.js +6 -10
- package/dist/enums/AmbushType.js +2 -5
- package/dist/enums/CornerType.js +2 -5
- package/dist/enums/HealthType.js +2 -5
- package/dist/enums/ISCFeature.js +2 -5
- package/dist/enums/LadderSubTypeCustom.js +2 -5
- package/dist/enums/ModCallbackCustom.js +2 -5
- package/dist/enums/MysteriousPaperEffect.js +2 -5
- package/dist/enums/PlayerStat.js +2 -5
- package/dist/enums/PocketItemType.js +2 -5
- package/dist/enums/RockAltType.js +2 -5
- package/dist/enums/SaveDataKey.js +2 -5
- package/dist/enums/SerializationType.js +2 -5
- package/dist/enums/SlotDestructionType.js +2 -5
- package/dist/enums/private/GridEntityTypeCustom.js +1 -4
- package/dist/enums/private/SerializationBrand.js +2 -5
- package/dist/enums/private/StageTravelState.js +2 -5
- package/dist/enums/private/TrapdoorAnimation.js +2 -5
- package/dist/enums/private/UIStreakAnimation.js +2 -5
- package/dist/features.js +138 -141
- package/dist/functions/ambush.js +9 -12
- package/dist/functions/array.js +45 -76
- package/dist/functions/arrayLua.js +7 -16
- package/dist/functions/benchmark.js +4 -7
- package/dist/functions/bitSet128.js +19 -26
- package/dist/functions/bitwise.js +14 -23
- package/dist/functions/bombs.js +1 -4
- package/dist/functions/bosses.js +68 -85
- package/dist/functions/cards.js +44 -62
- package/dist/functions/challenges.js +28 -39
- package/dist/functions/characters.js +68 -87
- package/dist/functions/charge.js +41 -52
- package/dist/functions/chargeBar.js +2 -6
- package/dist/functions/collectibleTag.js +9 -13
- package/dist/functions/collectibles.js +133 -172
- package/dist/functions/color.js +29 -38
- package/dist/functions/console.js +4 -8
- package/dist/functions/curses.js +6 -10
- package/dist/functions/debugFunctions.js +7 -14
- package/dist/functions/decorators.js +13 -19
- package/dist/functions/deepCopy.js +96 -99
- package/dist/functions/deepCopyTests.js +56 -59
- package/dist/functions/dimensions.js +10 -14
- package/dist/functions/direction.js +22 -30
- package/dist/functions/doors.js +104 -154
- package/dist/functions/easing.js +30 -62
- package/dist/functions/effects.js +6 -10
- package/dist/functions/emptyRoom.js +30 -34
- package/dist/functions/entities.js +88 -115
- package/dist/functions/entitiesSpecific.js +83 -125
- package/dist/functions/entityTypes.js +3 -6
- package/dist/functions/enums.js +27 -41
- package/dist/functions/external.js +4 -8
- package/dist/functions/familiars.js +17 -25
- package/dist/functions/flag.js +10 -19
- package/dist/functions/frames.js +31 -51
- package/dist/functions/globals.js +26 -66
- package/dist/functions/gridEntities.js +231 -269
- package/dist/functions/gridEntitiesSpecific.js +86 -126
- package/dist/functions/gridIndex.js +8 -11
- package/dist/functions/hash.js +1 -4
- package/dist/functions/hex.js +7 -11
- package/dist/functions/input.js +65 -88
- package/dist/functions/isaacAPIClass.js +28 -53
- package/dist/functions/itemPool.js +39 -48
- package/dist/functions/jsonHelpers.js +5 -42
- package/dist/functions/jsonRoom.js +39 -46
- package/dist/functions/kColor.js +30 -39
- package/dist/functions/language.js +3 -6
- package/dist/functions/level.js +20 -26
- package/dist/functions/levelGrid.js +81 -108
- package/dist/functions/log.js +6 -12
- package/dist/functions/logEntities.js +49 -59
- package/dist/functions/logMisc.js +183 -214
- package/dist/functions/map.js +10 -20
- package/dist/functions/math.js +16 -31
- package/dist/functions/merge.js +48 -51
- package/dist/functions/mergeTests.js +34 -37
- package/dist/functions/minimap.js +34 -46
- package/dist/functions/modFeatures.js +1 -4
- package/dist/functions/newArray.js +5 -8
- package/dist/functions/nextStage.js +63 -67
- package/dist/functions/npcDataStructures.js +9 -20
- package/dist/functions/npcs.js +37 -45
- package/dist/functions/pickupVariants.js +26 -39
- package/dist/functions/pickups.js +43 -59
- package/dist/functions/pickupsSpecific.js +76 -118
- package/dist/functions/pills.js +52 -72
- package/dist/functions/playerCenter.js +13 -16
- package/dist/functions/playerCollectibles.js +59 -79
- package/dist/functions/playerDataStructures.js +18 -29
- package/dist/functions/playerEffects.js +12 -19
- package/dist/functions/playerHealth.js +91 -113
- package/dist/functions/playerIndex.js +22 -33
- package/dist/functions/playerTrinkets.js +31 -43
- package/dist/functions/players.js +87 -126
- package/dist/functions/pocketItems.js +33 -43
- package/dist/functions/positionVelocity.js +23 -32
- package/dist/functions/pressurePlate.js +7 -10
- package/dist/functions/projectiles.js +11 -15
- package/dist/functions/random.js +8 -13
- package/dist/functions/readOnly.js +3 -8
- package/dist/functions/render.js +7 -12
- package/dist/functions/revive.js +38 -45
- package/dist/functions/rng.js +31 -44
- package/dist/functions/rockAlt.js +18 -22
- package/dist/functions/roomData.js +24 -40
- package/dist/functions/roomGrid.js +17 -25
- package/dist/functions/roomShape.js +39 -55
- package/dist/functions/roomShapeWalls.js +67 -71
- package/dist/functions/roomTransition.js +13 -17
- package/dist/functions/rooms.js +181 -244
- package/dist/functions/run.js +29 -39
- package/dist/functions/seeds.js +6 -10
- package/dist/functions/serialization.js +27 -34
- package/dist/functions/set.js +24 -40
- package/dist/functions/slots.js +18 -22
- package/dist/functions/sort.js +9 -15
- package/dist/functions/sound.js +12 -16
- package/dist/functions/spawnCollectible.js +21 -26
- package/dist/functions/sprites.js +16 -24
- package/dist/functions/stage.js +122 -164
- package/dist/functions/stats.js +37 -43
- package/dist/functions/storyBosses.js +36 -40
- package/dist/functions/string.js +19 -33
- package/dist/functions/table.js +21 -31
- package/dist/functions/tears.js +6 -14
- package/dist/functions/transformations.js +35 -42
- package/dist/functions/trinketGive.js +29 -36
- package/dist/functions/trinkets.js +45 -60
- package/dist/functions/tstlClass.js +11 -20
- package/dist/functions/types.js +22 -46
- package/dist/functions/ui.js +25 -40
- package/dist/functions/utils.js +22 -36
- package/dist/functions/vector.js +33 -46
- package/dist/functions/versusScreen.js +12 -18
- package/dist/functions/weighted.js +8 -12
- package/dist/index.js +150 -166
- package/dist/indexLua.js +151 -167
- package/dist/interfaces/ChargeBarSprites.js +1 -2
- package/dist/interfaces/Corner.js +1 -2
- package/dist/interfaces/CustomStageTSConfig.js +1 -2
- package/dist/interfaces/GridEntityCustomData.js +1 -2
- package/dist/interfaces/JSONRoomsFile.js +1 -2
- package/dist/interfaces/PlayerHealth.js +1 -2
- package/dist/interfaces/PlayerStats.js +2 -4
- package/dist/interfaces/PocketItemDescription.js +1 -2
- package/dist/interfaces/RoomDescription.js +1 -2
- package/dist/interfaces/SaveData.js +1 -2
- package/dist/interfaces/StageHistoryEntry.js +1 -2
- package/dist/interfaces/TSTLClassMetatable.js +1 -2
- package/dist/interfaces/TrinketSituation.js +1 -2
- package/dist/interfaces/private/AddCallbackParametersCustom.js +2 -4
- package/dist/interfaces/private/CustomStage.js +1 -2
- package/dist/interfaces/private/CustomTrapdoorDescription.js +1 -2
- package/dist/interfaces/private/ModUpgradedInterface.js +1 -2
- package/dist/isaacscript-common.lua +1 -1
- package/dist/maps/PHDPillConversionsMap.js +19 -22
- package/dist/maps/cardNameToTypeMap.js +205 -208
- package/dist/maps/characterNameToTypeMap.js +85 -88
- package/dist/maps/collectibleNameToTypeMap.js +5 -8
- package/dist/maps/defaultPlayerStatMap.js +10 -13
- package/dist/maps/entityTypeVariantToBossIDMap.js +3 -6
- package/dist/maps/falsePHDPillConversionsMap.js +33 -36
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +15 -18
- package/dist/maps/gridEntityXMLMap.js +52 -55
- package/dist/maps/itemPoolTypeToItemPoolName.js +33 -36
- package/dist/maps/keyboardToStringMap.js +66 -69
- package/dist/maps/pillNameToEffectMap.js +83 -86
- package/dist/maps/roomNameToTypeMap.js +38 -41
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +9 -12
- package/dist/maps/transformationNameToPlayerFormMap.js +30 -33
- package/dist/maps/trinketNameToTypeMap.js +5 -8
- package/dist/objects/LRoomShapeToRectangles.js +22 -25
- package/dist/objects/backdropTypeToRockAltType.js +65 -68
- package/dist/objects/batteryNames.js +8 -11
- package/dist/objects/bombNames.js +11 -14
- package/dist/objects/bossIDToEntityTypeVariant.js +116 -119
- package/dist/objects/bossNamePNGFileNames.js +104 -107
- package/dist/objects/bossNames.js +105 -108
- package/dist/objects/bossPortraitPNGFileNames.js +104 -107
- package/dist/objects/cardDescriptions.js +101 -104
- package/dist/objects/cardNames.js +101 -104
- package/dist/objects/challengeBosses.js +49 -52
- package/dist/objects/challengeCharacters.js +49 -52
- package/dist/objects/challengeCollectibleTypes.js +160 -163
- package/dist/objects/challengeNames.js +49 -52
- package/dist/objects/challengeTrinketType.js +48 -51
- package/dist/objects/characterDamageMultipliers.js +44 -47
- package/dist/objects/characterNames.js +44 -47
- package/dist/objects/characterSpritePNGFileNames.js +44 -47
- package/dist/objects/characterStartingCollectibleTypes.js +49 -52
- package/dist/objects/characterStartingTrinketTypes.js +44 -47
- package/dist/objects/chestNames.js +15 -18
- package/dist/objects/coinNames.js +11 -14
- package/dist/objects/coinSubTypeToValue.js +11 -14
- package/dist/objects/collectibleDescriptions.js +725 -728
- package/dist/objects/collectibleNames.js +725 -728
- package/dist/objects/colors.js +1 -4
- package/dist/objects/directionNames.js +7 -10
- package/dist/objects/directionToDegrees.js +7 -10
- package/dist/objects/directionToMoveAction.js +7 -10
- package/dist/objects/directionToShootAction.js +7 -10
- package/dist/objects/directionToVector.js +9 -12
- package/dist/objects/doorSlotFlagToDoorSlot.js +11 -14
- package/dist/objects/doorSlotToDirection.js +11 -14
- package/dist/objects/doorSlotToDoorSlotFlag.js +11 -14
- package/dist/objects/gridEntityTypeToANM2Name.js +30 -33
- package/dist/objects/heartNames.js +16 -19
- package/dist/objects/isaacAPIClassTypeToBrand.js +8 -11
- package/dist/objects/isaacAPIClassTypeToFunctions.js +37 -40
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +9 -45
- package/dist/objects/kColors.js +1 -4
- package/dist/objects/keyNames.js +8 -11
- package/dist/objects/languageNames.js +9 -12
- package/dist/objects/oppositeDoorSlots.js +11 -14
- package/dist/objects/pillEffectClasses.js +53 -56
- package/dist/objects/pillEffectNames.js +53 -56
- package/dist/objects/pillEffectTypeToPillEffects.js +11 -14
- package/dist/objects/pillEffectTypes.js +53 -56
- package/dist/objects/playerNamePNGFileNames.js +44 -47
- package/dist/objects/playerPortraitPNGFileNames.js +44 -47
- package/dist/objects/roomShapeBounds.js +23 -26
- package/dist/objects/roomShapeCorners.js +128 -131
- package/dist/objects/roomShapeLayoutSizes.js +23 -26
- package/dist/objects/roomShapeToBottomRightPosition.js +17 -20
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +78 -81
- package/dist/objects/roomShapeToDoorSlots.js +48 -51
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +82 -85
- package/dist/objects/roomShapeToGridWidth.js +14 -17
- package/dist/objects/roomShapeToTopLeftPosition.js +18 -21
- package/dist/objects/roomShapeVolumes.js +21 -24
- package/dist/objects/roomTypeNames.js +32 -35
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +32 -35
- package/dist/objects/sackNames.js +6 -9
- package/dist/objects/slotNames.js +21 -24
- package/dist/objects/stageIDNames.js +33 -36
- package/dist/objects/stageToMusic.js +69 -72
- package/dist/objects/stageToStageID.js +90 -93
- package/dist/objects/stageTypeSuffixes.js +8 -11
- package/dist/objects/transformationNames.js +16 -19
- package/dist/objects/trinketDescriptions.js +192 -195
- package/dist/objects/trinketNames.js +192 -195
- package/dist/objects/versusScreenBackgroundColors.js +39 -42
- package/dist/objects/versusScreenDirtSpotColors.js +39 -42
- package/dist/patchErrorFunctions.js +4 -7
- package/dist/serialization.js +6 -9
- package/dist/sets/LRoomShapesSet.js +7 -10
- package/dist/sets/bigRoomShapesSet.js +10 -13
- package/dist/sets/bossSets.js +261 -264
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +14 -17
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +5 -8
- package/dist/sets/charactersWithFreeDevilDealsSet.js +3 -6
- package/dist/sets/charactersWithNoRedHeartsSet.js +11 -14
- package/dist/sets/charactersWithNoSoulHeartsSet.js +8 -11
- package/dist/sets/consoleCommandsSet.js +2 -5
- package/dist/sets/entitiesWithArmorSet.js +44 -47
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +11 -14
- package/dist/sets/itemConfigCardTypesForCards.js +7 -10
- package/dist/sets/lostStyleCharactersSet.js +8 -11
- package/dist/sets/mineShaftRoomSubTypesSet.js +8 -11
- package/dist/sets/narrowRoomShapesSet.js +7 -10
- package/dist/sets/poopGridEntityXMLTypesSet.js +12 -15
- package/dist/sets/redHeartSubTypesSet.js +6 -9
- package/dist/sets/repentanceBossIDsSet.js +26 -29
- package/dist/sets/sinEntityTypesSet.js +10 -13
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +11 -14
- package/dist/shaderCrashFix.js +4 -7
- package/dist/shouldFire.js +28 -58
- package/dist/types/AddSubtract.js +1 -2
- package/dist/types/AllButFirst.js +1 -2
- package/dist/types/AllButLast.js +1 -2
- package/dist/types/AnyClass.js +1 -2
- package/dist/types/AnyEntity.js +1 -2
- package/dist/types/AnyFunction.js +1 -2
- package/dist/types/AnyGridEntity.js +1 -2
- package/dist/types/CompositionTypeSatisfiesEnum.js +1 -2
- package/dist/types/ConversionHeartSubType.js +1 -2
- package/dist/types/Decrement.js +1 -2
- package/dist/types/ERange.js +1 -2
- package/dist/types/EntityID.js +1 -2
- package/dist/types/FunctionTuple.js +1 -2
- package/dist/types/GridEntityID.js +1 -2
- package/dist/types/HasFunction.js +1 -2
- package/dist/types/IRange.js +1 -2
- package/dist/types/Immutable.js +1 -2
- package/dist/types/Increment.js +1 -2
- package/dist/types/LowercaseKeys.js +1 -2
- package/dist/types/NaturalNumbersLessThan.js +1 -2
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +1 -2
- package/dist/types/ObjectValues.js +1 -2
- package/dist/types/PickingUpItem.js +15 -22
- package/dist/types/PickupIndex.js +1 -2
- package/dist/types/PlayerIndex.js +1 -2
- package/dist/types/PossibleStatType.js +1 -2
- package/dist/types/PublicInterface.js +1 -2
- package/dist/types/ReadonlyMap.js +1 -4
- package/dist/types/ReadonlyRecord.js +1 -2
- package/dist/types/ReadonlySet.js +1 -4
- package/dist/types/StartsWithLowercase.js +1 -2
- package/dist/types/StartsWithUppercase.js +1 -2
- package/dist/types/TSTLClass.js +1 -2
- package/dist/types/Tuple.js +1 -2
- package/dist/types/TupleKeys.js +1 -2
- package/dist/types/TupleToIntersection.js +1 -2
- package/dist/types/TupleToUnion.js +1 -2
- package/dist/types/TupleWithLengthBetween.js +1 -2
- package/dist/types/TupleWithMaxLength.js +1 -2
- package/dist/types/UnionToIntersection.js +1 -2
- package/dist/types/UppercaseKeys.js +1 -2
- package/dist/types/WeightedArray.js +1 -2
- package/dist/types/WidenLiteral.js +1 -2
- package/dist/types/Writable.js +1 -2
- package/dist/types/private/CallbackTuple.js +1 -2
- package/dist/types/private/ModUpgradedWithFeatures.js +1 -2
- package/package.json +3 -3
|
@@ -1,45 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
exports.hasArmor = hasArmor;
|
|
15
|
-
exports.isActiveEnemy = isActiveEnemy;
|
|
16
|
-
exports.isEntityMoving = isEntityMoving;
|
|
17
|
-
exports.parseEntityID = parseEntityID;
|
|
18
|
-
exports.parseEntityTypeVariantString = parseEntityTypeVariantString;
|
|
19
|
-
exports.removeAllMatchingEntities = removeAllMatchingEntities;
|
|
20
|
-
exports.removeEntities = removeEntities;
|
|
21
|
-
exports.rerollEnemy = rerollEnemy;
|
|
22
|
-
exports.setEntityDamageFlash = setEntityDamageFlash;
|
|
23
|
-
exports.setEntityOpacity = setEntityOpacity;
|
|
24
|
-
exports.setEntityRandomColor = setEntityRandomColor;
|
|
25
|
-
exports.spawn = spawn;
|
|
26
|
-
exports.spawnEntityID = spawnEntityID;
|
|
27
|
-
exports.spawnWithSeed = spawnWithSeed;
|
|
28
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
29
|
-
const cachedClasses_1 = require("../core/cachedClasses");
|
|
30
|
-
const constants_1 = require("../core/constants");
|
|
31
|
-
const entitiesWithArmorSet_1 = require("../sets/entitiesWithArmorSet");
|
|
32
|
-
const isaacAPIClass_1 = require("./isaacAPIClass");
|
|
33
|
-
const random_1 = require("./random");
|
|
34
|
-
const readOnly_1 = require("./readOnly");
|
|
35
|
-
const rng_1 = require("./rng");
|
|
36
|
-
const sprites_1 = require("./sprites");
|
|
37
|
-
const tstlClass_1 = require("./tstlClass");
|
|
38
|
-
const types_1 = require("./types");
|
|
39
|
-
const utils_1 = require("./utils");
|
|
40
|
-
const vector_1 = require("./vector");
|
|
1
|
+
import { EntityFlag, EntityType, MotherVariant, NPCState, UltraGreedState, UltraGreedVariant, UltraGreedierState, } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../core/cachedClasses";
|
|
3
|
+
import { VectorZero } from "../core/constants";
|
|
4
|
+
import { ENTITIES_WITH_ARMOR_SET } from "../sets/entitiesWithArmorSet";
|
|
5
|
+
import { getIsaacAPIClassName } from "./isaacAPIClass";
|
|
6
|
+
import { getRandom } from "./random";
|
|
7
|
+
import { newReadonlyColor } from "./readOnly";
|
|
8
|
+
import { getRandomSeed, isRNG, newRNG } from "./rng";
|
|
9
|
+
import { setSpriteOpacity } from "./sprites";
|
|
10
|
+
import { isTSTLSet } from "./tstlClass";
|
|
11
|
+
import { asNPCState, isPrimitive, parseIntSafe } from "./types";
|
|
12
|
+
import { assertDefined } from "./utils";
|
|
13
|
+
import { doesVectorHaveLength, isVector, vectorToString } from "./vector";
|
|
41
14
|
/** From DeadInfinity. */
|
|
42
|
-
const DAMAGE_FLASH_COLOR =
|
|
15
|
+
const DAMAGE_FLASH_COLOR = newReadonlyColor(0.5, 0.5, 0.5, 1, 200 / 255, 0, 0);
|
|
43
16
|
/**
|
|
44
17
|
* Helper function to count the number of entities in room. Use this over the vanilla
|
|
45
18
|
* `Isaac.CountEntities` method to avoid having to specify a spawner and to handle ignoring charmed
|
|
@@ -51,7 +24,7 @@ const DAMAGE_FLASH_COLOR = (0, readOnly_1.newReadonlyColor)(0.5, 0.5, 0.5, 1, 20
|
|
|
51
24
|
* @param ignoreFriendly Optional. Default is false. Will throw a runtime error if set to true and
|
|
52
25
|
* the `entityType` is equal to -1.
|
|
53
26
|
*/
|
|
54
|
-
function countEntities(entityType = -1, variant = -1, subType = -1, ignoreFriendly = false) {
|
|
27
|
+
export function countEntities(entityType = -1, variant = -1, subType = -1, ignoreFriendly = false) {
|
|
55
28
|
if (entityType === -1) {
|
|
56
29
|
// The `Isaac.CountEntities` method requires an argument of `EntityType`, so we must revert to
|
|
57
30
|
// using the `Isaac.GetRoomEntities` method, which is slower.
|
|
@@ -59,7 +32,7 @@ function countEntities(entityType = -1, variant = -1, subType = -1, ignoreFriend
|
|
|
59
32
|
if (!ignoreFriendly) {
|
|
60
33
|
return entities.length;
|
|
61
34
|
}
|
|
62
|
-
const nonFriendlyEntities = entities.filter((entity) => !entity.HasEntityFlags(
|
|
35
|
+
const nonFriendlyEntities = entities.filter((entity) => !entity.HasEntityFlags(EntityFlag.FRIENDLY));
|
|
63
36
|
return nonFriendlyEntities.length;
|
|
64
37
|
}
|
|
65
38
|
if (!ignoreFriendly) {
|
|
@@ -76,9 +49,9 @@ function countEntities(entityType = -1, variant = -1, subType = -1, ignoreFriend
|
|
|
76
49
|
* true if any of the provided entity types exist.
|
|
77
50
|
* @param ignoreFriendly Optional. Default is false.
|
|
78
51
|
*/
|
|
79
|
-
function doesAnyEntityExist(entityTypes, ignoreFriendly = false) {
|
|
52
|
+
export function doesAnyEntityExist(entityTypes, ignoreFriendly = false) {
|
|
80
53
|
const entityTypesMutable = entityTypes;
|
|
81
|
-
const entityTypesArray =
|
|
54
|
+
const entityTypesArray = isTSTLSet(entityTypesMutable)
|
|
82
55
|
? [...entityTypesMutable]
|
|
83
56
|
: entityTypesMutable;
|
|
84
57
|
return entityTypesArray.some((entityType) => doesEntityExist(entityType, -1, -1, ignoreFriendly));
|
|
@@ -92,7 +65,7 @@ function doesAnyEntityExist(entityTypes, ignoreFriendly = false) {
|
|
|
92
65
|
* @param subType Optional. Default is -1, which matches every sub-type.
|
|
93
66
|
* @param ignoreFriendly Optional. Default is false.
|
|
94
67
|
*/
|
|
95
|
-
function doesEntityExist(entityType = -1, variant = -1, subType = -1, ignoreFriendly = false) {
|
|
68
|
+
export function doesEntityExist(entityType = -1, variant = -1, subType = -1, ignoreFriendly = false) {
|
|
96
69
|
const count = countEntities(entityType, variant, subType, ignoreFriendly);
|
|
97
70
|
return count > 0;
|
|
98
71
|
}
|
|
@@ -113,7 +86,7 @@ function doesEntityExist(entityType = -1, variant = -1, subType = -1, ignoreFrie
|
|
|
113
86
|
* @param filterFunc Optional. A function to filter for a specific type of entity, like e.g. an
|
|
114
87
|
* enemy with a certain amount of HP left.
|
|
115
88
|
*/
|
|
116
|
-
function getClosestEntityTo(referenceEntity, entities, filterFunc) {
|
|
89
|
+
export function getClosestEntityTo(referenceEntity, entities, filterFunc) {
|
|
117
90
|
let closestEntity;
|
|
118
91
|
let closestDistance = Infinity;
|
|
119
92
|
for (const entity of entities) {
|
|
@@ -127,21 +100,21 @@ function getClosestEntityTo(referenceEntity, entities, filterFunc) {
|
|
|
127
100
|
return closestEntity;
|
|
128
101
|
}
|
|
129
102
|
/** Helper function to get the entity type, variant, and sub-type from an `EntityID`. */
|
|
130
|
-
function getConstituentsFromEntityID(entityID) {
|
|
103
|
+
export function getConstituentsFromEntityID(entityID) {
|
|
131
104
|
const parts = entityID.split(".");
|
|
132
105
|
if (parts.length !== 3) {
|
|
133
106
|
error(`Failed to get the constituents from entity ID: ${entityID}`);
|
|
134
107
|
}
|
|
135
108
|
const [entityTypeString, variantString, subTypeString] = parts;
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const entityType =
|
|
140
|
-
|
|
141
|
-
const variant =
|
|
142
|
-
|
|
143
|
-
const subType =
|
|
144
|
-
|
|
109
|
+
assertDefined(entityTypeString, `Failed to get the first constituent from an entity ID: ${entityID}`);
|
|
110
|
+
assertDefined(variantString, `Failed to get the second constituent from an entity ID: ${entityID}`);
|
|
111
|
+
assertDefined(subTypeString, `Failed to get the third constituent from an entity ID: ${entityID}`);
|
|
112
|
+
const entityType = parseIntSafe(entityTypeString);
|
|
113
|
+
assertDefined(entityType, `Failed to convert the entity type to an integer: ${entityTypeString}`);
|
|
114
|
+
const variant = parseIntSafe(variantString);
|
|
115
|
+
assertDefined(variant, `Failed to convert the entity variant to an integer: ${variantString}`);
|
|
116
|
+
const subType = parseIntSafe(subTypeString);
|
|
117
|
+
assertDefined(subType, `Failed to convert the entity sub-type to an integer: ${subTypeString}`);
|
|
145
118
|
return [entityType, variant, subType];
|
|
146
119
|
}
|
|
147
120
|
/**
|
|
@@ -171,7 +144,7 @@ function getConstituentsFromEntityID(entityID) {
|
|
|
171
144
|
* returned. Default is false. Will only be taken into account if the
|
|
172
145
|
* `entityType` is specified.
|
|
173
146
|
*/
|
|
174
|
-
function getEntities(entityType = -1, variant = -1, subType = -1, ignoreFriendly = false) {
|
|
147
|
+
export function getEntities(entityType = -1, variant = -1, subType = -1, ignoreFriendly = false) {
|
|
175
148
|
if (entityType === -1) {
|
|
176
149
|
return Isaac.GetRoomEntities();
|
|
177
150
|
}
|
|
@@ -184,20 +157,20 @@ function getEntities(entityType = -1, variant = -1, subType = -1, ignoreFriendly
|
|
|
184
157
|
* This function will only get fields that are equal to booleans, numbers, or strings, or Vectors,
|
|
185
158
|
* as comparing other types is non-trivial.
|
|
186
159
|
*/
|
|
187
|
-
function getEntityFields(entity) {
|
|
160
|
+
export function getEntityFields(entity) {
|
|
188
161
|
const entityFields = new LuaMap();
|
|
189
162
|
const metatable = getmetatable(entity);
|
|
190
|
-
|
|
163
|
+
assertDefined(metatable, "Failed to get the metatable for an entity.");
|
|
191
164
|
setPrimitiveEntityFields(entity, metatable, entityFields);
|
|
192
165
|
// If this is a class that inherits from `Entity` (like `EntityPlayer`), the "__propget" table
|
|
193
166
|
// will not contain the attributes for `Entity`. Thus, if this is not an `Entity`, we have
|
|
194
167
|
// additional fields to add.
|
|
195
|
-
const className =
|
|
168
|
+
const className = getIsaacAPIClassName(entity);
|
|
196
169
|
if (className === "Entity") {
|
|
197
170
|
return entityFields;
|
|
198
171
|
}
|
|
199
172
|
const parentTable = metatable.get("__parent");
|
|
200
|
-
|
|
173
|
+
assertDefined(parentTable, 'Failed to get the "__parent" table for an entity.');
|
|
201
174
|
setPrimitiveEntityFields(entity, parentTable, entityFields);
|
|
202
175
|
return entityFields;
|
|
203
176
|
}
|
|
@@ -206,25 +179,25 @@ function getEntityFields(entity) {
|
|
|
206
179
|
* should only use this function when debugging. (Normally, if you need to work backwards from a
|
|
207
180
|
* reference, you would use an `EntityPtr` instead of a `PtrHash`.
|
|
208
181
|
*/
|
|
209
|
-
function getEntityFromPtrHash(ptrHash) {
|
|
182
|
+
export function getEntityFromPtrHash(ptrHash) {
|
|
210
183
|
const entities = getEntities();
|
|
211
184
|
return entities.find((entity) => GetPtrHash(entity) === ptrHash);
|
|
212
185
|
}
|
|
213
186
|
/** Helper function to get a string containing the entity's type, variant, and sub-type. */
|
|
214
|
-
function getEntityID(entity) {
|
|
187
|
+
export function getEntityID(entity) {
|
|
215
188
|
return `${entity.Type}.${entity.Variant}.${entity.SubType}`;
|
|
216
189
|
}
|
|
217
190
|
/**
|
|
218
191
|
* Helper function to get a formatted string in the format returned by the `getEntityID` function.
|
|
219
192
|
*/
|
|
220
|
-
function getEntityIDFromConstituents(entityType, variant, subType) {
|
|
193
|
+
export function getEntityIDFromConstituents(entityType, variant, subType) {
|
|
221
194
|
return `${entityType}.${variant}.${subType}`;
|
|
222
195
|
}
|
|
223
196
|
/**
|
|
224
197
|
* Helper function to compare two different arrays of entities. Returns the entities that are in the
|
|
225
198
|
* second array but not in the first array.
|
|
226
199
|
*/
|
|
227
|
-
function getFilteredNewEntities(oldEntities, newEntities) {
|
|
200
|
+
export function getFilteredNewEntities(oldEntities, newEntities) {
|
|
228
201
|
const oldEntitiesSet = new Set();
|
|
229
202
|
for (const entity of oldEntities) {
|
|
230
203
|
const ptrHash = GetPtrHash(entity);
|
|
@@ -241,47 +214,47 @@ function getFilteredNewEntities(oldEntities, newEntities) {
|
|
|
241
214
|
*
|
|
242
215
|
* For more on armor, see the wiki: https://bindingofisaacrebirth.fandom.com/wiki/Damage_Scaling
|
|
243
216
|
*/
|
|
244
|
-
function hasArmor(entity) {
|
|
217
|
+
export function hasArmor(entity) {
|
|
245
218
|
const typeVariantString = `${entity.Type}.${entity.Variant}`;
|
|
246
|
-
return
|
|
219
|
+
return ENTITIES_WITH_ARMOR_SET.has(typeVariantString);
|
|
247
220
|
}
|
|
248
221
|
/**
|
|
249
222
|
* Helper function to detect if a particular entity is an active enemy. Use this over the
|
|
250
223
|
* `Entity.IsActiveEnemy` method since it is bugged with friendly enemies, Grimaces, Ultra Greed,
|
|
251
224
|
* and Mother.
|
|
252
225
|
*/
|
|
253
|
-
function isActiveEnemy(entity) {
|
|
254
|
-
if (entity.HasEntityFlags(
|
|
226
|
+
export function isActiveEnemy(entity) {
|
|
227
|
+
if (entity.HasEntityFlags(EntityFlag.FRIENDLY)) {
|
|
255
228
|
return false;
|
|
256
229
|
}
|
|
257
|
-
const room =
|
|
230
|
+
const room = game.GetRoom();
|
|
258
231
|
const isClear = room.IsClear();
|
|
259
232
|
// Some entities count as being "active" enemies, but they deactivate when the room is cleared.
|
|
260
233
|
if (isClear) {
|
|
261
234
|
switch (entity.Type) {
|
|
262
235
|
// 42
|
|
263
|
-
case
|
|
236
|
+
case EntityType.GRIMACE: {
|
|
264
237
|
return false;
|
|
265
238
|
}
|
|
266
239
|
// 294
|
|
267
|
-
case
|
|
240
|
+
case EntityType.ULTRA_DOOR: {
|
|
268
241
|
return false;
|
|
269
242
|
}
|
|
270
243
|
// 406
|
|
271
|
-
case
|
|
244
|
+
case EntityType.ULTRA_GREED: {
|
|
272
245
|
const npc = entity.ToNPC();
|
|
273
246
|
if (npc !== undefined) {
|
|
274
247
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
275
248
|
const ultraGreedVariant = npc.Variant;
|
|
276
249
|
switch (ultraGreedVariant) {
|
|
277
|
-
case
|
|
278
|
-
if (npc.State ===
|
|
250
|
+
case UltraGreedVariant.ULTRA_GREED: {
|
|
251
|
+
if (npc.State === asNPCState(UltraGreedState.GOLD_STATUE)) {
|
|
279
252
|
return false;
|
|
280
253
|
}
|
|
281
254
|
break;
|
|
282
255
|
}
|
|
283
|
-
case
|
|
284
|
-
if (npc.State ===
|
|
256
|
+
case UltraGreedVariant.ULTRA_GREEDIER: {
|
|
257
|
+
if (npc.State === asNPCState(UltraGreedierState.POST_EXPLOSION)) {
|
|
285
258
|
return false;
|
|
286
259
|
}
|
|
287
260
|
break;
|
|
@@ -291,11 +264,11 @@ function isActiveEnemy(entity) {
|
|
|
291
264
|
break;
|
|
292
265
|
}
|
|
293
266
|
// 912
|
|
294
|
-
case
|
|
267
|
+
case EntityType.MOTHER: {
|
|
295
268
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
296
|
-
if (entity.Variant ===
|
|
269
|
+
if (entity.Variant === MotherVariant.MOTHER_1) {
|
|
297
270
|
const npc = entity.ToNPC();
|
|
298
|
-
if (npc !== undefined && npc.State ===
|
|
271
|
+
if (npc !== undefined && npc.State === NPCState.SPECIAL) {
|
|
299
272
|
return false;
|
|
300
273
|
}
|
|
301
274
|
}
|
|
@@ -319,8 +292,8 @@ function isActiveEnemy(entity) {
|
|
|
319
292
|
* @param entity The entity whose velocity to measure.
|
|
320
293
|
* @param threshold Optional. The threshold from 0 to consider to be moving. Default is 0.01.
|
|
321
294
|
*/
|
|
322
|
-
function isEntityMoving(entity, threshold = 0.01) {
|
|
323
|
-
return
|
|
295
|
+
export function isEntityMoving(entity, threshold = 0.01) {
|
|
296
|
+
return doesVectorHaveLength(entity.Velocity, threshold);
|
|
324
297
|
}
|
|
325
298
|
/**
|
|
326
299
|
* Helper function to parse a string that contains an entity type, a variant, and a sub-type,
|
|
@@ -330,7 +303,7 @@ function isEntityMoving(entity, threshold = 0.01) {
|
|
|
330
303
|
*
|
|
331
304
|
* Returns undefined if the string cannot be parsed.
|
|
332
305
|
*/
|
|
333
|
-
function parseEntityID(entityID) {
|
|
306
|
+
export function parseEntityID(entityID) {
|
|
334
307
|
const entityIDArray = entityID.split(".");
|
|
335
308
|
if (entityIDArray.length !== 3) {
|
|
336
309
|
return undefined;
|
|
@@ -341,9 +314,9 @@ function parseEntityID(entityID) {
|
|
|
341
314
|
|| subTypeString === undefined) {
|
|
342
315
|
return undefined;
|
|
343
316
|
}
|
|
344
|
-
const entityType =
|
|
345
|
-
const variant =
|
|
346
|
-
const subType =
|
|
317
|
+
const entityType = parseIntSafe(entityTypeString);
|
|
318
|
+
const variant = parseIntSafe(variantString);
|
|
319
|
+
const subType = parseIntSafe(subTypeString);
|
|
347
320
|
if (entityType === undefined
|
|
348
321
|
|| variant === undefined
|
|
349
322
|
|| subType === undefined) {
|
|
@@ -359,7 +332,7 @@ function parseEntityID(entityID) {
|
|
|
359
332
|
*
|
|
360
333
|
* Returns undefined if the string cannot be parsed.
|
|
361
334
|
*/
|
|
362
|
-
function parseEntityTypeVariantString(entityTypeVariantString) {
|
|
335
|
+
export function parseEntityTypeVariantString(entityTypeVariantString) {
|
|
363
336
|
const entityTypeVariantArray = entityTypeVariantString.split(".");
|
|
364
337
|
if (entityTypeVariantArray.length !== 2) {
|
|
365
338
|
return undefined;
|
|
@@ -368,8 +341,8 @@ function parseEntityTypeVariantString(entityTypeVariantString) {
|
|
|
368
341
|
if (entityTypeString === undefined || variantString === undefined) {
|
|
369
342
|
return undefined;
|
|
370
343
|
}
|
|
371
|
-
const entityType =
|
|
372
|
-
const variant =
|
|
344
|
+
const entityType = parseIntSafe(entityTypeString);
|
|
345
|
+
const variant = parseIntSafe(variantString);
|
|
373
346
|
if (entityType === undefined || variant === undefined) {
|
|
374
347
|
return undefined;
|
|
375
348
|
}
|
|
@@ -385,7 +358,7 @@ function parseEntityTypeVariantString(entityTypeVariantString) {
|
|
|
385
358
|
* @param cap Optional. If specified, will only remove the given amount of collectibles.
|
|
386
359
|
* @returns An array of the entities that were removed.
|
|
387
360
|
*/
|
|
388
|
-
function removeAllMatchingEntities(entityType, entityVariant = -1, entitySubType = -1, cap) {
|
|
361
|
+
export function removeAllMatchingEntities(entityType, entityVariant = -1, entitySubType = -1, cap) {
|
|
389
362
|
const entities = getEntities(entityType, entityVariant, entitySubType);
|
|
390
363
|
return removeEntities(entities, cap);
|
|
391
364
|
}
|
|
@@ -396,7 +369,7 @@ function removeAllMatchingEntities(entityType, entityVariant = -1, entitySubType
|
|
|
396
369
|
* @param cap Optional. If specified, will only remove the given amount of entities.
|
|
397
370
|
* @returns An array of the entities that were removed.
|
|
398
371
|
*/
|
|
399
|
-
function removeEntities(entities, cap) {
|
|
372
|
+
export function removeEntities(entities, cap) {
|
|
400
373
|
if (entities.length === 0) {
|
|
401
374
|
return [];
|
|
402
375
|
}
|
|
@@ -418,9 +391,9 @@ function removeEntities(entities, cap) {
|
|
|
418
391
|
* @returns If the game failed to reroll the enemy, returns undefined. Otherwise, returns the
|
|
419
392
|
* rerolled entity.
|
|
420
393
|
*/
|
|
421
|
-
function rerollEnemy(entity) {
|
|
394
|
+
export function rerollEnemy(entity) {
|
|
422
395
|
const oldEntities = getEntities();
|
|
423
|
-
const wasRerolled =
|
|
396
|
+
const wasRerolled = game.RerollEnemy(entity);
|
|
424
397
|
if (!wasRerolled) {
|
|
425
398
|
return undefined;
|
|
426
399
|
}
|
|
@@ -436,7 +409,7 @@ function rerollEnemy(entity) {
|
|
|
436
409
|
* want to make it appear as if an entity is taking damage without actually dealing any damage to
|
|
437
410
|
* it.
|
|
438
411
|
*/
|
|
439
|
-
function setEntityDamageFlash(entity) {
|
|
412
|
+
export function setEntityDamageFlash(entity) {
|
|
440
413
|
entity.SetColor(DAMAGE_FLASH_COLOR, 2, 0);
|
|
441
414
|
}
|
|
442
415
|
/**
|
|
@@ -446,16 +419,16 @@ function setEntityDamageFlash(entity) {
|
|
|
446
419
|
* @param entity The entity to set.
|
|
447
420
|
* @param alpha A value between 0 and 1 that represents the fade amount.
|
|
448
421
|
*/
|
|
449
|
-
function setEntityOpacity(entity, alpha) {
|
|
422
|
+
export function setEntityOpacity(entity, alpha) {
|
|
450
423
|
const sprite = entity.GetSprite();
|
|
451
|
-
|
|
424
|
+
setSpriteOpacity(sprite, alpha);
|
|
452
425
|
}
|
|
453
|
-
function setEntityRandomColor(entity) {
|
|
454
|
-
const seed = entity.InitSeed === 0 ?
|
|
455
|
-
const rng =
|
|
456
|
-
const r =
|
|
457
|
-
const g =
|
|
458
|
-
const b =
|
|
426
|
+
export function setEntityRandomColor(entity) {
|
|
427
|
+
const seed = entity.InitSeed === 0 ? getRandomSeed() : entity.InitSeed;
|
|
428
|
+
const rng = newRNG(seed);
|
|
429
|
+
const r = getRandom(rng);
|
|
430
|
+
const g = getRandom(rng);
|
|
431
|
+
const b = getRandom(rng);
|
|
459
432
|
const color = Color(r, g, b);
|
|
460
433
|
entity.SetColor(color, 100_000, 100_000, false, false);
|
|
461
434
|
}
|
|
@@ -475,20 +448,20 @@ function setEntityRandomColor(entity) {
|
|
|
475
448
|
* entity. Default is undefined, which will make the entity spawn with a random
|
|
476
449
|
* seed.
|
|
477
450
|
*/
|
|
478
|
-
function spawn(entityType, variant, subType, positionOrGridIndex, velocity =
|
|
479
|
-
const room =
|
|
451
|
+
export function spawn(entityType, variant, subType, positionOrGridIndex, velocity = VectorZero, spawner, seedOrRNG) {
|
|
452
|
+
const room = game.GetRoom();
|
|
480
453
|
// We do an explicit check to prevent run-time errors in Lua environments.
|
|
481
454
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
482
455
|
if (positionOrGridIndex === undefined) {
|
|
483
456
|
const entityID = getEntityIDFromConstituents(entityType, variant, subType);
|
|
484
457
|
error(`Failed to spawn entity ${entityID} since an undefined position was passed to the "spawn" function.`);
|
|
485
458
|
}
|
|
486
|
-
const position =
|
|
459
|
+
const position = isVector(positionOrGridIndex)
|
|
487
460
|
? positionOrGridIndex
|
|
488
461
|
: room.GetGridPosition(positionOrGridIndex);
|
|
489
|
-
seedOrRNG ??=
|
|
490
|
-
const seed =
|
|
491
|
-
return
|
|
462
|
+
seedOrRNG ??= newRNG();
|
|
463
|
+
const seed = isRNG(seedOrRNG) ? seedOrRNG.Next() : seedOrRNG;
|
|
464
|
+
return game.Spawn(entityType, variant, position, velocity, spawner, subType, seed);
|
|
492
465
|
}
|
|
493
466
|
/**
|
|
494
467
|
* Helper function to spawn the entity corresponding to an `EntityID`.
|
|
@@ -501,7 +474,7 @@ function spawn(entityType, variant, subType, positionOrGridIndex, velocity = con
|
|
|
501
474
|
* entity. Default is undefined, which will make the entity spawn with a random
|
|
502
475
|
* seed using the `Isaac.Spawn` method.
|
|
503
476
|
*/
|
|
504
|
-
function spawnEntityID(entityID, positionOrGridIndex, velocity =
|
|
477
|
+
export function spawnEntityID(entityID, positionOrGridIndex, velocity = VectorZero, spawner, seedOrRNG) {
|
|
505
478
|
const [entityType, variant, subType] = getConstituentsFromEntityID(entityID);
|
|
506
479
|
return spawn(entityType, variant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG);
|
|
507
480
|
}
|
|
@@ -509,21 +482,21 @@ function spawnEntityID(entityID, positionOrGridIndex, velocity = constants_1.Vec
|
|
|
509
482
|
* Helper function to spawn an entity. Use this instead of the `Game.Spawn` method if you do not
|
|
510
483
|
* need to specify the velocity or spawner.
|
|
511
484
|
*/
|
|
512
|
-
function spawnWithSeed(entityType, variant, subType, positionOrGridIndex, seedOrRNG, velocity =
|
|
485
|
+
export function spawnWithSeed(entityType, variant, subType, positionOrGridIndex, seedOrRNG, velocity = VectorZero, spawner) {
|
|
513
486
|
return spawn(entityType, variant, subType, positionOrGridIndex, velocity, spawner, seedOrRNG);
|
|
514
487
|
}
|
|
515
488
|
function setPrimitiveEntityFields(entity, metatable, entityFields) {
|
|
516
489
|
const propGetTable = metatable.get("__propget");
|
|
517
|
-
|
|
490
|
+
assertDefined(propGetTable, 'Failed to get the "__propget" table for an entity.');
|
|
518
491
|
for (const [key] of propGetTable) {
|
|
519
492
|
// The values of this table are functions. Thus, we use the key to index the original entity.
|
|
520
493
|
const indexKey = key;
|
|
521
494
|
const value = entity[indexKey];
|
|
522
|
-
if (
|
|
495
|
+
if (isPrimitive(value)) {
|
|
523
496
|
entityFields.set(indexKey, value);
|
|
524
497
|
}
|
|
525
|
-
else if (
|
|
526
|
-
entityFields.set(indexKey,
|
|
498
|
+
else if (isVector(value)) {
|
|
499
|
+
entityFields.set(indexKey, vectorToString(value));
|
|
527
500
|
}
|
|
528
501
|
}
|
|
529
502
|
}
|