isaacscript-common 84.0.1 → 84.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/arrays/cachedEnumValues.js +33 -0
- package/dist/callbackClasses.js +289 -0
- package/dist/callbacks.js +181 -0
- package/dist/classes/DefaultMap.js +171 -0
- package/dist/classes/ModFeature.js +244 -0
- package/dist/classes/ModUpgraded.js +324 -0
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +19 -0
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +29 -0
- package/dist/classes/callbacks/InputActionFilter.js +24 -0
- package/dist/classes/callbacks/InputActionPlayer.js +37 -0
- package/dist/classes/callbacks/PostAmbushFinished.js +40 -0
- package/dist/classes/callbacks/PostAmbushStarted.js +40 -0
- package/dist/classes/callbacks/PostBombExploded.js +24 -0
- package/dist/classes/callbacks/PostBombInitFilter.js +21 -0
- package/dist/classes/callbacks/PostBombInitLate.js +31 -0
- package/dist/classes/callbacks/PostBombRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostBombUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostBoneSwing.js +53 -0
- package/dist/classes/callbacks/PostCollectibleEmpty.js +50 -0
- package/dist/classes/callbacks/PostCursedTeleport.js +119 -0
- package/dist/classes/callbacks/PostCustomRevive.js +17 -0
- package/dist/classes/callbacks/PostDiceRoomActivated.js +50 -0
- package/dist/classes/callbacks/PostDoorRender.js +24 -0
- package/dist/classes/callbacks/PostDoorUpdate.js +24 -0
- package/dist/classes/callbacks/PostEffectInitFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectInitLate.js +31 -0
- package/dist/classes/callbacks/PostEffectRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectStateChanged.js +34 -0
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostEntityKillFilter.js +21 -0
- package/dist/classes/callbacks/PostEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarInitLate.js +31 -0
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +34 -0
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostFirstEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFirstFlip.js +12 -0
- package/dist/classes/callbacks/PostFlip.js +12 -0
- package/dist/classes/callbacks/PostGameEndFilter.js +21 -0
- package/dist/classes/callbacks/PostGameStartedReordered.js +14 -0
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +14 -0
- package/dist/classes/callbacks/PostGreedModeWave.js +35 -0
- package/dist/classes/callbacks/PostGridEntityBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCollision.js +28 -0
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +24 -0
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +18 -0
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +14 -0
- package/dist/classes/callbacks/PostGridEntityInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityRemove.js +19 -0
- package/dist/classes/callbacks/PostGridEntityRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityUpdate.js +14 -0
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +43 -0
- package/dist/classes/callbacks/PostItemDischarge.js +122 -0
- package/dist/classes/callbacks/PostItemPickup.js +14 -0
- package/dist/classes/callbacks/PostKeyboardChanged.js +46 -0
- package/dist/classes/callbacks/PostKnifeInitFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeInitLate.js +31 -0
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitLate.js +31 -0
- package/dist/classes/callbacks/PostLaserRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCDeathFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitLate.js +31 -0
- package/dist/classes/callbacks/PostNPCRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCStateChanged.js +34 -0
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNewLevelReordered.js +14 -0
- package/dist/classes/callbacks/PostNewRoomEarly.js +74 -0
- package/dist/classes/callbacks/PostNewRoomReordered.js +14 -0
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPickupChanged.js +14 -0
- package/dist/classes/callbacks/PostPickupCollect.js +38 -0
- package/dist/classes/callbacks/PostPickupInitFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupInitFirst.js +33 -0
- package/dist/classes/callbacks/PostPickupInitLate.js +31 -0
- package/dist/classes/callbacks/PostPickupRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +29 -0
- package/dist/classes/callbacks/PostPickupStateChanged.js +34 -0
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPitRender.js +24 -0
- package/dist/classes/callbacks/PostPitUpdate.js +24 -0
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +47 -0
- package/dist/classes/callbacks/PostPlayerChangeStat.js +79 -0
- package/dist/classes/callbacks/PostPlayerChangeType.js +36 -0
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +14 -0
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +14 -0
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +83 -0
- package/dist/classes/callbacks/PostPlayerInitFirst.js +41 -0
- package/dist/classes/callbacks/PostPlayerInitLate.js +33 -0
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +14 -0
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPoopRender.js +24 -0
- package/dist/classes/callbacks/PostPoopUpdate.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateRender.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +24 -0
- package/dist/classes/callbacks/PostProjectileInitFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileInitLate.js +31 -0
- package/dist/classes/callbacks/PostProjectileKill.js +52 -0
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPurchase.js +90 -0
- package/dist/classes/callbacks/PostRockRender.js +24 -0
- package/dist/classes/callbacks/PostRockUpdate.js +24 -0
- package/dist/classes/callbacks/PostRoomClearChanged.js +46 -0
- package/dist/classes/callbacks/PostSacrifice.js +36 -0
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +14 -0
- package/dist/classes/callbacks/PostSlotCollision.js +25 -0
- package/dist/classes/callbacks/PostSlotDestroyed.js +14 -0
- package/dist/classes/callbacks/PostSlotInit.js +14 -0
- package/dist/classes/callbacks/PostSlotRender.js +14 -0
- package/dist/classes/callbacks/PostSlotUpdate.js +14 -0
- package/dist/classes/callbacks/PostSpikesRender.js +24 -0
- package/dist/classes/callbacks/PostSpikesUpdate.js +24 -0
- package/dist/classes/callbacks/PostTNTRender.js +24 -0
- package/dist/classes/callbacks/PostTNTUpdate.js +24 -0
- package/dist/classes/callbacks/PostTearInitFilter.js +21 -0
- package/dist/classes/callbacks/PostTearInitLate.js +31 -0
- package/dist/classes/callbacks/PostTearInitVeryLate.js +35 -0
- package/dist/classes/callbacks/PostTearKill.js +52 -0
- package/dist/classes/callbacks/PostTearRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostTearUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostTransformation.js +47 -0
- package/dist/classes/callbacks/PostTrinketBreak.js +70 -0
- package/dist/classes/callbacks/PostUsePillFilter.js +76 -0
- package/dist/classes/callbacks/PreBerserkDeath.js +41 -0
- package/dist/classes/callbacks/PreBombCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreCustomRevive.js +14 -0
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +24 -0
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreGetPedestal.js +46 -0
- package/dist/classes/callbacks/PreItemPickup.js +14 -0
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +19 -0
- package/dist/classes/callbacks/PreNewLevel.js +51 -0
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +26 -0
- package/dist/classes/callbacks/PreTearCollisionFilter.js +19 -0
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +359 -0
- package/dist/classes/features/callbackLogic/CustomRevive.js +170 -0
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +70 -0
- package/dist/classes/features/callbackLogic/FlipDetection.js +61 -0
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +220 -0
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +62 -0
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +35 -0
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +147 -0
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +68 -0
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +43 -0
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +193 -0
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +109 -0
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +95 -0
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +48 -0
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +52 -0
- package/dist/classes/features/other/CharacterHealthConversion.js +112 -0
- package/dist/classes/features/other/CharacterStats.js +68 -0
- package/dist/classes/features/other/CollectibleItemPoolType.js +75 -0
- package/dist/classes/features/other/CustomHotkeys.js +144 -0
- package/dist/classes/features/other/CustomItemPools.js +128 -0
- package/dist/classes/features/other/CustomPickups.js +118 -0
- package/dist/classes/features/other/CustomStages.js +471 -0
- package/dist/classes/features/other/CustomTrapdoors.js +596 -0
- package/dist/classes/features/other/DebugDisplay.js +699 -0
- package/dist/classes/features/other/DeployJSONRoom.js +301 -0
- package/dist/classes/features/other/DisableAllSound.js +90 -0
- package/dist/classes/features/other/DisableInputs.js +249 -0
- package/dist/classes/features/other/EdenStartingStatsHealth.js +197 -0
- package/dist/classes/features/other/ExtraConsoleCommands.js +292 -0
- package/dist/classes/features/other/FadeInRemover.js +67 -0
- package/dist/classes/features/other/FastReset.js +88 -0
- package/dist/classes/features/other/FlyingDetection.js +64 -0
- package/dist/classes/features/other/ForgottenSwitch.js +43 -0
- package/dist/classes/features/other/ItemPoolDetection.js +187 -0
- package/dist/classes/features/other/ModdedElementDetection.js +399 -0
- package/dist/classes/features/other/ModdedElementSets.js +1251 -0
- package/dist/classes/features/other/NoSirenSteal.js +88 -0
- package/dist/classes/features/other/Pause.js +197 -0
- package/dist/classes/features/other/PersistentEntities.js +168 -0
- package/dist/classes/features/other/PickupIndexCreation.js +229 -0
- package/dist/classes/features/other/PlayerCollectibleTracking.js +102 -0
- package/dist/classes/features/other/PonyDetection.js +86 -0
- package/dist/classes/features/other/PressInput.js +71 -0
- package/dist/classes/features/other/PreventChildEntities.js +60 -0
- package/dist/classes/features/other/PreventGridEntityRespawn.js +159 -0
- package/dist/classes/features/other/RerunDetection.js +69 -0
- package/dist/classes/features/other/RoomClearFrame.js +94 -0
- package/dist/classes/features/other/RoomHistory.js +196 -0
- package/dist/classes/features/other/RunInNFrames.js +323 -0
- package/dist/classes/features/other/RunNextRoom.js +53 -0
- package/dist/classes/features/other/RunNextRun.js +60 -0
- package/dist/classes/features/other/SaveDataManager.js +383 -0
- package/dist/classes/features/other/SpawnRockAltRewards.js +469 -0
- package/dist/classes/features/other/StageHistory.js +244 -0
- package/dist/classes/features/other/StartAmbush.js +62 -0
- package/dist/classes/features/other/TaintedLazarusPlayers.js +115 -0
- package/dist/classes/features/other/UnlockAchievementsDetection.js +60 -0
- package/dist/classes/features/other/customStages/backdrop.js +195 -0
- package/dist/classes/features/other/customStages/constants.js +19 -0
- package/dist/classes/features/other/customStages/gridEntities.js +177 -0
- package/dist/classes/features/other/customStages/shadows.js +67 -0
- package/dist/classes/features/other/customStages/streakText.js +222 -0
- package/dist/classes/features/other/customStages/utils.js +65 -0
- package/dist/classes/features/other/customStages/v.js +27 -0
- package/dist/classes/features/other/customStages/versusScreen.js +227 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +23 -0
- package/dist/classes/features/other/debugDisplay/utils.js +13 -0
- package/dist/classes/features/other/extraConsoleCommands/commands.js +1598 -0
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +135 -0
- package/dist/classes/features/other/extraConsoleCommands/v.js +30 -0
- package/dist/classes/features/other/saveDataManager/constants.js +4 -0
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +106 -0
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +69 -0
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +69 -0
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +46 -0
- package/dist/classes/private/CustomCallback.js +59 -0
- package/dist/classes/private/Feature.js +39 -0
- package/dist/core/cachedClasses.js +61 -0
- package/dist/core/constants.js +289 -0
- package/dist/core/constantsFirstLast.js +98 -0
- package/dist/core/constantsVanilla.js +131 -0
- package/dist/core/upgradeMod.js +71 -0
- package/dist/customStageMetadata.json +1 -0
- package/dist/data/itempools.json +16625 -0
- package/dist/decorators.js +21 -0
- package/dist/enums/AmbushType.js +9 -0
- package/dist/enums/CornerType.js +11 -0
- package/dist/enums/HealthType.js +20 -0
- package/dist/enums/ISCFeature.js +65 -0
- package/dist/enums/LadderSubTypeCustom.js +20 -0
- package/dist/enums/ModCallbackCustom.js +2477 -0
- package/dist/enums/MysteriousPaperEffect.js +16 -0
- package/dist/enums/PlayerStat.js +37 -0
- package/dist/enums/PocketItemType.js +13 -0
- package/dist/enums/RockAltType.js +23 -0
- package/dist/enums/SaveDataKey.js +14 -0
- package/dist/enums/SerializationType.js +10 -0
- package/dist/enums/SlotDestructionType.js +22 -0
- package/dist/enums/private/GridEntityTypeCustom.js +10 -0
- package/dist/enums/private/SerializationBrand.js +42 -0
- package/dist/enums/private/StageTravelState.js +13 -0
- package/dist/enums/private/TrapdoorAnimation.js +9 -0
- package/dist/enums/private/UIStreakAnimation.js +10 -0
- package/dist/features.js +150 -0
- package/dist/functions/ambush.js +26 -0
- package/dist/functions/array.js +586 -0
- package/dist/functions/arrayLua.js +81 -0
- package/dist/functions/benchmark.js +36 -0
- package/dist/functions/bitSet128.js +64 -0
- package/dist/functions/bitwise.js +82 -0
- package/dist/functions/bombs.js +14 -0
- package/dist/functions/bosses.js +238 -0
- package/dist/functions/cards.js +164 -0
- package/dist/functions/challenges.js +117 -0
- package/dist/functions/characters.js +182 -0
- package/dist/functions/charge.js +251 -0
- package/dist/functions/chargeBar.js +54 -0
- package/dist/functions/collectibleTag.js +24 -0
- package/dist/functions/collectibles.js +581 -0
- package/dist/functions/color.js +88 -0
- package/dist/functions/console.js +18 -0
- package/dist/functions/curses.js +37 -0
- package/dist/functions/debugFunctions.js +108 -0
- package/dist/functions/decorators.js +113 -0
- package/dist/functions/deepCopy.js +406 -0
- package/dist/functions/deepCopyTests.js +361 -0
- package/dist/functions/dimensions.js +30 -0
- package/dist/functions/direction.js +78 -0
- package/dist/functions/doors.js +524 -0
- package/dist/functions/easing.js +327 -0
- package/dist/functions/effects.js +14 -0
- package/dist/functions/emptyRoom.js +79 -0
- package/dist/functions/entities.js +529 -0
- package/dist/functions/entitiesSpecific.js +582 -0
- package/dist/functions/entityTypes.js +9 -0
- package/dist/functions/enums.js +244 -0
- package/dist/functions/external.js +59 -0
- package/dist/functions/familiars.js +136 -0
- package/dist/functions/flag.js +146 -0
- package/dist/functions/frames.js +166 -0
- package/dist/functions/globals.js +291 -0
- package/dist/functions/gridEntities.js +990 -0
- package/dist/functions/gridEntitiesSpecific.js +456 -0
- package/dist/functions/gridIndex.js +35 -0
- package/dist/functions/hash.js +75 -0
- package/dist/functions/hex.js +57 -0
- package/dist/functions/input.js +185 -0
- package/dist/functions/isaacAPIClass.js +157 -0
- package/dist/functions/itemPool.js +118 -0
- package/dist/functions/jsonHelpers.js +73 -0
- package/dist/functions/jsonRoom.js +184 -0
- package/dist/functions/kColor.js +89 -0
- package/dist/functions/language.js +16 -0
- package/dist/functions/level.js +66 -0
- package/dist/functions/levelGrid.js +497 -0
- package/dist/functions/log.js +86 -0
- package/dist/functions/logEntities.js +308 -0
- package/dist/functions/logMisc.js +510 -0
- package/dist/functions/map.js +121 -0
- package/dist/functions/math.js +149 -0
- package/dist/functions/merge.js +159 -0
- package/dist/functions/mergeTests.js +313 -0
- package/dist/functions/minimap.js +204 -0
- package/dist/functions/modFeatures.js +39 -0
- package/dist/functions/newArray.js +30 -0
- package/dist/functions/nextStage.js +169 -0
- package/dist/functions/npcDataStructures.js +146 -0
- package/dist/functions/npcs.js +132 -0
- package/dist/functions/pickupVariants.js +63 -0
- package/dist/functions/pickups.js +168 -0
- package/dist/functions/pickupsSpecific.js +376 -0
- package/dist/functions/pills.js +200 -0
- package/dist/functions/playerCenter.js +53 -0
- package/dist/functions/playerCollectibles.js +300 -0
- package/dist/functions/playerDataStructures.js +145 -0
- package/dist/functions/playerEffects.js +63 -0
- package/dist/functions/playerHealth.js +604 -0
- package/dist/functions/playerIndex.js +186 -0
- package/dist/functions/playerTrinkets.js +149 -0
- package/dist/functions/players.js +471 -0
- package/dist/functions/pocketItems.js +165 -0
- package/dist/functions/positionVelocity.js +158 -0
- package/dist/functions/pressurePlate.js +26 -0
- package/dist/functions/projectiles.js +57 -0
- package/dist/functions/random.js +90 -0
- package/dist/functions/readOnly.js +33 -0
- package/dist/functions/render.js +36 -0
- package/dist/functions/revive.js +151 -0
- package/dist/functions/rng.js +140 -0
- package/dist/functions/rockAlt.js +50 -0
- package/dist/functions/roomData.js +155 -0
- package/dist/functions/roomGrid.js +97 -0
- package/dist/functions/roomShape.js +143 -0
- package/dist/functions/roomShapeWalls.js +187 -0
- package/dist/functions/roomTransition.js +43 -0
- package/dist/functions/rooms.js +782 -0
- package/dist/functions/run.js +121 -0
- package/dist/functions/seeds.js +22 -0
- package/dist/functions/serialization.js +98 -0
- package/dist/functions/set.js +215 -0
- package/dist/functions/slots.js +41 -0
- package/dist/functions/sort.js +158 -0
- package/dist/functions/sound.js +45 -0
- package/dist/functions/spawnCollectible.js +112 -0
- package/dist/functions/sprites.js +130 -0
- package/dist/functions/stage.js +540 -0
- package/dist/functions/stats.js +104 -0
- package/dist/functions/storyBosses.js +63 -0
- package/dist/functions/string.js +194 -0
- package/dist/functions/table.js +162 -0
- package/dist/functions/tears.js +128 -0
- package/dist/functions/transformations.js +89 -0
- package/dist/functions/trinketGive.js +145 -0
- package/dist/functions/trinkets.js +213 -0
- package/dist/functions/tstlClass.js +97 -0
- package/dist/functions/types.js +225 -0
- package/dist/functions/ui.js +148 -0
- package/dist/functions/utils.d.ts +2 -0
- package/dist/functions/utils.d.ts.map +1 -1
- package/dist/functions/utils.js +195 -0
- package/dist/functions/utils.lua +4 -1
- package/dist/functions/vector.js +150 -0
- package/dist/functions/versusScreen.js +58 -0
- package/dist/functions/weighted.js +57 -0
- package/dist/index.js +219 -0
- package/dist/index.rollup.d.ts +2 -0
- package/dist/indexLua.js +220 -0
- package/dist/interfaces/ChargeBarSprites.js +2 -0
- package/dist/interfaces/Corner.js +2 -0
- package/dist/interfaces/CustomStageTSConfig.js +2 -0
- package/dist/interfaces/GridEntityCustomData.js +2 -0
- package/dist/interfaces/JSONRoomsFile.js +2 -0
- package/dist/interfaces/PlayerHealth.js +2 -0
- package/dist/interfaces/PlayerStats.js +4 -0
- package/dist/interfaces/PocketItemDescription.js +2 -0
- package/dist/interfaces/RoomDescription.js +2 -0
- package/dist/interfaces/SaveData.js +98 -0
- package/dist/interfaces/StageHistoryEntry.js +2 -0
- package/dist/interfaces/TSTLClassMetatable.js +2 -0
- package/dist/interfaces/TrinketSituation.js +2 -0
- package/dist/interfaces/private/AddCallbackParametersCustom.js +4 -0
- package/dist/interfaces/private/CustomStage.js +2 -0
- package/dist/interfaces/private/CustomTrapdoorDescription.js +2 -0
- package/dist/interfaces/private/ModUpgradedInterface.js +2 -0
- package/dist/isaacscript-common.lua +5 -2
- package/dist/maps/PHDPillConversionsMap.js +23 -0
- package/dist/maps/cardNameToTypeMap.js +211 -0
- package/dist/maps/characterNameToTypeMap.js +91 -0
- package/dist/maps/collectibleNameToTypeMap.js +19 -0
- package/dist/maps/defaultPlayerStatMap.js +17 -0
- package/dist/maps/entityTypeVariantToBossIDMap.js +11 -0
- package/dist/maps/falsePHDPillConversionsMap.js +37 -0
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +32 -0
- package/dist/maps/gridEntityXMLMap.js +133 -0
- package/dist/maps/itemPoolTypeToItemPoolName.js +38 -0
- package/dist/maps/keyboardToStringMap.js +71 -0
- package/dist/maps/pillNameToEffectMap.js +91 -0
- package/dist/maps/roomNameToTypeMap.js +43 -0
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +17 -0
- package/dist/maps/transformationNameToPlayerFormMap.js +35 -0
- package/dist/maps/trinketNameToTypeMap.js +19 -0
- package/dist/objects/LRoomShapeToRectangles.js +43 -0
- package/dist/objects/backdropTypeToRockAltType.js +68 -0
- package/dist/objects/batteryNames.js +13 -0
- package/dist/objects/bombNames.js +17 -0
- package/dist/objects/bossIDToEntityTypeVariant.js +228 -0
- package/dist/objects/bossNamePNGFileNames.js +120 -0
- package/dist/objects/bossNames.js +119 -0
- package/dist/objects/bossPortraitPNGFileNames.js +123 -0
- package/dist/objects/cardDescriptions.js +106 -0
- package/dist/objects/cardNames.js +106 -0
- package/dist/objects/challengeBosses.js +60 -0
- package/dist/objects/challengeCharacters.js +58 -0
- package/dist/objects/challengeCollectibleTypes.js +255 -0
- package/dist/objects/challengeNames.js +54 -0
- package/dist/objects/challengeTrinketType.js +58 -0
- package/dist/objects/characterDamageMultipliers.js +49 -0
- package/dist/objects/characterNames.js +48 -0
- package/dist/objects/characterSpritePNGFileNames.js +50 -0
- package/dist/objects/characterStartingCollectibleTypes.js +105 -0
- package/dist/objects/characterStartingTrinketTypes.js +90 -0
- package/dist/objects/chestNames.js +20 -0
- package/dist/objects/coinNames.js +16 -0
- package/dist/objects/coinSubTypeToValue.js +15 -0
- package/dist/objects/collectibleDescriptions.js +742 -0
- package/dist/objects/collectibleNames.js +745 -0
- package/dist/objects/colors.js +26 -0
- package/dist/objects/directionNames.js +11 -0
- package/dist/objects/directionToDegrees.js +11 -0
- package/dist/objects/directionToMoveAction.js +11 -0
- package/dist/objects/directionToShootAction.js +11 -0
- package/dist/objects/directionToVector.js +13 -0
- package/dist/objects/doorSlotFlagToDoorSlot.js +15 -0
- package/dist/objects/doorSlotToDirection.js +15 -0
- package/dist/objects/doorSlotToDoorSlotFlag.js +15 -0
- package/dist/objects/gridEntityTypeToANM2Name.js +37 -0
- package/dist/objects/heartNames.js +21 -0
- package/dist/objects/isaacAPIClassTypeToBrand.js +12 -0
- package/dist/objects/isaacAPIClassTypeToFunctions.js +46 -0
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +57 -0
- package/dist/objects/kColors.js +27 -0
- package/dist/objects/keyNames.js +13 -0
- package/dist/objects/languageNames.js +13 -0
- package/dist/objects/oppositeDoorSlots.js +15 -0
- package/dist/objects/pillEffectClasses.js +57 -0
- package/dist/objects/pillEffectNames.js +57 -0
- package/dist/objects/pillEffectTypeToPillEffects.js +23 -0
- package/dist/objects/pillEffectTypes.js +57 -0
- package/dist/objects/playerNamePNGFileNames.js +57 -0
- package/dist/objects/playerPortraitPNGFileNames.js +54 -0
- package/dist/objects/roomShapeBounds.js +48 -0
- package/dist/objects/roomShapeCorners.js +330 -0
- package/dist/objects/roomShapeLayoutSizes.js +41 -0
- package/dist/objects/roomShapeToBottomRightPosition.js +25 -0
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +111 -0
- package/dist/objects/roomShapeToDoorSlots.js +72 -0
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +118 -0
- package/dist/objects/roomShapeToGridWidth.js +20 -0
- package/dist/objects/roomShapeToTopLeftPosition.js +26 -0
- package/dist/objects/roomShapeVolumes.js +32 -0
- package/dist/objects/roomTypeNames.js +35 -0
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +35 -0
- package/dist/objects/sackNames.js +11 -0
- package/dist/objects/slotNames.js +26 -0
- package/dist/objects/stageIDNames.js +43 -0
- package/dist/objects/stageToMusic.js +91 -0
- package/dist/objects/stageToStageID.js +117 -0
- package/dist/objects/stageTypeSuffixes.js +14 -0
- package/dist/objects/transformationNames.js +20 -0
- package/dist/objects/trinketDescriptions.js +199 -0
- package/dist/objects/trinketNames.js +202 -0
- package/dist/objects/versusScreenBackgroundColors.js +46 -0
- package/dist/objects/versusScreenDirtSpotColors.js +46 -0
- package/dist/patchErrorFunctions.js +65 -0
- package/dist/serialization.js +21 -0
- package/dist/sets/LRoomShapesSet.js +11 -0
- package/dist/sets/bigRoomShapesSet.js +14 -0
- package/dist/sets/bossSets.js +465 -0
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +18 -0
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +9 -0
- package/dist/sets/charactersWithFreeDevilDealsSet.js +6 -0
- package/dist/sets/charactersWithNoRedHeartsSet.js +19 -0
- package/dist/sets/charactersWithNoSoulHeartsSet.js +16 -0
- package/dist/sets/consoleCommandsSet.js +64 -0
- package/dist/sets/entitiesWithArmorSet.js +59 -0
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +15 -0
- package/dist/sets/itemConfigCardTypesForCards.js +14 -0
- package/dist/sets/lostStyleCharactersSet.js +16 -0
- package/dist/sets/mineShaftRoomSubTypesSet.js +12 -0
- package/dist/sets/narrowRoomShapesSet.js +11 -0
- package/dist/sets/poopGridEntityXMLTypesSet.js +16 -0
- package/dist/sets/redHeartSubTypesSet.js +10 -0
- package/dist/sets/repentanceBossIDsSet.js +30 -0
- package/dist/sets/sinEntityTypesSet.js +14 -0
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +15 -0
- package/dist/shaderCrashFix.js +24 -0
- package/dist/shouldFire.js +226 -0
- package/dist/types/AddSubtract.js +2 -0
- package/dist/types/AllButFirst.js +2 -0
- package/dist/types/AllButLast.js +2 -0
- package/dist/types/AnyClass.js +2 -0
- package/dist/types/AnyEntity.js +2 -0
- package/dist/types/AnyFunction.js +2 -0
- package/dist/types/AnyGridEntity.js +2 -0
- package/dist/types/CompositionTypeSatisfiesEnum.js +11 -0
- package/dist/types/ConversionHeartSubType.js +2 -0
- package/dist/types/Decrement.js +2 -0
- package/dist/types/ERange.js +2 -0
- package/dist/types/EntityID.js +2 -0
- package/dist/types/FunctionTuple.js +2 -0
- package/dist/types/GridEntityID.js +2 -0
- package/dist/types/HasFunction.js +2 -0
- package/dist/types/IRange.js +2 -0
- package/dist/types/Immutable.js +2 -0
- package/dist/types/Increment.js +2 -0
- package/dist/types/LowercaseKeys.js +2 -0
- package/dist/types/NaturalNumbersLessThan.js +2 -0
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +2 -0
- package/dist/types/PickingUpItem.js +44 -0
- package/dist/types/PickupIndex.js +2 -0
- package/dist/types/PlayerIndex.js +2 -0
- package/dist/types/PossibleStatType.js +2 -0
- package/dist/types/PublicInterface.js +2 -0
- package/dist/types/ReadonlyMap.js +6 -0
- package/dist/types/ReadonlyRecord.js +2 -0
- package/dist/types/ReadonlySet.js +6 -0
- package/dist/types/StartsWithLowercase.js +2 -0
- package/dist/types/StartsWithUppercase.js +2 -0
- package/dist/types/TSTLClass.js +2 -0
- package/dist/types/Tuple.js +2 -0
- package/dist/types/TupleKeys.js +2 -0
- package/dist/types/TupleToIntersection.js +2 -0
- package/dist/types/TupleToUnion.js +2 -0
- package/dist/types/TupleWithLengthBetween.js +22 -0
- package/dist/types/TupleWithMaxLength.js +27 -0
- package/dist/types/UnionToIntersection.js +2 -0
- package/dist/types/UppercaseKeys.js +2 -0
- package/dist/types/WeightedArray.js +2 -0
- package/dist/types/WidenLiteral.js +2 -0
- package/dist/types/Writable.js +2 -0
- package/dist/types/private/CallbackTuple.js +2 -0
- package/dist/types/private/ModUpgradedWithFeatures.js +2 -0
- package/package.json +1 -1
- package/src/functions/utils.ts +4 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// This file handles drawing the walls and floors for custom stages.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.setCustomStageBackdrop = void 0;
|
|
5
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
6
|
+
const cachedClasses_1 = require("../../../../core/cachedClasses");
|
|
7
|
+
const constants_1 = require("../../../../core/constants");
|
|
8
|
+
const LadderSubTypeCustom_1 = require("../../../../enums/LadderSubTypeCustom");
|
|
9
|
+
const array_1 = require("../../../../functions/array");
|
|
10
|
+
const entitiesSpecific_1 = require("../../../../functions/entitiesSpecific");
|
|
11
|
+
const rng_1 = require("../../../../functions/rng");
|
|
12
|
+
const roomShape_1 = require("../../../../functions/roomShape");
|
|
13
|
+
const string_1 = require("../../../../functions/string");
|
|
14
|
+
const utils_1 = require("../../../../functions/utils");
|
|
15
|
+
const ReadonlySet_1 = require("../../../../types/ReadonlySet");
|
|
16
|
+
const constants_2 = require("./constants");
|
|
17
|
+
var BackdropKind;
|
|
18
|
+
(function (BackdropKind) {
|
|
19
|
+
/** The "N" stands for narrow rooms. */
|
|
20
|
+
BackdropKind["N_FLOOR"] = "nFloors";
|
|
21
|
+
/** The "L" stands for L rooms. */
|
|
22
|
+
BackdropKind["L_FLOOR"] = "lFloors";
|
|
23
|
+
BackdropKind["WALL"] = "walls";
|
|
24
|
+
BackdropKind["CORNER"] = "corners";
|
|
25
|
+
})(BackdropKind || (BackdropKind = {}));
|
|
26
|
+
/** This is created by the vanilla Basement files. */
|
|
27
|
+
const DEFAULT_BACKDROP = {
|
|
28
|
+
nFloors: [`${constants_2.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/nfloor.png`],
|
|
29
|
+
lFloors: [`${constants_2.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/lfloor.png`],
|
|
30
|
+
walls: [`${constants_2.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/wall.png`],
|
|
31
|
+
corners: [`${constants_2.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/backdrop/corner.png`],
|
|
32
|
+
};
|
|
33
|
+
const ROOM_SHAPE_WALL_ANM2_LAYERS = {
|
|
34
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_1x1]: 44,
|
|
35
|
+
[isaac_typescript_definitions_1.RoomShape.IH]: 36,
|
|
36
|
+
[isaac_typescript_definitions_1.RoomShape.IV]: 28,
|
|
37
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_1x2]: 58,
|
|
38
|
+
[isaac_typescript_definitions_1.RoomShape.IIV]: 42,
|
|
39
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_2x1]: 63,
|
|
40
|
+
[isaac_typescript_definitions_1.RoomShape.IIH]: 62,
|
|
41
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_2x2]: 63,
|
|
42
|
+
[isaac_typescript_definitions_1.RoomShape.LTL]: 63,
|
|
43
|
+
[isaac_typescript_definitions_1.RoomShape.LTR]: 63,
|
|
44
|
+
[isaac_typescript_definitions_1.RoomShape.LBL]: 63,
|
|
45
|
+
[isaac_typescript_definitions_1.RoomShape.LBR]: 63, // 12
|
|
46
|
+
};
|
|
47
|
+
// We don't use `as const` since we need the object to be indexable by all `RoomShape`.
|
|
48
|
+
// eslint-disable-next-line isaacscript/require-capital-const-assertions
|
|
49
|
+
const ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS = {
|
|
50
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_2x1]: 7,
|
|
51
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_2x2]: 21,
|
|
52
|
+
[isaac_typescript_definitions_1.RoomShape.LTL]: 19,
|
|
53
|
+
[isaac_typescript_definitions_1.RoomShape.LTR]: 19,
|
|
54
|
+
[isaac_typescript_definitions_1.RoomShape.LBL]: 19,
|
|
55
|
+
[isaac_typescript_definitions_1.RoomShape.LBR]: 19, // 12
|
|
56
|
+
};
|
|
57
|
+
const WALL_OFFSET = Vector(-80, -80);
|
|
58
|
+
/** Corresponds to "floor-backdrop.anm2". */
|
|
59
|
+
const L_FLOOR_ANM2_LAYERS = [16, 17];
|
|
60
|
+
/** Corresponds to "floor-backdrop.anm2". */
|
|
61
|
+
const N_FLOOR_ANM2_LAYERS = [18, 19];
|
|
62
|
+
/**
|
|
63
|
+
* Normally, we would make a custom entity to represent a backdrop effect, but we don't want to
|
|
64
|
+
* interfere with the "entities2.xml" file in end-user mods. Thus, we must select a vanilla effect
|
|
65
|
+
* to masquerade as a backdrop effect.
|
|
66
|
+
*
|
|
67
|
+
* We arbitrarily choose a ladder for this purpose because it will not automatically despawn after
|
|
68
|
+
* time passes, like most other effects.
|
|
69
|
+
*/
|
|
70
|
+
const BACKDROP_EFFECT_VARIANT = isaac_typescript_definitions_1.EffectVariant.LADDER;
|
|
71
|
+
const BACKDROP_EFFECT_SUB_TYPE = LadderSubTypeCustom_1.LadderSubTypeCustom.CUSTOM_BACKDROP;
|
|
72
|
+
const BACKDROP_ROOM_TYPE_SET = new ReadonlySet_1.ReadonlySet([
|
|
73
|
+
isaac_typescript_definitions_1.RoomType.DEFAULT,
|
|
74
|
+
isaac_typescript_definitions_1.RoomType.BOSS,
|
|
75
|
+
isaac_typescript_definitions_1.RoomType.MINI_BOSS,
|
|
76
|
+
]);
|
|
77
|
+
function setCustomStageBackdrop(customStage) {
|
|
78
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
79
|
+
const roomType = room.GetType();
|
|
80
|
+
const decorationSeed = room.GetDecorationSeed();
|
|
81
|
+
const rng = (0, rng_1.newRNG)(decorationSeed);
|
|
82
|
+
// We do not want to set the backdrop inside shops, Curse Rooms, and so on.
|
|
83
|
+
if (!BACKDROP_ROOM_TYPE_SET.has(roomType)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
spawnWallEntity(customStage, rng, false);
|
|
87
|
+
spawnSecondWallEntity(customStage, rng);
|
|
88
|
+
spawnFloorEntity(customStage, rng);
|
|
89
|
+
}
|
|
90
|
+
exports.setCustomStageBackdrop = setCustomStageBackdrop;
|
|
91
|
+
function getBackdropPNGPath(customStage, backdropKind, rng) {
|
|
92
|
+
const backdrop = customStage.backdropPNGPaths ?? DEFAULT_BACKDROP;
|
|
93
|
+
const pathArray = backdrop[backdropKind];
|
|
94
|
+
const randomPath = (0, array_1.getRandomArrayElement)(pathArray, rng);
|
|
95
|
+
return (0, string_1.removeCharactersBefore)(randomPath, "gfx/");
|
|
96
|
+
}
|
|
97
|
+
function spawnWallEntity(customStage, rng, isExtraWall) {
|
|
98
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
99
|
+
const roomShape = room.GetRoomShape();
|
|
100
|
+
// We spawn an effect instead of simply rendering a static sprite in order to emulate how vanilla
|
|
101
|
+
// does this. (`EntityFlag.RENDER_WALL` is intended for this purpose.)
|
|
102
|
+
const seed = 1;
|
|
103
|
+
const wallEffect = (0, entitiesSpecific_1.spawnEffectWithSeed)(BACKDROP_EFFECT_VARIANT, BACKDROP_EFFECT_SUB_TYPE, constants_1.VectorZero, seed);
|
|
104
|
+
wallEffect.AddEntityFlags(isaac_typescript_definitions_1.EntityFlag.RENDER_WALL);
|
|
105
|
+
const sprite = wallEffect.GetSprite();
|
|
106
|
+
sprite.Load(`${constants_2.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/wall-backdrop.anm2`, false);
|
|
107
|
+
const wallLayersArray = isExtraWall
|
|
108
|
+
? ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS
|
|
109
|
+
: ROOM_SHAPE_WALL_ANM2_LAYERS;
|
|
110
|
+
const numWallLayers = wallLayersArray[roomShape];
|
|
111
|
+
(0, utils_1.assertDefined)(numWallLayers, `Failed to get the layers when creating the backdrop for custom stage: ${customStage.name}`);
|
|
112
|
+
if ((0, roomShape_1.isLRoomShape)(roomShape)) {
|
|
113
|
+
const cornerPNGPath = getBackdropPNGPath(customStage, BackdropKind.CORNER, rng);
|
|
114
|
+
sprite.ReplaceSpritesheet(0, cornerPNGPath);
|
|
115
|
+
}
|
|
116
|
+
for (const layerID of (0, utils_1.iRange)(1, numWallLayers)) {
|
|
117
|
+
const wallPNGPath = getBackdropPNGPath(customStage, BackdropKind.WALL, rng);
|
|
118
|
+
sprite.ReplaceSpritesheet(layerID, wallPNGPath);
|
|
119
|
+
}
|
|
120
|
+
const topLeftPos = room.GetTopLeftPos();
|
|
121
|
+
const renderPos = topLeftPos.add(WALL_OFFSET);
|
|
122
|
+
const modifiedOffset = renderPos.div(40).mul(26);
|
|
123
|
+
wallEffect.SpriteOffset = modifiedOffset;
|
|
124
|
+
sprite.LoadGraphics();
|
|
125
|
+
const roomShapeName = isaac_typescript_definitions_1.RoomShape[roomShape];
|
|
126
|
+
const animation = (0, string_1.trimPrefix)(roomShapeName, "SHAPE_");
|
|
127
|
+
const modifiedAnimation = isExtraWall ? `${animation}X` : animation;
|
|
128
|
+
sprite.Play(modifiedAnimation, true);
|
|
129
|
+
}
|
|
130
|
+
function spawnSecondWallEntity(customStage, rng) {
|
|
131
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
132
|
+
const roomShape = room.GetRoomShape();
|
|
133
|
+
const extraLayers = ROOM_SHAPE_WALL_EXTRA_ANM2_LAYERS[roomShape];
|
|
134
|
+
const roomShapeHasExtraLayers = extraLayers !== undefined;
|
|
135
|
+
if (roomShapeHasExtraLayers) {
|
|
136
|
+
spawnWallEntity(customStage, rng, true);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function spawnFloorEntity(customStage, rng) {
|
|
140
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
141
|
+
const roomShape = room.GetRoomShape();
|
|
142
|
+
// We spawn an effect instead of simply rendering a static sprite in order to emulate how vanilla
|
|
143
|
+
// does this. (`EntityFlag.RENDER_FLOOR` is intended for this purpose.)
|
|
144
|
+
const seed = 1;
|
|
145
|
+
const floorEffect = (0, entitiesSpecific_1.spawnEffectWithSeed)(BACKDROP_EFFECT_VARIANT, 0, constants_1.VectorZero, seed);
|
|
146
|
+
floorEffect.AddEntityFlags(isaac_typescript_definitions_1.EntityFlag.RENDER_FLOOR);
|
|
147
|
+
const sprite = floorEffect.GetSprite();
|
|
148
|
+
sprite.Load(`${constants_2.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/floor-backdrop.anm2`, false);
|
|
149
|
+
const numFloorLayers = getNumFloorLayers(roomShape);
|
|
150
|
+
if (numFloorLayers !== undefined) {
|
|
151
|
+
for (const layerID of (0, utils_1.eRange)(numFloorLayers)) {
|
|
152
|
+
// The wall spritesheet is used for the "normal" floors.
|
|
153
|
+
const wallPNGPath = getBackdropPNGPath(customStage, BackdropKind.WALL, rng);
|
|
154
|
+
sprite.ReplaceSpritesheet(layerID, wallPNGPath);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if ((0, roomShape_1.isLRoomShape)(roomShape)) {
|
|
158
|
+
for (const layerID of L_FLOOR_ANM2_LAYERS) {
|
|
159
|
+
const LFloorPNGPath = getBackdropPNGPath(customStage, BackdropKind.L_FLOOR, rng);
|
|
160
|
+
sprite.ReplaceSpritesheet(layerID, LFloorPNGPath);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if ((0, roomShape_1.isNarrowRoom)(roomShape)) {
|
|
164
|
+
for (const layerID of N_FLOOR_ANM2_LAYERS) {
|
|
165
|
+
const NFloorPNGPath = getBackdropPNGPath(customStage, BackdropKind.N_FLOOR, rng);
|
|
166
|
+
sprite.ReplaceSpritesheet(layerID, NFloorPNGPath);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const topLeftPos = room.GetTopLeftPos();
|
|
170
|
+
const renderPos = topLeftPos;
|
|
171
|
+
const modifiedOffset = renderPos.div(40).mul(26); // The magic numbers are copied from StageAPI.
|
|
172
|
+
floorEffect.SpriteOffset = modifiedOffset;
|
|
173
|
+
sprite.LoadGraphics();
|
|
174
|
+
const roomShapeName = isaac_typescript_definitions_1.RoomShape[roomShape];
|
|
175
|
+
const animation = (0, string_1.trimPrefix)(roomShapeName, "SHAPE_");
|
|
176
|
+
sprite.Play(animation, true);
|
|
177
|
+
}
|
|
178
|
+
function getNumFloorLayers(roomShape) {
|
|
179
|
+
switch (roomShape) {
|
|
180
|
+
case isaac_typescript_definitions_1.RoomShape.SHAPE_1x1: {
|
|
181
|
+
return 4;
|
|
182
|
+
}
|
|
183
|
+
case isaac_typescript_definitions_1.RoomShape.SHAPE_1x2:
|
|
184
|
+
case isaac_typescript_definitions_1.RoomShape.SHAPE_2x1: {
|
|
185
|
+
return 8;
|
|
186
|
+
}
|
|
187
|
+
case isaac_typescript_definitions_1.RoomShape.SHAPE_2x2: {
|
|
188
|
+
return 16;
|
|
189
|
+
}
|
|
190
|
+
default: {
|
|
191
|
+
// We have explicit logic elsewhere to handle narrow rooms and L rooms.
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CUSTOM_FLOOR_STAGE_TYPE = exports.CUSTOM_FLOOR_STAGE = exports.DEFAULT_BASE_STAGE_TYPE = exports.DEFAULT_BASE_STAGE = exports.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = exports.CUSTOM_STAGE_FEATURE_NAME = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
exports.CUSTOM_STAGE_FEATURE_NAME = "CustomStage";
|
|
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;
|
|
9
|
+
/**
|
|
10
|
+
* Equal to -1. Setting the stage to an invalid stage value is useful in that it prevents backdrops
|
|
11
|
+
* and shadows from loading.
|
|
12
|
+
*/
|
|
13
|
+
exports.CUSTOM_FLOOR_STAGE = -1;
|
|
14
|
+
/**
|
|
15
|
+
* We must use `StageType.WRATH_OF_THE_LAMB` instead of `StageType.ORIGINAL` or else the walls will
|
|
16
|
+
* not render properly. DeadInfinity suspects that this might be because it is trying to use the
|
|
17
|
+
* Dark Room's backdrop (instead of The Chest).
|
|
18
|
+
*/
|
|
19
|
+
exports.CUSTOM_FLOOR_STAGE_TYPE = isaac_typescript_definitions_1.StageType.WRATH_OF_THE_LAMB;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertVanillaTrapdoors = exports.setCustomDoorGraphics = exports.setCustomPitGraphics = exports.setCustomRockGraphics = exports.setCustomDecorationGraphics = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const gridEntities_1 = require("../../../../functions/gridEntities");
|
|
6
|
+
const stage_1 = require("../../../../functions/stage");
|
|
7
|
+
const string_1 = require("../../../../functions/string");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
/** For `GridEntityType.DECORATION` (1). */
|
|
10
|
+
function setCustomDecorationGraphics(customStage, gridEntity) {
|
|
11
|
+
// If the end-user did not specify custom decoration graphics, default to Basement graphics. (We
|
|
12
|
+
// don't have to adjust anything for this case.)
|
|
13
|
+
if (customStage.decorationsPNGPath === undefined &&
|
|
14
|
+
customStage.decorationsANM2Path === undefined) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const gridEntityType = gridEntity.GetType();
|
|
18
|
+
if (gridEntityType !== isaac_typescript_definitions_1.GridEntityType.DECORATION) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const sprite = gridEntity.GetSprite();
|
|
22
|
+
const fileName = sprite.GetFilename();
|
|
23
|
+
// On Windows, this is: gfx/grid/Props_01_Basement.anm2
|
|
24
|
+
if (fileName.toLowerCase() !== "gfx/grid/props_01_basement.anm2") {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (customStage.decorationsANM2Path !== undefined) {
|
|
28
|
+
const anm2Path = (0, string_1.removeCharactersBefore)(customStage.decorationsANM2Path, "gfx/");
|
|
29
|
+
sprite.Load(anm2Path, true);
|
|
30
|
+
}
|
|
31
|
+
else if (customStage.decorationsPNGPath !== undefined) {
|
|
32
|
+
const pngPath = (0, string_1.removeCharactersBefore)(customStage.decorationsPNGPath, "gfx/");
|
|
33
|
+
sprite.ReplaceSpritesheet(0, pngPath);
|
|
34
|
+
sprite.LoadGraphics();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.setCustomDecorationGraphics = setCustomDecorationGraphics;
|
|
38
|
+
/** For `GridEntityType.ROCK` (2). */
|
|
39
|
+
function setCustomRockGraphics(customStage, gridEntity) {
|
|
40
|
+
// If the end-user did not specify custom rock graphics, default to Basement graphics. (We don't
|
|
41
|
+
// have to adjust anything for this case.)
|
|
42
|
+
if (customStage.rocksPNGPath === undefined &&
|
|
43
|
+
customStage.rocksANM2Path === undefined) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const gridEntityRock = gridEntity.ToRock();
|
|
47
|
+
if (gridEntityRock === undefined) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const sprite = gridEntity.GetSprite();
|
|
51
|
+
const fileName = sprite.GetFilename();
|
|
52
|
+
switch (fileName) {
|
|
53
|
+
case "gfx/grid/grid_rock.anm2": {
|
|
54
|
+
// The normal case of a rock.
|
|
55
|
+
if (customStage.rocksANM2Path !== undefined) {
|
|
56
|
+
const anm2Path = (0, string_1.removeCharactersBefore)(customStage.rocksANM2Path, "gfx/");
|
|
57
|
+
sprite.Load(anm2Path, true);
|
|
58
|
+
}
|
|
59
|
+
else if (customStage.rocksPNGPath !== undefined) {
|
|
60
|
+
const pngPath = (0, string_1.removeCharactersBefore)(customStage.rocksPNGPath, "gfx/");
|
|
61
|
+
sprite.ReplaceSpritesheet(0, pngPath);
|
|
62
|
+
sprite.LoadGraphics();
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case "gfx/grid/grid_pit.anm2": {
|
|
67
|
+
// The case of when a rock is blown on a pit to make a bridge.
|
|
68
|
+
if (customStage.rocksPNGPath !== undefined) {
|
|
69
|
+
const pngPath = (0, string_1.removeCharactersBefore)(customStage.rocksPNGPath, "gfx/");
|
|
70
|
+
sprite.ReplaceSpritesheet(1, pngPath);
|
|
71
|
+
sprite.LoadGraphics();
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.setCustomRockGraphics = setCustomRockGraphics;
|
|
78
|
+
/** For `GridEntityType.PIT` (7). */
|
|
79
|
+
function setCustomPitGraphics(customStage, gridEntity) {
|
|
80
|
+
// If the end-user did not specify custom pit graphics, default to Basement graphics. (We don't
|
|
81
|
+
// have to adjust anything for this case.)
|
|
82
|
+
if (customStage.pitsPNGPath === undefined) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const pngPath = (0, string_1.removeCharactersBefore)(customStage.pitsPNGPath, "gfx/");
|
|
86
|
+
const gridEntityPit = gridEntity.ToPit();
|
|
87
|
+
if (gridEntityPit === undefined) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const sprite = gridEntity.GetSprite();
|
|
91
|
+
const fileName = sprite.GetFilename();
|
|
92
|
+
if (fileName === "gfx/grid/grid_pit.anm2") {
|
|
93
|
+
sprite.ReplaceSpritesheet(0, pngPath);
|
|
94
|
+
sprite.LoadGraphics();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.setCustomPitGraphics = setCustomPitGraphics;
|
|
98
|
+
/** For `GridEntityType.DOOR` (16). */
|
|
99
|
+
function setCustomDoorGraphics(customStage, gridEntity) {
|
|
100
|
+
// If the end-user did not specify custom pit graphics, default to Basement graphics. (We don't
|
|
101
|
+
// have to adjust anything for this case.)
|
|
102
|
+
if (customStage.doorPNGPaths === undefined) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const gridEntityDoor = gridEntity.ToDoor();
|
|
106
|
+
if (gridEntityDoor === undefined) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const sprite = gridEntity.GetSprite();
|
|
110
|
+
const fileName = sprite.GetFilename();
|
|
111
|
+
const doorPNGPath = getNewDoorPNGPath(customStage, fileName);
|
|
112
|
+
if (doorPNGPath !== undefined) {
|
|
113
|
+
const fixedPath = (0, string_1.removeCharactersBefore)(doorPNGPath, "gfx/");
|
|
114
|
+
sprite.ReplaceSpritesheet(0, fixedPath);
|
|
115
|
+
sprite.LoadGraphics();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.setCustomDoorGraphics = setCustomDoorGraphics;
|
|
119
|
+
function getNewDoorPNGPath(customStage, fileName) {
|
|
120
|
+
switch (fileName) {
|
|
121
|
+
case "gfx/grid/door_01_normaldoor.anm2": {
|
|
122
|
+
return customStage.doorPNGPaths?.normal;
|
|
123
|
+
}
|
|
124
|
+
case "gfx/grid/door_02_treasureroomdoor.anm2": {
|
|
125
|
+
return customStage.doorPNGPaths?.treasureRoom;
|
|
126
|
+
}
|
|
127
|
+
case "gfx/grid/door_03_ambushroomdoor.anm2": {
|
|
128
|
+
return customStage.doorPNGPaths?.normalChallengeRoom;
|
|
129
|
+
}
|
|
130
|
+
case "gfx/grid/door_04_selfsacrificeroomdoor.anm2": {
|
|
131
|
+
return customStage.doorPNGPaths?.curseRoom;
|
|
132
|
+
}
|
|
133
|
+
case "gfx/grid/door_05_arcaderoomdoor.anm2": {
|
|
134
|
+
return customStage.doorPNGPaths?.arcade;
|
|
135
|
+
}
|
|
136
|
+
case "gfx/grid/door_07_devilroomdoor.anm2": {
|
|
137
|
+
return customStage.doorPNGPaths?.devilRoom;
|
|
138
|
+
}
|
|
139
|
+
case "gfx/grid/door_07_holyroomdoor.anm2": {
|
|
140
|
+
return customStage.doorPNGPaths?.angelRoom;
|
|
141
|
+
}
|
|
142
|
+
case "gfx/grid/door_08_holeinwall.anm2": {
|
|
143
|
+
return customStage.doorPNGPaths?.secretRoom;
|
|
144
|
+
}
|
|
145
|
+
case "gfx/grid/door_09_bossambushroomdoor.anm2": {
|
|
146
|
+
return customStage.doorPNGPaths?.bossChallengeRoom;
|
|
147
|
+
}
|
|
148
|
+
case "gfx/grid/door_10_bossroomdoor.anm2": {
|
|
149
|
+
return customStage.doorPNGPaths?.bossRoom;
|
|
150
|
+
}
|
|
151
|
+
case "gfx/grid/door_15_bossrushdoor.anm2": {
|
|
152
|
+
return customStage.doorPNGPaths?.bossRush;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
function convertVanillaTrapdoors(customStage, gridEntity, isFirstFloor, customTrapdoors) {
|
|
158
|
+
const gridEntityType = gridEntity.GetType();
|
|
159
|
+
if (gridEntityType !== isaac_typescript_definitions_1.GridEntityType.TRAPDOOR) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
(0, gridEntities_1.removeGridEntity)(gridEntity, true);
|
|
163
|
+
if (isFirstFloor) {
|
|
164
|
+
// If we are on the first floor of a custom stage, then the destination will be the second floor
|
|
165
|
+
// of the custom stage. (e.g. Caves 1 to Caves 2)
|
|
166
|
+
customTrapdoors.spawnCustomTrapdoor(gridEntity.Position, customStage.name, isaac_typescript_definitions_1.LevelStage.BASEMENT_2);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// If we are on the second floor of a custom stage, then the destination will be the vanilla
|
|
170
|
+
// floor equivalent to 2 floors after the floor used as a basis for the custom stage.
|
|
171
|
+
const baseStage = customStage.baseStage ?? constants_1.DEFAULT_BASE_STAGE;
|
|
172
|
+
const destinationStage = (baseStage + 2);
|
|
173
|
+
const destinationStageType = (0, stage_1.calculateStageType)(destinationStage);
|
|
174
|
+
customTrapdoors.spawnCustomTrapdoor(gridEntity.Position, undefined, destinationStage, destinationStageType);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.convertVanillaTrapdoors = convertVanillaTrapdoors;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setShadows = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const cachedClasses_1 = require("../../../../core/cachedClasses");
|
|
6
|
+
const LadderSubTypeCustom_1 = require("../../../../enums/LadderSubTypeCustom");
|
|
7
|
+
const array_1 = require("../../../../functions/array");
|
|
8
|
+
const entitiesSpecific_1 = require("../../../../functions/entitiesSpecific");
|
|
9
|
+
const string_1 = require("../../../../functions/string");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
/**
|
|
12
|
+
* Normally, we would make a custom entity to represent a shadow effect, but we don't want to
|
|
13
|
+
* interfere with the "entities2.xml" file in end-user mods. Thus, we must select a vanilla effect
|
|
14
|
+
* to masquerade as a backdrop effect.
|
|
15
|
+
*
|
|
16
|
+
* We arbitrarily choose a ladder for this purpose because it will not automatically despawn after
|
|
17
|
+
* time passes, like most other effects.
|
|
18
|
+
*/
|
|
19
|
+
const SHADOW_EFFECT_VARIANT = isaac_typescript_definitions_1.EffectVariant.LADDER;
|
|
20
|
+
const SHADOW_EFFECT_SUB_TYPE = LadderSubTypeCustom_1.LadderSubTypeCustom.CUSTOM_SHADOW;
|
|
21
|
+
/** The animation comes from StageAPI. */
|
|
22
|
+
const ROOM_SHAPE_TO_SHADOW_ANIMATION = {
|
|
23
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_1x1]: "1x1",
|
|
24
|
+
[isaac_typescript_definitions_1.RoomShape.IH]: "1x1",
|
|
25
|
+
[isaac_typescript_definitions_1.RoomShape.IV]: "1x1",
|
|
26
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_1x2]: "1x2",
|
|
27
|
+
[isaac_typescript_definitions_1.RoomShape.IIV]: "1x2",
|
|
28
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_2x1]: "2x1",
|
|
29
|
+
[isaac_typescript_definitions_1.RoomShape.IIH]: "2x1",
|
|
30
|
+
[isaac_typescript_definitions_1.RoomShape.SHAPE_2x2]: "2x2",
|
|
31
|
+
[isaac_typescript_definitions_1.RoomShape.LTL]: "2x2",
|
|
32
|
+
[isaac_typescript_definitions_1.RoomShape.LTR]: "2x2",
|
|
33
|
+
[isaac_typescript_definitions_1.RoomShape.LBL]: "2x2",
|
|
34
|
+
[isaac_typescript_definitions_1.RoomShape.LBR]: "2x2", // 12
|
|
35
|
+
};
|
|
36
|
+
const FADED_BLACK = Color(0, 0, 0, 0.25);
|
|
37
|
+
function setShadows(customStage) {
|
|
38
|
+
if (customStage.shadows === undefined) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
42
|
+
const roomShape = room.GetRoomShape();
|
|
43
|
+
const centerPos = room.GetCenterPos();
|
|
44
|
+
const animation = ROOM_SHAPE_TO_SHADOW_ANIMATION[roomShape];
|
|
45
|
+
const shadows = customStage.shadows[animation];
|
|
46
|
+
if (shadows === undefined) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// We spawn an effect instead of simply rendering a static sprite so that the effect will properly
|
|
50
|
+
// slide in during a room transition animation. (It looks stupid if the shadow stays statically
|
|
51
|
+
// rendering throughout this animation.)
|
|
52
|
+
const seed = 1;
|
|
53
|
+
const shadowEffect = (0, entitiesSpecific_1.spawnEffectWithSeed)(SHADOW_EFFECT_VARIANT, SHADOW_EFFECT_SUB_TYPE, centerPos, seed);
|
|
54
|
+
const sprite = shadowEffect.GetSprite();
|
|
55
|
+
sprite.Load(`${constants_1.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH}/stage-shadow.anm2`, false);
|
|
56
|
+
const decorationSeed = room.GetDecorationSeed();
|
|
57
|
+
const shadow = (0, array_1.getRandomArrayElement)(shadows, decorationSeed);
|
|
58
|
+
const pngPath = (0, string_1.removeCharactersBefore)(shadow.pngPath, "gfx/");
|
|
59
|
+
sprite.ReplaceSpritesheet(0, pngPath);
|
|
60
|
+
sprite.LoadGraphics();
|
|
61
|
+
sprite.SetFrame(animation, 0);
|
|
62
|
+
sprite.Color =
|
|
63
|
+
shadow.color === undefined
|
|
64
|
+
? FADED_BLACK
|
|
65
|
+
: Color(shadow.color.r, shadow.color.g, shadow.color.b, shadow.color.a);
|
|
66
|
+
}
|
|
67
|
+
exports.setShadows = setShadows;
|