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,19 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// This file handles drawing the walls and floors for custom stages.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const ReadonlySet_1 = require("../../../../types/ReadonlySet");
|
|
16
|
-
const constants_2 = require("./constants");
|
|
2
|
+
import { EffectVariant, EntityFlag, RoomShape, RoomType, } from "isaac-typescript-definitions";
|
|
3
|
+
import { game } from "../../../../core/cachedClasses";
|
|
4
|
+
import { VectorZero } from "../../../../core/constants";
|
|
5
|
+
import { LadderSubTypeCustom } from "../../../../enums/LadderSubTypeCustom";
|
|
6
|
+
import { getRandomArrayElement } from "../../../../functions/array";
|
|
7
|
+
import { spawnEffectWithSeed } from "../../../../functions/entitiesSpecific";
|
|
8
|
+
import { newRNG } from "../../../../functions/rng";
|
|
9
|
+
import { isLRoomShape, isNarrowRoom } from "../../../../functions/roomShape";
|
|
10
|
+
import { removeCharactersBefore, trimPrefix, } from "../../../../functions/string";
|
|
11
|
+
import { assertDefined, eRange, iRange } from "../../../../functions/utils";
|
|
12
|
+
import { ReadonlySet } from "../../../../types/ReadonlySet";
|
|
13
|
+
import { ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH } from "./constants";
|
|
17
14
|
var BackdropKind;
|
|
18
15
|
(function (BackdropKind) {
|
|
19
16
|
/** The "N" stands for narrow rooms. */
|
|
@@ -25,34 +22,34 @@ var BackdropKind;
|
|
|
25
22
|
})(BackdropKind || (BackdropKind = {}));
|
|
26
23
|
/** This is created by the vanilla Basement files. */
|
|
27
24
|
const DEFAULT_BACKDROP = {
|
|
28
|
-
nFloors: [`${
|
|
29
|
-
lFloors: [`${
|
|
30
|
-
walls: [`${
|
|
31
|
-
corners: [`${
|
|
25
|
+
nFloors: [`${ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/nfloor.png`],
|
|
26
|
+
lFloors: [`${ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/lfloor.png`], // cspell:ignore lfloor
|
|
27
|
+
walls: [`${ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/wall.png`],
|
|
28
|
+
corners: [`${ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/corner.png`],
|
|
32
29
|
};
|
|
33
30
|
const ROOM_SHAPE_WALL_ANM2_LAYERS = {
|
|
34
|
-
[
|
|
35
|
-
[
|
|
36
|
-
[
|
|
37
|
-
[
|
|
38
|
-
[
|
|
39
|
-
[
|
|
40
|
-
[
|
|
41
|
-
[
|
|
42
|
-
[
|
|
43
|
-
[
|
|
44
|
-
[
|
|
45
|
-
[
|
|
31
|
+
[RoomShape.SHAPE_1x1]: 44, // 1
|
|
32
|
+
[RoomShape.IH]: 36, // 2
|
|
33
|
+
[RoomShape.IV]: 28, // 3
|
|
34
|
+
[RoomShape.SHAPE_1x2]: 58, // 4
|
|
35
|
+
[RoomShape.IIV]: 42, // 5
|
|
36
|
+
[RoomShape.SHAPE_2x1]: 63, // 6
|
|
37
|
+
[RoomShape.IIH]: 62, // 7
|
|
38
|
+
[RoomShape.SHAPE_2x2]: 63, // 8
|
|
39
|
+
[RoomShape.LTL]: 63, // 9
|
|
40
|
+
[RoomShape.LTR]: 63, // 10
|
|
41
|
+
[RoomShape.LBL]: 63, // 11
|
|
42
|
+
[RoomShape.LBR]: 63, // 12
|
|
46
43
|
};
|
|
47
44
|
// We don't use `as const` since we need the object to be indexable by all `RoomShape`.
|
|
48
45
|
// eslint-disable-next-line complete/require-capital-const-assertions
|
|
49
46
|
const ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS = {
|
|
50
|
-
[
|
|
51
|
-
[
|
|
52
|
-
[
|
|
53
|
-
[
|
|
54
|
-
[
|
|
55
|
-
[
|
|
47
|
+
[RoomShape.SHAPE_2x1]: 7, // 6
|
|
48
|
+
[RoomShape.SHAPE_2x2]: 21, // 8
|
|
49
|
+
[RoomShape.LTL]: 19, // 9
|
|
50
|
+
[RoomShape.LTR]: 19, // 10
|
|
51
|
+
[RoomShape.LBL]: 19, // 11
|
|
52
|
+
[RoomShape.LBR]: 19, // 12
|
|
56
53
|
};
|
|
57
54
|
const WALL_OFFSET = Vector(-80, -80);
|
|
58
55
|
/** Corresponds to "floor-backdrop.anm2". */
|
|
@@ -67,22 +64,22 @@ const N_FLOOR_ANM2_LAYERS = [18, 19];
|
|
|
67
64
|
* We arbitrarily choose a ladder for this purpose because it will not automatically despawn after
|
|
68
65
|
* time passes, like most other effects.
|
|
69
66
|
*/
|
|
70
|
-
const BACKDROP_EFFECT_VARIANT =
|
|
71
|
-
const BACKDROP_EFFECT_SUB_TYPE =
|
|
72
|
-
const BACKDROP_ROOM_TYPE_SET = new
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
const BACKDROP_EFFECT_VARIANT = EffectVariant.LADDER;
|
|
68
|
+
const BACKDROP_EFFECT_SUB_TYPE = LadderSubTypeCustom.CUSTOM_BACKDROP;
|
|
69
|
+
const BACKDROP_ROOM_TYPE_SET = new ReadonlySet([
|
|
70
|
+
RoomType.DEFAULT,
|
|
71
|
+
RoomType.BOSS,
|
|
72
|
+
RoomType.MINI_BOSS,
|
|
76
73
|
]);
|
|
77
|
-
function setCustomStageBackdrop(customStage) {
|
|
78
|
-
const room =
|
|
74
|
+
export function setCustomStageBackdrop(customStage) {
|
|
75
|
+
const room = game.GetRoom();
|
|
79
76
|
const roomType = room.GetType();
|
|
80
77
|
// We do not want to set the backdrop inside shops, Curse Rooms, and so on.
|
|
81
78
|
if (!BACKDROP_ROOM_TYPE_SET.has(roomType)) {
|
|
82
79
|
return;
|
|
83
80
|
}
|
|
84
81
|
const decorationSeed = room.GetDecorationSeed();
|
|
85
|
-
const rng =
|
|
82
|
+
const rng = newRNG(decorationSeed);
|
|
86
83
|
spawnWallEntity(customStage, rng, false);
|
|
87
84
|
spawnSecondWallEntity(customStage, rng);
|
|
88
85
|
spawnFloorEntity(customStage, rng);
|
|
@@ -90,29 +87,29 @@ function setCustomStageBackdrop(customStage) {
|
|
|
90
87
|
function getBackdropPNGPath(customStage, backdropKind, rng) {
|
|
91
88
|
const backdrop = customStage.backdropPNGPaths ?? DEFAULT_BACKDROP;
|
|
92
89
|
const pathArray = backdrop[backdropKind];
|
|
93
|
-
const randomPath =
|
|
94
|
-
return
|
|
90
|
+
const randomPath = getRandomArrayElement(pathArray, rng);
|
|
91
|
+
return removeCharactersBefore(randomPath, "gfx/");
|
|
95
92
|
}
|
|
96
93
|
function spawnWallEntity(customStage, rng, isExtraWall) {
|
|
97
|
-
const room =
|
|
94
|
+
const room = game.GetRoom();
|
|
98
95
|
const roomShape = room.GetRoomShape();
|
|
99
96
|
// We spawn an effect instead of simply rendering a static sprite in order to emulate how vanilla
|
|
100
97
|
// does this. (`EntityFlag.RENDER_WALL` is intended for this purpose.)
|
|
101
98
|
const seed = 1;
|
|
102
|
-
const wallEffect =
|
|
103
|
-
wallEffect.AddEntityFlags(
|
|
99
|
+
const wallEffect = spawnEffectWithSeed(BACKDROP_EFFECT_VARIANT, BACKDROP_EFFECT_SUB_TYPE, VectorZero, seed);
|
|
100
|
+
wallEffect.AddEntityFlags(EntityFlag.RENDER_WALL);
|
|
104
101
|
const sprite = wallEffect.GetSprite();
|
|
105
|
-
sprite.Load(`${
|
|
102
|
+
sprite.Load(`${ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/wall-backdrop.anm2`, false);
|
|
106
103
|
const wallLayersArray = isExtraWall
|
|
107
104
|
? ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS
|
|
108
105
|
: ROOM_SHAPE_WALL_ANM2_LAYERS;
|
|
109
106
|
const numWallLayers = wallLayersArray[roomShape];
|
|
110
|
-
|
|
111
|
-
if (
|
|
107
|
+
assertDefined(numWallLayers, `Failed to get the layers when creating the backdrop for custom stage: ${customStage.name}`);
|
|
108
|
+
if (isLRoomShape(roomShape)) {
|
|
112
109
|
const cornerPNGPath = getBackdropPNGPath(customStage, BackdropKind.CORNER, rng);
|
|
113
110
|
sprite.ReplaceSpritesheet(0, cornerPNGPath);
|
|
114
111
|
}
|
|
115
|
-
for (const layerID of
|
|
112
|
+
for (const layerID of iRange(1, numWallLayers)) {
|
|
116
113
|
const wallPNGPath = getBackdropPNGPath(customStage, BackdropKind.WALL, rng);
|
|
117
114
|
sprite.ReplaceSpritesheet(layerID, wallPNGPath);
|
|
118
115
|
}
|
|
@@ -121,13 +118,13 @@ function spawnWallEntity(customStage, rng, isExtraWall) {
|
|
|
121
118
|
const modifiedOffset = renderPos.div(40).mul(26);
|
|
122
119
|
wallEffect.SpriteOffset = modifiedOffset;
|
|
123
120
|
sprite.LoadGraphics();
|
|
124
|
-
const roomShapeName =
|
|
125
|
-
const animation =
|
|
121
|
+
const roomShapeName = RoomShape[roomShape];
|
|
122
|
+
const animation = trimPrefix(roomShapeName, "SHAPE_");
|
|
126
123
|
const modifiedAnimation = isExtraWall ? `${animation}X` : animation;
|
|
127
124
|
sprite.Play(modifiedAnimation, true);
|
|
128
125
|
}
|
|
129
126
|
function spawnSecondWallEntity(customStage, rng) {
|
|
130
|
-
const room =
|
|
127
|
+
const room = game.GetRoom();
|
|
131
128
|
const roomShape = room.GetRoomShape();
|
|
132
129
|
const extraLayers = ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS[roomShape];
|
|
133
130
|
const roomShapeHasExtraLayers = extraLayers !== undefined;
|
|
@@ -136,30 +133,30 @@ function spawnSecondWallEntity(customStage, rng) {
|
|
|
136
133
|
}
|
|
137
134
|
}
|
|
138
135
|
function spawnFloorEntity(customStage, rng) {
|
|
139
|
-
const room =
|
|
136
|
+
const room = game.GetRoom();
|
|
140
137
|
const roomShape = room.GetRoomShape();
|
|
141
138
|
// We spawn an effect instead of simply rendering a static sprite in order to emulate how vanilla
|
|
142
139
|
// does this. (`EntityFlag.RENDER_FLOOR` is intended for this purpose.)
|
|
143
140
|
const seed = 1;
|
|
144
|
-
const floorEffect =
|
|
145
|
-
floorEffect.AddEntityFlags(
|
|
141
|
+
const floorEffect = spawnEffectWithSeed(BACKDROP_EFFECT_VARIANT, 0, VectorZero, seed);
|
|
142
|
+
floorEffect.AddEntityFlags(EntityFlag.RENDER_FLOOR);
|
|
146
143
|
const sprite = floorEffect.GetSprite();
|
|
147
|
-
sprite.Load(`${
|
|
144
|
+
sprite.Load(`${ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/floor-backdrop.anm2`, false);
|
|
148
145
|
const numFloorLayers = getNumFloorLayers(roomShape);
|
|
149
146
|
if (numFloorLayers !== undefined) {
|
|
150
|
-
for (const layerID of
|
|
147
|
+
for (const layerID of eRange(numFloorLayers)) {
|
|
151
148
|
// The wall spritesheet is used for the "normal" floors.
|
|
152
149
|
const wallPNGPath = getBackdropPNGPath(customStage, BackdropKind.WALL, rng);
|
|
153
150
|
sprite.ReplaceSpritesheet(layerID, wallPNGPath);
|
|
154
151
|
}
|
|
155
152
|
}
|
|
156
|
-
else if (
|
|
153
|
+
else if (isLRoomShape(roomShape)) {
|
|
157
154
|
for (const layerID of L_FLOOR_ANM2_LAYERS) {
|
|
158
155
|
const LFloorPNGPath = getBackdropPNGPath(customStage, BackdropKind.L_FLOOR, rng);
|
|
159
156
|
sprite.ReplaceSpritesheet(layerID, LFloorPNGPath);
|
|
160
157
|
}
|
|
161
158
|
}
|
|
162
|
-
else if (
|
|
159
|
+
else if (isNarrowRoom(roomShape)) {
|
|
163
160
|
for (const layerID of N_FLOOR_ANM2_LAYERS) {
|
|
164
161
|
const NFloorPNGPath = getBackdropPNGPath(customStage, BackdropKind.N_FLOOR, rng);
|
|
165
162
|
sprite.ReplaceSpritesheet(layerID, NFloorPNGPath);
|
|
@@ -170,20 +167,20 @@ function spawnFloorEntity(customStage, rng) {
|
|
|
170
167
|
const modifiedOffset = renderPos.div(40).mul(26); // The magic numbers are copied from StageAPI.
|
|
171
168
|
floorEffect.SpriteOffset = modifiedOffset;
|
|
172
169
|
sprite.LoadGraphics();
|
|
173
|
-
const roomShapeName =
|
|
174
|
-
const animation =
|
|
170
|
+
const roomShapeName = RoomShape[roomShape];
|
|
171
|
+
const animation = trimPrefix(roomShapeName, "SHAPE_");
|
|
175
172
|
sprite.Play(animation, true);
|
|
176
173
|
}
|
|
177
174
|
function getNumFloorLayers(roomShape) {
|
|
178
175
|
switch (roomShape) {
|
|
179
|
-
case
|
|
176
|
+
case RoomShape.SHAPE_1x1: {
|
|
180
177
|
return 4;
|
|
181
178
|
}
|
|
182
|
-
case
|
|
183
|
-
case
|
|
179
|
+
case RoomShape.SHAPE_1x2:
|
|
180
|
+
case RoomShape.SHAPE_2x1: {
|
|
184
181
|
return 8;
|
|
185
182
|
}
|
|
186
|
-
case
|
|
183
|
+
case RoomShape.SHAPE_2x2: {
|
|
187
184
|
return 16;
|
|
188
185
|
}
|
|
189
186
|
default: {
|
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
exports.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = "gfx/isaacscript-custom-stage";
|
|
7
|
-
exports.DEFAULT_BASE_STAGE = isaac_typescript_definitions_1.LevelStage.BASEMENT_2;
|
|
8
|
-
exports.DEFAULT_BASE_STAGE_TYPE = isaac_typescript_definitions_1.StageType.ORIGINAL;
|
|
1
|
+
import { LevelStage, StageType } from "isaac-typescript-definitions";
|
|
2
|
+
export const CUSTOM_STAGE_FEATURE_NAME = "CustomStage";
|
|
3
|
+
export const ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = "gfx/isaacscript-custom-stage";
|
|
4
|
+
export const DEFAULT_BASE_STAGE = LevelStage.BASEMENT_2;
|
|
5
|
+
export const DEFAULT_BASE_STAGE_TYPE = StageType.ORIGINAL;
|
|
9
6
|
/**
|
|
10
7
|
* Equal to -1. Setting the stage to an invalid stage value is useful in that it prevents backdrops
|
|
11
8
|
* and shadows from loading.
|
|
12
9
|
*/
|
|
13
|
-
|
|
10
|
+
export const CUSTOM_FLOOR_STAGE = -1;
|
|
14
11
|
/**
|
|
15
12
|
* We must use `StageType.WRATH_OF_THE_LAMB` instead of `StageType.ORIGINAL` or else the walls will
|
|
16
13
|
* not render properly. DeadInfinity suspects that this might be because it is trying to use the
|
|
17
14
|
* Dark Room's backdrop (instead of The Chest).
|
|
18
15
|
*/
|
|
19
|
-
|
|
16
|
+
export const CUSTOM_FLOOR_STAGE_TYPE = StageType.WRATH_OF_THE_LAMB;
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.setCustomDoorGraphics = setCustomDoorGraphics;
|
|
7
|
-
exports.convertVanillaTrapdoors = convertVanillaTrapdoors;
|
|
8
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
9
|
-
const gridEntities_1 = require("../../../../functions/gridEntities");
|
|
10
|
-
const stage_1 = require("../../../../functions/stage");
|
|
11
|
-
const string_1 = require("../../../../functions/string");
|
|
12
|
-
const constants_1 = require("./constants");
|
|
1
|
+
import { GridEntityType, LevelStage } from "isaac-typescript-definitions";
|
|
2
|
+
import { removeGridEntity } from "../../../../functions/gridEntities";
|
|
3
|
+
import { calculateStageType } from "../../../../functions/stage";
|
|
4
|
+
import { removeCharactersBefore } from "../../../../functions/string";
|
|
5
|
+
import { DEFAULT_BASE_STAGE } from "./constants";
|
|
13
6
|
/** For `GridEntityType.DECORATION` (1). */
|
|
14
|
-
function setCustomDecorationGraphics(customStage, gridEntity) {
|
|
7
|
+
export function setCustomDecorationGraphics(customStage, gridEntity) {
|
|
15
8
|
// If the end-user did not specify custom decoration graphics, default to Basement graphics. (We
|
|
16
9
|
// don't have to adjust anything for this case.)
|
|
17
10
|
if (customStage.decorationsPNGPath === undefined
|
|
@@ -19,7 +12,7 @@ function setCustomDecorationGraphics(customStage, gridEntity) {
|
|
|
19
12
|
return;
|
|
20
13
|
}
|
|
21
14
|
const gridEntityType = gridEntity.GetType();
|
|
22
|
-
if (gridEntityType !==
|
|
15
|
+
if (gridEntityType !== GridEntityType.DECORATION) {
|
|
23
16
|
return;
|
|
24
17
|
}
|
|
25
18
|
const sprite = gridEntity.GetSprite();
|
|
@@ -29,17 +22,17 @@ function setCustomDecorationGraphics(customStage, gridEntity) {
|
|
|
29
22
|
return;
|
|
30
23
|
}
|
|
31
24
|
if (customStage.decorationsANM2Path !== undefined) {
|
|
32
|
-
const anm2Path =
|
|
25
|
+
const anm2Path = removeCharactersBefore(customStage.decorationsANM2Path, "gfx/");
|
|
33
26
|
sprite.Load(anm2Path, true);
|
|
34
27
|
}
|
|
35
28
|
else if (customStage.decorationsPNGPath !== undefined) {
|
|
36
|
-
const pngPath =
|
|
29
|
+
const pngPath = removeCharactersBefore(customStage.decorationsPNGPath, "gfx/");
|
|
37
30
|
sprite.ReplaceSpritesheet(0, pngPath);
|
|
38
31
|
sprite.LoadGraphics();
|
|
39
32
|
}
|
|
40
33
|
}
|
|
41
34
|
/** For `GridEntityType.ROCK` (2). */
|
|
42
|
-
function setCustomRockGraphics(customStage, gridEntity) {
|
|
35
|
+
export function setCustomRockGraphics(customStage, gridEntity) {
|
|
43
36
|
// If the end-user did not specify custom rock graphics, default to Basement graphics. (We don't
|
|
44
37
|
// have to adjust anything for this case.)
|
|
45
38
|
if (customStage.rocksPNGPath === undefined
|
|
@@ -56,11 +49,11 @@ function setCustomRockGraphics(customStage, gridEntity) {
|
|
|
56
49
|
case "gfx/grid/grid_rock.anm2": {
|
|
57
50
|
// The normal case of a rock.
|
|
58
51
|
if (customStage.rocksANM2Path !== undefined) {
|
|
59
|
-
const anm2Path =
|
|
52
|
+
const anm2Path = removeCharactersBefore(customStage.rocksANM2Path, "gfx/");
|
|
60
53
|
sprite.Load(anm2Path, true);
|
|
61
54
|
}
|
|
62
55
|
else if (customStage.rocksPNGPath !== undefined) {
|
|
63
|
-
const pngPath =
|
|
56
|
+
const pngPath = removeCharactersBefore(customStage.rocksPNGPath, "gfx/");
|
|
64
57
|
sprite.ReplaceSpritesheet(0, pngPath);
|
|
65
58
|
sprite.LoadGraphics();
|
|
66
59
|
}
|
|
@@ -69,7 +62,7 @@ function setCustomRockGraphics(customStage, gridEntity) {
|
|
|
69
62
|
case "gfx/grid/grid_pit.anm2": {
|
|
70
63
|
// The case of when a rock is blown on a pit to make a bridge.
|
|
71
64
|
if (customStage.rocksPNGPath !== undefined) {
|
|
72
|
-
const pngPath =
|
|
65
|
+
const pngPath = removeCharactersBefore(customStage.rocksPNGPath, "gfx/");
|
|
73
66
|
sprite.ReplaceSpritesheet(1, pngPath);
|
|
74
67
|
sprite.LoadGraphics();
|
|
75
68
|
}
|
|
@@ -81,13 +74,13 @@ function setCustomRockGraphics(customStage, gridEntity) {
|
|
|
81
74
|
}
|
|
82
75
|
}
|
|
83
76
|
/** For `GridEntityType.PIT` (7). */
|
|
84
|
-
function setCustomPitGraphics(customStage, gridEntity) {
|
|
77
|
+
export function setCustomPitGraphics(customStage, gridEntity) {
|
|
85
78
|
// If the end-user did not specify custom pit graphics, default to Basement graphics. (We don't
|
|
86
79
|
// have to adjust anything for this case.)
|
|
87
80
|
if (customStage.pitsPNGPath === undefined) {
|
|
88
81
|
return;
|
|
89
82
|
}
|
|
90
|
-
const pngPath =
|
|
83
|
+
const pngPath = removeCharactersBefore(customStage.pitsPNGPath, "gfx/");
|
|
91
84
|
const gridEntityPit = gridEntity.ToPit();
|
|
92
85
|
if (gridEntityPit === undefined) {
|
|
93
86
|
return;
|
|
@@ -100,7 +93,7 @@ function setCustomPitGraphics(customStage, gridEntity) {
|
|
|
100
93
|
}
|
|
101
94
|
}
|
|
102
95
|
/** For `GridEntityType.DOOR` (16). */
|
|
103
|
-
function setCustomDoorGraphics(customStage, gridEntity) {
|
|
96
|
+
export function setCustomDoorGraphics(customStage, gridEntity) {
|
|
104
97
|
// If the end-user did not specify custom pit graphics, default to Basement graphics. (We don't
|
|
105
98
|
// have to adjust anything for this case.)
|
|
106
99
|
if (customStage.doorPNGPaths === undefined) {
|
|
@@ -114,7 +107,7 @@ function setCustomDoorGraphics(customStage, gridEntity) {
|
|
|
114
107
|
const fileName = sprite.GetFilename();
|
|
115
108
|
const doorPNGPath = getNewDoorPNGPath(customStage, fileName);
|
|
116
109
|
if (doorPNGPath !== undefined) {
|
|
117
|
-
const fixedPath =
|
|
110
|
+
const fixedPath = removeCharactersBefore(doorPNGPath, "gfx/");
|
|
118
111
|
sprite.ReplaceSpritesheet(0, fixedPath);
|
|
119
112
|
sprite.LoadGraphics();
|
|
120
113
|
}
|
|
@@ -159,24 +152,24 @@ function getNewDoorPNGPath(customStage, fileName) {
|
|
|
159
152
|
}
|
|
160
153
|
}
|
|
161
154
|
}
|
|
162
|
-
function convertVanillaTrapdoors(customStage, gridEntity, isFirstFloor, customTrapdoors) {
|
|
155
|
+
export function convertVanillaTrapdoors(customStage, gridEntity, isFirstFloor, customTrapdoors) {
|
|
163
156
|
const gridEntityType = gridEntity.GetType();
|
|
164
|
-
if (gridEntityType !==
|
|
157
|
+
if (gridEntityType !== GridEntityType.TRAPDOOR) {
|
|
165
158
|
return;
|
|
166
159
|
}
|
|
167
|
-
|
|
160
|
+
removeGridEntity(gridEntity, true);
|
|
168
161
|
if (isFirstFloor) {
|
|
169
162
|
// If we are on the first floor of a custom stage, then the destination will be the second floor
|
|
170
163
|
// of the custom stage. (e.g. Caves 1 to Caves 2)
|
|
171
|
-
customTrapdoors.spawnCustomTrapdoor(gridEntity.Position, customStage.name,
|
|
164
|
+
customTrapdoors.spawnCustomTrapdoor(gridEntity.Position, customStage.name, LevelStage.BASEMENT_2);
|
|
172
165
|
}
|
|
173
166
|
else {
|
|
174
167
|
// If we are on the second floor of a custom stage, then the destination will be the vanilla
|
|
175
168
|
// floor equivalent to 2 floors after the floor used as a basis for the custom stage.
|
|
176
|
-
const baseStage = customStage.baseStage ??
|
|
169
|
+
const baseStage = customStage.baseStage ?? DEFAULT_BASE_STAGE;
|
|
177
170
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
178
171
|
const destinationStage = (baseStage + 2);
|
|
179
|
-
const destinationStageType =
|
|
172
|
+
const destinationStageType = calculateStageType(destinationStage);
|
|
180
173
|
customTrapdoors.spawnCustomTrapdoor(gridEntity.Position, undefined, destinationStage, destinationStageType);
|
|
181
174
|
}
|
|
182
175
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const entitiesSpecific_1 = require("../../../../functions/entitiesSpecific");
|
|
9
|
-
const string_1 = require("../../../../functions/string");
|
|
10
|
-
const constants_1 = require("./constants");
|
|
1
|
+
import { EffectVariant, RoomShape } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../../../../core/cachedClasses";
|
|
3
|
+
import { LadderSubTypeCustom } from "../../../../enums/LadderSubTypeCustom";
|
|
4
|
+
import { getRandomArrayElement } from "../../../../functions/array";
|
|
5
|
+
import { spawnEffectWithSeed } from "../../../../functions/entitiesSpecific";
|
|
6
|
+
import { removeCharactersBefore } from "../../../../functions/string";
|
|
7
|
+
import { ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH } from "./constants";
|
|
11
8
|
/**
|
|
12
9
|
* Normally, we would make a custom entity to represent a shadow effect, but we don't want to
|
|
13
10
|
* interfere with the "entities2.xml" file in end-user mods. Thus, we must select a vanilla effect
|
|
@@ -16,29 +13,29 @@ const constants_1 = require("./constants");
|
|
|
16
13
|
* We arbitrarily choose a ladder for this purpose because it will not automatically despawn after
|
|
17
14
|
* time passes, like most other effects.
|
|
18
15
|
*/
|
|
19
|
-
const SHADOW_EFFECT_VARIANT =
|
|
20
|
-
const SHADOW_EFFECT_SUB_TYPE =
|
|
16
|
+
const SHADOW_EFFECT_VARIANT = EffectVariant.LADDER;
|
|
17
|
+
const SHADOW_EFFECT_SUB_TYPE = LadderSubTypeCustom.CUSTOM_SHADOW;
|
|
21
18
|
/** The animation comes from StageAPI. */
|
|
22
19
|
const ROOM_SHAPE_TO_SHADOW_ANIMATION = {
|
|
23
|
-
[
|
|
24
|
-
[
|
|
25
|
-
[
|
|
26
|
-
[
|
|
27
|
-
[
|
|
28
|
-
[
|
|
29
|
-
[
|
|
30
|
-
[
|
|
31
|
-
[
|
|
32
|
-
[
|
|
33
|
-
[
|
|
34
|
-
[
|
|
20
|
+
[RoomShape.SHAPE_1x1]: "1x1", // 1
|
|
21
|
+
[RoomShape.IH]: "1x1", // 2
|
|
22
|
+
[RoomShape.IV]: "1x1", // 3
|
|
23
|
+
[RoomShape.SHAPE_1x2]: "1x2", // 4
|
|
24
|
+
[RoomShape.IIV]: "1x2", // 5
|
|
25
|
+
[RoomShape.SHAPE_2x1]: "2x1", // 6
|
|
26
|
+
[RoomShape.IIH]: "2x1", // 7
|
|
27
|
+
[RoomShape.SHAPE_2x2]: "2x2", // 8
|
|
28
|
+
[RoomShape.LTL]: "2x2", // 9
|
|
29
|
+
[RoomShape.LTR]: "2x2", // 10
|
|
30
|
+
[RoomShape.LBL]: "2x2", // 11
|
|
31
|
+
[RoomShape.LBR]: "2x2", // 12
|
|
35
32
|
};
|
|
36
33
|
const FADED_BLACK = Color(0, 0, 0, 0.25);
|
|
37
|
-
function setShadows(customStage) {
|
|
34
|
+
export function setShadows(customStage) {
|
|
38
35
|
if (customStage.shadows === undefined) {
|
|
39
36
|
return;
|
|
40
37
|
}
|
|
41
|
-
const room =
|
|
38
|
+
const room = game.GetRoom();
|
|
42
39
|
const roomShape = room.GetRoomShape();
|
|
43
40
|
const centerPos = room.GetCenterPos();
|
|
44
41
|
const animation = ROOM_SHAPE_TO_SHADOW_ANIMATION[roomShape];
|
|
@@ -50,12 +47,12 @@ function setShadows(customStage) {
|
|
|
50
47
|
// slide in during a room transition animation. (It looks stupid if the shadow stays statically
|
|
51
48
|
// rendering throughout this animation.)
|
|
52
49
|
const seed = 1;
|
|
53
|
-
const shadowEffect =
|
|
50
|
+
const shadowEffect = spawnEffectWithSeed(SHADOW_EFFECT_VARIANT, SHADOW_EFFECT_SUB_TYPE, centerPos, seed);
|
|
54
51
|
const sprite = shadowEffect.GetSprite();
|
|
55
|
-
sprite.Load(`${
|
|
52
|
+
sprite.Load(`${ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/stage-shadow.anm2`, false);
|
|
56
53
|
const decorationSeed = room.GetDecorationSeed();
|
|
57
|
-
const shadow =
|
|
58
|
-
const pngPath =
|
|
54
|
+
const shadow = getRandomArrayElement(shadows, decorationSeed);
|
|
55
|
+
const pngPath = removeCharactersBefore(shadow.pngPath, "gfx/");
|
|
59
56
|
sprite.ReplaceSpritesheet(0, pngPath);
|
|
60
57
|
sprite.LoadGraphics();
|
|
61
58
|
sprite.SetFrame(animation, 0);
|