isaacscript-common 6.11.1 → 6.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/callbacks/postFlip.lua +2 -2
- package/dist/callbacks/subscriptions/postFirstFlip.d.ts +1 -1
- package/dist/callbacks/subscriptions/postFirstFlip.d.ts.map +1 -1
- package/dist/callbacks/subscriptions/postFirstFlip.lua +2 -2
- package/dist/callbacks/subscriptions/postFlip.d.ts +1 -1
- package/dist/callbacks/subscriptions/postFlip.d.ts.map +1 -1
- package/dist/callbacks/subscriptions/postFlip.lua +2 -2
- package/dist/enums/ModCallbackCustom.d.ts +2 -2
- package/dist/enums/private/StageTravelState.d.ts +6 -1
- package/dist/enums/private/StageTravelState.d.ts.map +1 -1
- package/dist/enums/private/StageTravelState.lua +10 -0
- package/dist/enums/private/TrapdoorAnimation.d.ts +6 -0
- package/dist/enums/private/TrapdoorAnimation.d.ts.map +1 -0
- package/dist/enums/private/TrapdoorAnimation.lua +6 -0
- package/dist/features/customGridEntity.d.ts +8 -5
- package/dist/features/customGridEntity.d.ts.map +1 -1
- package/dist/features/customGridEntity.lua +58 -15
- package/dist/features/customStage/exports.d.ts.map +1 -1
- package/dist/features/customStage/exports.lua +0 -13
- package/dist/features/customStage/init.d.ts.map +1 -1
- package/dist/features/customStage/init.lua +16 -1
- package/dist/features/customStage/streakText.d.ts.map +1 -1
- package/dist/features/customStage/streakText.lua +0 -1
- package/dist/features/customTrapdoor/blackSprite.d.ts +2 -0
- package/dist/features/customTrapdoor/blackSprite.d.ts.map +1 -0
- package/dist/features/customTrapdoor/blackSprite.lua +19 -0
- package/dist/features/customTrapdoor/customTrapdoorConstants.d.ts +8 -3
- package/dist/features/customTrapdoor/customTrapdoorConstants.d.ts.map +1 -1
- package/dist/features/customTrapdoor/customTrapdoorConstants.lua +9 -1
- package/dist/features/customTrapdoor/exports.d.ts +11 -19
- package/dist/features/customTrapdoor/exports.d.ts.map +1 -1
- package/dist/features/customTrapdoor/exports.lua +48 -82
- package/dist/features/customTrapdoor/init.d.ts +3 -0
- package/dist/features/customTrapdoor/init.d.ts.map +1 -0
- package/dist/features/customTrapdoor/init.lua +173 -0
- package/dist/features/customTrapdoor/openClose.d.ts +5 -0
- package/dist/features/customTrapdoor/openClose.d.ts.map +1 -0
- package/dist/features/customTrapdoor/openClose.lua +60 -0
- package/dist/features/customTrapdoor/touched.d.ts +4 -0
- package/dist/features/customTrapdoor/touched.d.ts.map +1 -0
- package/dist/features/customTrapdoor/touched.lua +141 -0
- package/dist/features/customTrapdoor/v.d.ts +16 -2
- package/dist/features/customTrapdoor/v.d.ts.map +1 -1
- package/dist/features/customTrapdoor/v.lua +8 -6
- package/dist/features/extraConsoleCommands/init.d.ts.map +1 -1
- package/dist/features/extraConsoleCommands/init.lua +3 -1
- package/dist/features/taintedLazarusPlayers.d.ts.map +1 -1
- package/dist/features/taintedLazarusPlayers.lua +13 -21
- package/dist/functions/log.lua +3 -3
- package/dist/functions/playerIndex.d.ts +5 -0
- package/dist/functions/playerIndex.d.ts.map +1 -1
- package/dist/functions/playerIndex.lua +16 -6
- package/dist/functions/table.d.ts +1 -1
- package/dist/functions/table.d.ts.map +1 -1
- package/dist/initFeatures.d.ts.map +1 -1
- package/dist/initFeatures.lua +3 -0
- package/dist/interfaces/CustomGridEntityData.d.ts +5 -1
- package/dist/interfaces/CustomGridEntityData.d.ts.map +1 -1
- package/dist/interfaces/private/CustomTrapdoorDescription.d.ts +3 -0
- package/dist/interfaces/private/CustomTrapdoorDescription.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/callbacks/postFlip.ts +3 -2
- package/src/callbacks/subscriptions/postFirstFlip.ts +6 -3
- package/src/callbacks/subscriptions/postFlip.ts +6 -3
- package/src/enums/ModCallbackCustom.ts +2 -2
- package/src/enums/private/StageTravelState.ts +5 -1
- package/src/enums/private/TrapdoorAnimation.ts +5 -0
- package/src/features/customGridEntity.ts +68 -10
- package/src/features/customStage/exports.ts +3 -22
- package/src/features/customStage/init.ts +20 -0
- package/src/features/customStage/streakText.ts +0 -1
- package/src/features/customTrapdoor/blackSprite.ts +16 -0
- package/src/features/customTrapdoor/customTrapdoorConstants.ts +13 -3
- package/src/features/customTrapdoor/exports.ts +52 -121
- package/src/features/customTrapdoor/init.ts +215 -0
- package/src/features/customTrapdoor/openClose.ts +103 -0
- package/src/features/customTrapdoor/touched.ts +175 -0
- package/src/features/customTrapdoor/v.ts +16 -10
- package/src/features/deployJSONRoom.ts +1 -1
- package/src/features/extraConsoleCommands/init.ts +5 -2
- package/src/features/saveDataManager/main.ts +1 -1
- package/src/features/taintedLazarusPlayers.ts +32 -31
- package/src/functions/deepCopy.ts +2 -2
- package/src/functions/entities.ts +1 -1
- package/src/functions/playerIndex.ts +12 -0
- package/src/functions/rng.ts +1 -1
- package/src/functions/table.ts +2 -2
- package/src/initFeatures.ts +2 -0
- package/src/interfaces/CustomGridEntityData.ts +6 -1
- package/src/interfaces/private/CustomTrapdoorDescription.ts +4 -0
|
@@ -33,9 +33,9 @@ function useItemFlip(self, _collectibleType, _rng, player, _useFlags, _activeSlo
|
|
|
33
33
|
end
|
|
34
34
|
if not v.run.usedFlipAtLeastOnce then
|
|
35
35
|
v.run.usedFlipAtLeastOnce = true
|
|
36
|
-
postFirstFlipFire(nil, newLazarus)
|
|
36
|
+
postFirstFlipFire(nil, newLazarus, player)
|
|
37
37
|
end
|
|
38
|
-
postFlipFire(nil, newLazarus)
|
|
38
|
+
postFlipFire(nil, newLazarus, player)
|
|
39
39
|
return nil
|
|
40
40
|
end
|
|
41
41
|
function getNewLazarus(self, oldLazarus)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="isaac-typescript-definitions" />
|
|
2
2
|
export declare type PostFirstFlipRegisterParameters = [
|
|
3
|
-
callback: (
|
|
3
|
+
callback: (newLazarus: EntityPlayer, oldLazarus: EntityPlayer) => void
|
|
4
4
|
];
|
|
5
5
|
//# sourceMappingURL=postFirstFlip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postFirstFlip.d.ts","sourceRoot":"","sources":["../../../src/callbacks/subscriptions/postFirstFlip.ts"],"names":[],"mappings":";AAAA,oBAAY,+BAA+B,GAAG;IAC5C,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"postFirstFlip.d.ts","sourceRoot":"","sources":["../../../src/callbacks/subscriptions/postFirstFlip.ts"],"names":[],"mappings":";AAAA,oBAAY,+BAA+B,GAAG;IAC5C,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,KAAK,IAAI;CACvE,CAAC"}
|
|
@@ -13,10 +13,10 @@ function ____exports.postFirstFlipRegister(self, ...)
|
|
|
13
13
|
end
|
|
14
14
|
---
|
|
15
15
|
-- @internal
|
|
16
|
-
function ____exports.postFirstFlipFire(self,
|
|
16
|
+
function ____exports.postFirstFlipFire(self, newLazarus, oldLazarus)
|
|
17
17
|
for ____, ____value in ipairs(subscriptions) do
|
|
18
18
|
local callback = ____value[1]
|
|
19
|
-
callback(nil,
|
|
19
|
+
callback(nil, newLazarus, oldLazarus)
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
return ____exports
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postFlip.d.ts","sourceRoot":"","sources":["../../../src/callbacks/subscriptions/postFlip.ts"],"names":[],"mappings":";AAAA,oBAAY,0BAA0B,GAAG;IACvC,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"postFlip.d.ts","sourceRoot":"","sources":["../../../src/callbacks/subscriptions/postFlip.ts"],"names":[],"mappings":";AAAA,oBAAY,0BAA0B,GAAG;IACvC,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,KAAK,IAAI;CACvE,CAAC"}
|
|
@@ -13,10 +13,10 @@ function ____exports.postFlipRegister(self, ...)
|
|
|
13
13
|
end
|
|
14
14
|
---
|
|
15
15
|
-- @internal
|
|
16
|
-
function ____exports.postFlipFire(self,
|
|
16
|
+
function ____exports.postFlipFire(self, newLazarus, oldLazarus)
|
|
17
17
|
for ____, ____value in ipairs(subscriptions) do
|
|
18
18
|
local callback = ____value[1]
|
|
19
|
-
callback(nil,
|
|
19
|
+
callback(nil, newLazarus, oldLazarus)
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
return ____exports
|
|
@@ -267,7 +267,7 @@ export declare enum ModCallbackCustom {
|
|
|
267
267
|
* before the player has actually used the Flip item.
|
|
268
268
|
*
|
|
269
269
|
* ```ts
|
|
270
|
-
* function postFirstFlip(
|
|
270
|
+
* function postFirstFlip(newLazarus: EntityPlayer, oldLazarus: EntityPlayer): void {}
|
|
271
271
|
* ```
|
|
272
272
|
*/
|
|
273
273
|
POST_FIRST_FLIP = 19,
|
|
@@ -280,7 +280,7 @@ export declare enum ModCallbackCustom {
|
|
|
280
280
|
* before the player has actually used the Flip item.
|
|
281
281
|
*
|
|
282
282
|
* ```ts
|
|
283
|
-
* function postFlip(
|
|
283
|
+
* function postFlip(newLazarus: EntityPlayer, oldLazarus: EntityPlayer): void {}
|
|
284
284
|
* ```
|
|
285
285
|
*/
|
|
286
286
|
POST_FLIP = 20,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageTravelState.d.ts","sourceRoot":"","sources":["../../../src/enums/private/StageTravelState.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,IAAI,IAAA;
|
|
1
|
+
{"version":3,"file":"StageTravelState.d.ts","sourceRoot":"","sources":["../../../src/enums/private/StageTravelState.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,IAAI,IAAA;IACJ,oBAAoB,IAAA;IACpB,mBAAmB,IAAA;IACnB,gBAAgB,IAAA;IAChB,kBAAkB,IAAA;IAClB,mBAAmB,IAAA;CACpB"}
|
|
@@ -2,4 +2,14 @@ local ____exports = {}
|
|
|
2
2
|
____exports.StageTravelState = {}
|
|
3
3
|
____exports.StageTravelState.NONE = 0
|
|
4
4
|
____exports.StageTravelState[____exports.StageTravelState.NONE] = "NONE"
|
|
5
|
+
____exports.StageTravelState.PLAYERS_JUMPING_DOWN = 1
|
|
6
|
+
____exports.StageTravelState[____exports.StageTravelState.PLAYERS_JUMPING_DOWN] = "PLAYERS_JUMPING_DOWN"
|
|
7
|
+
____exports.StageTravelState.PIXELATION_TO_BLACK = 2
|
|
8
|
+
____exports.StageTravelState[____exports.StageTravelState.PIXELATION_TO_BLACK] = "PIXELATION_TO_BLACK"
|
|
9
|
+
____exports.StageTravelState.PAUSING_ON_BLACK = 3
|
|
10
|
+
____exports.StageTravelState[____exports.StageTravelState.PAUSING_ON_BLACK] = "PAUSING_ON_BLACK"
|
|
11
|
+
____exports.StageTravelState.PIXELATION_TO_ROOM = 4
|
|
12
|
+
____exports.StageTravelState[____exports.StageTravelState.PIXELATION_TO_ROOM] = "PIXELATION_TO_ROOM"
|
|
13
|
+
____exports.StageTravelState.PLAYERS_LAYING_DOWN = 5
|
|
14
|
+
____exports.StageTravelState[____exports.StageTravelState.PLAYERS_LAYING_DOWN] = "PLAYERS_LAYING_DOWN"
|
|
5
15
|
return ____exports
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrapdoorAnimation.d.ts","sourceRoot":"","sources":["../../../src/enums/private/TrapdoorAnimation.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,cAAc,mBAAmB;CAClC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { GridCollisionClass, GridEntityType } from "isaac-typescript-definitions";
|
|
2
2
|
/**
|
|
3
|
-
* Helper function to spawn a custom grid entity.
|
|
3
|
+
* Helper function to spawn a custom grid entity. Custom grid entities are persistent in that they
|
|
4
|
+
* will reappear if the player leaves and re-enters the room. (It will be manually respawned in the
|
|
5
|
+
* `POST_NEW_ROOM` callback.)
|
|
4
6
|
*
|
|
5
7
|
* This is an IsaacScript feature because the vanilla game does not support any custom grid
|
|
6
8
|
* entities. Under the hood, IsaacScript accomplishes this by using decorations with an arbitrary
|
|
@@ -17,12 +19,13 @@ import { GridCollisionClass, GridEntityType } from "isaac-typescript-definitions
|
|
|
17
19
|
* @param gridIndexOrPosition The grid index or position in the room that you want to spawn the grid
|
|
18
20
|
* entity at. If a position is specified, the closest grid index will be
|
|
19
21
|
* used.
|
|
20
|
-
* @param anm2Path The path to the ANM2 file to use for the sprite.
|
|
21
|
-
* @param defaultAnimation The name of the animation to play after the sprite is initialized and
|
|
22
|
-
* after the player re-enters a room with this grid entity in it.
|
|
23
22
|
* @param gridCollisionClass The collision class that you want the custom grid entity to have.
|
|
23
|
+
* @param anm2Path The path to the ANM2 file to use for the sprite.
|
|
24
|
+
* @param defaultAnimation Optional. The name of the animation to play after the sprite is
|
|
25
|
+
* initialized and after the player re-enters a room with this grid entity
|
|
26
|
+
* in it. If not specified, the default animation in the anm2 will be used.
|
|
24
27
|
*/
|
|
25
|
-
export declare function spawnCustomGridEntity(gridEntityTypeCustom: GridEntityType, gridIndexOrPosition: int | Vector,
|
|
28
|
+
export declare function spawnCustomGridEntity(gridEntityTypeCustom: GridEntityType, gridIndexOrPosition: int | Vector, gridCollisionClass: GridCollisionClass, anm2Path: string, defaultAnimation?: string): GridEntity;
|
|
26
29
|
/**
|
|
27
30
|
* Helper function to remove a custom grid entity created by the `spawnCustomGrid` function.
|
|
28
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customGridEntity.d.ts","sourceRoot":"","sources":["../../src/features/customGridEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,cAAc,EAGf,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"customGridEntity.d.ts","sourceRoot":"","sources":["../../src/features/customGridEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,cAAc,EAGf,MAAM,8BAA8B,CAAC;AAmItC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CACnC,oBAAoB,EAAE,cAAc,EACpC,mBAAmB,EAAE,GAAG,GAAG,MAAM,EACjC,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,MAAM,GACxB,UAAU,CAgDZ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,+BAA+B,EAAE,GAAG,GAAG,MAAM,GAAG,UAAU,EAC1D,UAAU,UAAO,GAChB,UAAU,GAAG,SAAS,CAqCxB"}
|
|
@@ -6,6 +6,7 @@ local ____exports = {}
|
|
|
6
6
|
local preUseItemWeNeedToGoDeeper, postNewRoomReordered, v
|
|
7
7
|
local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
|
|
8
8
|
local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
|
|
9
|
+
local GridCollisionClass = ____isaac_2Dtypescript_2Ddefinitions.GridCollisionClass
|
|
9
10
|
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
|
|
10
11
|
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
|
|
11
12
|
local ____cachedClasses = require("cachedClasses")
|
|
@@ -25,10 +26,44 @@ local ____roomData = require("functions.roomData")
|
|
|
25
26
|
local getRoomListIndex = ____roomData.getRoomListIndex
|
|
26
27
|
local ____vector = require("functions.vector")
|
|
27
28
|
local isVector = ____vector.isVector
|
|
29
|
+
local ____runInNFrames = require("features.runInNFrames")
|
|
30
|
+
local runNextGameFrame = ____runInNFrames.runNextGameFrame
|
|
28
31
|
local ____exports = require("features.saveDataManager.exports")
|
|
29
32
|
local saveDataManager = ____exports.saveDataManager
|
|
30
|
-
function preUseItemWeNeedToGoDeeper(self, _collectibleType, _rng,
|
|
31
|
-
|
|
33
|
+
function preUseItemWeNeedToGoDeeper(self, _collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData)
|
|
34
|
+
local room = game:GetRoom()
|
|
35
|
+
local roomListIndex = getRoomListIndex(nil)
|
|
36
|
+
local roomCustomGridEntities = v.level.customGridEntities:get(roomListIndex)
|
|
37
|
+
if roomCustomGridEntities == nil then
|
|
38
|
+
return nil
|
|
39
|
+
end
|
|
40
|
+
local gridIndex = room:GetGridIndex(player.Position)
|
|
41
|
+
local customGridEntity = roomCustomGridEntities:get(gridIndex)
|
|
42
|
+
if customGridEntity == nil then
|
|
43
|
+
return nil
|
|
44
|
+
end
|
|
45
|
+
if customGridEntity.gridCollisionClass ~= GridCollisionClass.NONE then
|
|
46
|
+
return nil
|
|
47
|
+
end
|
|
48
|
+
removeGridEntity(nil, customGridEntity.gridIndex, false)
|
|
49
|
+
local playerPtr = EntityPtr(player)
|
|
50
|
+
runNextGameFrame(
|
|
51
|
+
nil,
|
|
52
|
+
function()
|
|
53
|
+
local futureEntity = playerPtr.Ref
|
|
54
|
+
if futureEntity == nil then
|
|
55
|
+
return
|
|
56
|
+
end
|
|
57
|
+
local futurePlayer = futureEntity:ToPlayer()
|
|
58
|
+
if futurePlayer == nil then
|
|
59
|
+
return
|
|
60
|
+
end
|
|
61
|
+
v.room.manuallyUsingShovel = true
|
|
62
|
+
futurePlayer:UseActiveItem(CollectibleType.WE_NEED_TO_GO_DEEPER)
|
|
63
|
+
v.room.manuallyUsingShovel = false
|
|
64
|
+
end
|
|
65
|
+
)
|
|
66
|
+
return true
|
|
32
67
|
end
|
|
33
68
|
function postNewRoomReordered(self)
|
|
34
69
|
local roomListIndex = getRoomListIndex(nil)
|
|
@@ -44,20 +79,24 @@ function postNewRoomReordered(self)
|
|
|
44
79
|
local decoration = room:GetGridEntity(gridIndex)
|
|
45
80
|
if decoration == nil then
|
|
46
81
|
roomCustomGridEntities:delete(gridIndex)
|
|
47
|
-
goto
|
|
82
|
+
goto __continue13
|
|
48
83
|
end
|
|
49
84
|
local sprite = decoration:GetSprite()
|
|
50
85
|
sprite:Load(data.anm2Path, true)
|
|
51
|
-
sprite:
|
|
86
|
+
local animationToPlay = data.defaultAnimation == nil and sprite:GetDefaultAnimation() or data.defaultAnimation
|
|
87
|
+
sprite:Play(animationToPlay, true)
|
|
52
88
|
end
|
|
53
|
-
::
|
|
89
|
+
::__continue13::
|
|
54
90
|
end
|
|
55
91
|
end
|
|
56
92
|
local FEATURE_NAME = "customGridEntity"
|
|
57
|
-
v = {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
)
|
|
93
|
+
v = {
|
|
94
|
+
level = {customGridEntities = __TS__New(
|
|
95
|
+
DefaultMap,
|
|
96
|
+
function() return __TS__New(Map) end
|
|
97
|
+
)},
|
|
98
|
+
room = {manuallyUsingShovel = false}
|
|
99
|
+
}
|
|
61
100
|
---
|
|
62
101
|
-- @internal
|
|
63
102
|
function ____exports.customGridEntityInit(self, mod)
|
|
@@ -65,7 +104,9 @@ function ____exports.customGridEntityInit(self, mod)
|
|
|
65
104
|
mod:AddCallback(ModCallback.PRE_USE_ITEM, preUseItemWeNeedToGoDeeper, CollectibleType.WE_NEED_TO_GO_DEEPER)
|
|
66
105
|
mod:AddCallbackCustom(ModCallbackCustom.POST_NEW_ROOM_REORDERED, postNewRoomReordered)
|
|
67
106
|
end
|
|
68
|
-
--- Helper function to spawn a custom grid entity.
|
|
107
|
+
--- Helper function to spawn a custom grid entity. Custom grid entities are persistent in that they
|
|
108
|
+
-- will reappear if the player leaves and re-enters the room. (It will be manually respawned in the
|
|
109
|
+
-- `POST_NEW_ROOM` callback.)
|
|
69
110
|
--
|
|
70
111
|
-- This is an IsaacScript feature because the vanilla game does not support any custom grid
|
|
71
112
|
-- entities. Under the hood, IsaacScript accomplishes this by using decorations with an arbitrary
|
|
@@ -82,11 +123,12 @@ end
|
|
|
82
123
|
-- @param gridIndexOrPosition The grid index or position in the room that you want to spawn the grid
|
|
83
124
|
-- entity at. If a position is specified, the closest grid index will be
|
|
84
125
|
-- used.
|
|
85
|
-
-- @param anm2Path The path to the ANM2 file to use for the sprite.
|
|
86
|
-
-- @param defaultAnimation The name of the animation to play after the sprite is initialized and
|
|
87
|
-
-- after the player re-enters a room with this grid entity in it.
|
|
88
126
|
-- @param gridCollisionClass The collision class that you want the custom grid entity to have.
|
|
89
|
-
|
|
127
|
+
-- @param anm2Path The path to the ANM2 file to use for the sprite.
|
|
128
|
+
-- @param defaultAnimation Optional. The name of the animation to play after the sprite is
|
|
129
|
+
-- initialized and after the player re-enters a room with this grid entity
|
|
130
|
+
-- in it. If not specified, the default animation in the anm2 will be used.
|
|
131
|
+
function ____exports.spawnCustomGridEntity(self, gridEntityTypeCustom, gridIndexOrPosition, gridCollisionClass, anm2Path, defaultAnimation)
|
|
90
132
|
errorIfFeaturesNotInitialized(nil, FEATURE_NAME)
|
|
91
133
|
local room = game:GetRoom()
|
|
92
134
|
local roomListIndex = getRoomListIndex(nil)
|
|
@@ -99,7 +141,8 @@ function ____exports.spawnCustomGridEntity(self, gridEntityTypeCustom, gridIndex
|
|
|
99
141
|
end
|
|
100
142
|
local sprite = decoration:GetSprite()
|
|
101
143
|
sprite:Load(anm2Path, true)
|
|
102
|
-
sprite:
|
|
144
|
+
local animationToPlay = defaultAnimation == nil and sprite:GetDefaultAnimation() or defaultAnimation
|
|
145
|
+
sprite:Play(animationToPlay, true)
|
|
103
146
|
local customGridEntityData = {
|
|
104
147
|
gridEntityTypeCustom = gridEntityTypeCustom,
|
|
105
148
|
roomListIndex = roomListIndex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/features/customStage/exports.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/features/customStage/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAMX,MAAM,8BAA8B,CAAC;AAoBtC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,IAAI,CAwGlE;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,IAAI,CAGN"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local Map = ____lualib.Map
|
|
3
3
|
local ____exports = {}
|
|
4
|
-
local postRoomTransition
|
|
5
4
|
local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
|
|
6
|
-
local Direction = ____isaac_2Dtypescript_2Ddefinitions.Direction
|
|
7
5
|
local GridRoom = ____isaac_2Dtypescript_2Ddefinitions.GridRoom
|
|
8
6
|
local LevelStage = ____isaac_2Dtypescript_2Ddefinitions.LevelStage
|
|
9
7
|
local RoomShape = ____isaac_2Dtypescript_2Ddefinitions.RoomShape
|
|
10
|
-
local RoomTransitionAnim = ____isaac_2Dtypescript_2Ddefinitions.RoomTransitionAnim
|
|
11
8
|
local RoomType = ____isaac_2Dtypescript_2Ddefinitions.RoomType
|
|
12
9
|
local StageType = ____isaac_2Dtypescript_2Ddefinitions.StageType
|
|
13
10
|
local ____cachedClasses = require("cachedClasses")
|
|
@@ -19,8 +16,6 @@ local getEntityIDFromConstituents = ____entities.getEntityIDFromConstituents
|
|
|
19
16
|
local ____log = require("functions.log")
|
|
20
17
|
local log = ____log.log
|
|
21
18
|
local logError = ____log.logError
|
|
22
|
-
local ____playerCenter = require("functions.playerCenter")
|
|
23
|
-
local movePlayersToCenter = ____playerCenter.movePlayersToCenter
|
|
24
19
|
local ____rng = require("functions.rng")
|
|
25
20
|
local newRNG = ____rng.newRNG
|
|
26
21
|
local ____roomData = require("functions.roomData")
|
|
@@ -30,8 +25,6 @@ local getRooms = ____rooms.getRooms
|
|
|
30
25
|
local ____stage = require("functions.stage")
|
|
31
26
|
local getGotoCommand = ____stage.getGotoCommand
|
|
32
27
|
local setStage = ____stage.setStage
|
|
33
|
-
local ____runNextRoom = require("features.runNextRoom")
|
|
34
|
-
local runNextRoom = ____runNextRoom.runNextRoom
|
|
35
28
|
local ____customStageUtils = require("features.customStage.customStageUtils")
|
|
36
29
|
local getRandomCustomStageRoom = ____customStageUtils.getRandomCustomStageRoom
|
|
37
30
|
local ____streakText = require("features.customStage.streakText")
|
|
@@ -41,10 +34,6 @@ local v = ____v.default
|
|
|
41
34
|
local customBossPNGPaths = ____v.customBossPNGPaths
|
|
42
35
|
local customStageCachedRoomData = ____v.customStageCachedRoomData
|
|
43
36
|
local customStagesMap = ____v.customStagesMap
|
|
44
|
-
function postRoomTransition(self)
|
|
45
|
-
movePlayersToCenter(nil)
|
|
46
|
-
topStreakTextStart(nil)
|
|
47
|
-
end
|
|
48
37
|
local DEFAULT_BASE_STAGE = LevelStage.BASEMENT_2
|
|
49
38
|
local DEFAULT_BASE_STAGE_TYPE = StageType.ORIGINAL
|
|
50
39
|
--- Helper function to warp to a custom stage/level.
|
|
@@ -116,8 +105,6 @@ function ____exports.setCustomStage(self, name, verbose)
|
|
|
116
105
|
local stageType = StageType.WRATH_OF_THE_LAMB
|
|
117
106
|
level:SetStage(stage, stageType)
|
|
118
107
|
reorderedCallbacksSetStage(nil, stage, stageType)
|
|
119
|
-
game:StartRoomTransition(startingRoomGridIndex, Direction.NO_DIRECTION, RoomTransitionAnim.FADE)
|
|
120
|
-
runNextRoom(nil, postRoomTransition)
|
|
121
108
|
end
|
|
122
109
|
function ____exports.setCustomStageDebug(self)
|
|
123
110
|
local customStage = v.run.currentCustomStage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/features/customStage/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/features/customStage/init.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAiCxD,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA4BtD"}
|
|
@@ -3,14 +3,18 @@ local Map = ____lualib.Map
|
|
|
3
3
|
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
|
|
4
4
|
local __TS__New = ____lualib.__TS__New
|
|
5
5
|
local ____exports = {}
|
|
6
|
-
local initRoomTypeMaps, getRoomTypeMap, postRender, postGameStarted, getShaderParams, postGridEntityBrokenRockAlt, postGridEntityBrokenInit, postNewRoomReordered
|
|
6
|
+
local initRoomTypeMaps, getRoomTypeMap, postRender, postCurseEval, postGameStarted, getShaderParams, postGridEntityBrokenRockAlt, postGridEntityBrokenInit, postNewRoomReordered
|
|
7
7
|
local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
|
|
8
8
|
local GridEntityType = ____isaac_2Dtypescript_2Ddefinitions.GridEntityType
|
|
9
|
+
local LevelCurse = ____isaac_2Dtypescript_2Ddefinitions.LevelCurse
|
|
9
10
|
local ModCallback = ____isaac_2Dtypescript_2Ddefinitions.ModCallback
|
|
10
11
|
local ____ModCallbackCustom = require("enums.ModCallbackCustom")
|
|
11
12
|
local ModCallbackCustom = ____ModCallbackCustom.ModCallbackCustom
|
|
12
13
|
local ____array = require("functions.array")
|
|
13
14
|
local isArray = ____array.isArray
|
|
15
|
+
local ____flag = require("functions.flag")
|
|
16
|
+
local hasFlag = ____flag.hasFlag
|
|
17
|
+
local removeFlag = ____flag.removeFlag
|
|
14
18
|
local ____exports = require("features.saveDataManager.exports")
|
|
15
19
|
local saveDataManager = ____exports.saveDataManager
|
|
16
20
|
local ____backdrop = require("features.customStage.backdrop")
|
|
@@ -80,6 +84,16 @@ function postRender(self)
|
|
|
80
84
|
streakTextPostRender(nil)
|
|
81
85
|
versusScreenPostRender(nil)
|
|
82
86
|
end
|
|
87
|
+
function postCurseEval(self, curses)
|
|
88
|
+
local customStage = v.run.currentCustomStage
|
|
89
|
+
if customStage == nil then
|
|
90
|
+
return nil
|
|
91
|
+
end
|
|
92
|
+
if hasFlag(nil, curses, LevelCurse.MAZE) then
|
|
93
|
+
return removeFlag(nil, curses, LevelCurse.MAZE)
|
|
94
|
+
end
|
|
95
|
+
return nil
|
|
96
|
+
end
|
|
83
97
|
function postGameStarted(self)
|
|
84
98
|
streakTextPostGameStarted(nil)
|
|
85
99
|
end
|
|
@@ -126,6 +140,7 @@ function ____exports.customStageInit(self, mod)
|
|
|
126
140
|
streakTextInit(nil)
|
|
127
141
|
versusScreenInit(nil)
|
|
128
142
|
mod:AddCallback(ModCallback.POST_RENDER, postRender)
|
|
143
|
+
mod:AddCallback(ModCallback.POST_CURSE_EVAL, postCurseEval)
|
|
129
144
|
mod:AddCallback(ModCallback.POST_GAME_STARTED, postGameStarted)
|
|
130
145
|
mod:AddCallback(ModCallback.GET_SHADER_PARAMS, getShaderParams)
|
|
131
146
|
mod:AddCallbackCustom(ModCallbackCustom.POST_GRID_ENTITY_BROKEN, postGridEntityBrokenRockAlt, GridEntityType.ROCK_ALT)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streakText.d.ts","sourceRoot":"","sources":["../../../src/features/customStage/streakText.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AA0F3D;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAMrC;AAGD,wBAAgB,oBAAoB,IAAI,IAAI,CAS3C;AAmFD,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAGD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,MAAM,GACjB,IAAI,CAYN;
|
|
1
|
+
{"version":3,"file":"streakText.d.ts","sourceRoot":"","sources":["../../../src/features/customStage/streakText.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AA0F3D;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAMrC;AAGD,wBAAgB,oBAAoB,IAAI,IAAI,CAS3C;AAmFD,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAGD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,MAAM,GACjB,IAAI,CAYN;AAgFD,wBAAgB,kBAAkB,IAAI,IAAI,CAUzC"}
|
|
@@ -127,7 +127,6 @@ function renderSprite(self, customStage, sprite, position)
|
|
|
127
127
|
until true
|
|
128
128
|
local adjustedX = centeredX + adjustment
|
|
129
129
|
local adjustedY = position.Y + STREAK_TEXT_BOTTOM_Y_OFFSET
|
|
130
|
-
sprite:RenderLayer(0, position)
|
|
131
130
|
font:DrawStringScaled(
|
|
132
131
|
name,
|
|
133
132
|
adjustedX,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blackSprite.d.ts","sourceRoot":"","sources":["../../../src/features/customTrapdoor/blackSprite.ts"],"names":[],"mappings":"AASA,wBAAgB,eAAe,IAAI,IAAI,CAMtC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local ____constants = require("constants")
|
|
3
|
+
local VectorZero = ____constants.VectorZero
|
|
4
|
+
local ____StageTravelState = require("enums.private.StageTravelState")
|
|
5
|
+
local StageTravelState = ____StageTravelState.StageTravelState
|
|
6
|
+
local ____customStageConstants = require("features.customStage.customStageConstants")
|
|
7
|
+
local ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH = ____customStageConstants.ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH
|
|
8
|
+
local ____v = require("features.customTrapdoor.v")
|
|
9
|
+
local v = ____v.default
|
|
10
|
+
local sprite = Sprite()
|
|
11
|
+
sprite:Load(ISAACSCRIPT_CUSTOM_STAGE_GFX_PATH .. "/black.anm2", true)
|
|
12
|
+
sprite:SetFrame("Default", 0)
|
|
13
|
+
function ____exports.drawBlackSprite(self)
|
|
14
|
+
if v.run.state ~= StageTravelState.PAUSING_ON_BLACK then
|
|
15
|
+
return
|
|
16
|
+
end
|
|
17
|
+
sprite:RenderLayer(0, VectorZero)
|
|
18
|
+
end
|
|
19
|
+
return ____exports
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { GridEntityType } from "isaac-typescript-definitions";
|
|
2
2
|
export declare const CUSTOM_TRAPDOOR_FEATURE_NAME = "customTrapdoor";
|
|
3
|
+
export declare const GridEntityTypeCustom: {
|
|
4
|
+
readonly TRAPDOOR_CUSTOM: GridEntityType;
|
|
5
|
+
};
|
|
3
6
|
/** This also applies to crawl spaces. The value was determined through trial and error. */
|
|
4
7
|
export declare const TRAPDOOR_OPEN_DISTANCE = 60;
|
|
5
8
|
export declare const TRAPDOOR_OPEN_DISTANCE_AFTER_BOSS: number;
|
|
6
9
|
export declare const TRAPDOOR_BOSS_REACTION_FRAMES = 30;
|
|
7
|
-
export declare const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
export declare const TRAPDOOR_TOUCH_DISTANCE = 16.5;
|
|
11
|
+
export declare const ANIMATIONS_THAT_PREVENT_STAGE_TRAVEL: ReadonlySet<string>;
|
|
12
|
+
export declare const PIXELATION_TO_BLACK_FRAMES = 52;
|
|
13
|
+
export declare const OTHER_PLAYER_TRAPDOOR_JUMP_DELAY_GAME_FRAMES = 10;
|
|
14
|
+
export declare const OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES = 8;
|
|
10
15
|
//# sourceMappingURL=customTrapdoorConstants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customTrapdoorConstants.d.ts","sourceRoot":"","sources":["../../../src/features/customTrapdoor/customTrapdoorConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAE7D,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,iCAAiC,QAA+B,CAAC;AAC9E,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"customTrapdoorConstants.d.ts","sourceRoot":"","sources":["../../../src/features/customTrapdoor/customTrapdoorConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAE7D,eAAO,MAAM,oBAAoB;;CAEvB,CAAC;AAEX,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,iCAAiC,QAA+B,CAAC;AAC9E,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,eAAO,MAAM,oCAAoC,EAAE,WAAW,CAAC,MAAM,CAClC,CAAC;AAEpC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,eAAO,MAAM,4CAA4C,KAAK,CAAC;AAC/D,eAAO,MAAM,+CAA+C,IAAI,CAAC"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local Set = ____lualib.Set
|
|
3
|
+
local __TS__New = ____lualib.__TS__New
|
|
1
4
|
local ____exports = {}
|
|
2
5
|
____exports.CUSTOM_TRAPDOOR_FEATURE_NAME = "customTrapdoor"
|
|
6
|
+
____exports.GridEntityTypeCustom = {TRAPDOOR_CUSTOM = 1000}
|
|
3
7
|
--- This also applies to crawl spaces. The value was determined through trial and error.
|
|
4
8
|
____exports.TRAPDOOR_OPEN_DISTANCE = 60
|
|
5
9
|
____exports.TRAPDOOR_OPEN_DISTANCE_AFTER_BOSS = ____exports.TRAPDOOR_OPEN_DISTANCE * 2.5
|
|
6
10
|
____exports.TRAPDOOR_BOSS_REACTION_FRAMES = 30
|
|
7
|
-
____exports.
|
|
11
|
+
____exports.TRAPDOOR_TOUCH_DISTANCE = 16.5
|
|
12
|
+
____exports.ANIMATIONS_THAT_PREVENT_STAGE_TRAVEL = __TS__New(Set, {"Happy", "Sad", "Jump"})
|
|
13
|
+
____exports.PIXELATION_TO_BLACK_FRAMES = 52
|
|
14
|
+
____exports.OTHER_PLAYER_TRAPDOOR_JUMP_DELAY_GAME_FRAMES = 10
|
|
15
|
+
____exports.OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES = 8
|
|
8
16
|
return ____exports
|
|
@@ -6,7 +6,7 @@ import { LevelStage, StageType } from "isaac-typescript-definitions";
|
|
|
6
6
|
* - custom destination (or custom logic for after the player enters)
|
|
7
7
|
* - custom graphics
|
|
8
8
|
* - custom logic for opening/closing
|
|
9
|
-
* - TODO: animation
|
|
9
|
+
* - TODO: player jumping animation?
|
|
10
10
|
*
|
|
11
11
|
* You can use this function to take the player to your custom stage.
|
|
12
12
|
*
|
|
@@ -14,24 +14,16 @@ import { LevelStage, StageType } from "isaac-typescript-definitions";
|
|
|
14
14
|
* respawned every time the player re-enters the room.
|
|
15
15
|
*
|
|
16
16
|
* @param gridIndexOrPosition The location in the room to spawn the trapdoor.
|
|
17
|
-
* @param
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* function that returns one of these things. By default, the destination will
|
|
23
|
-
* be set to the next floor like that of a vanilla trapdoor.
|
|
17
|
+
* @param destination Optional. Used to specify where the player will go after jumping into the
|
|
18
|
+
* trapdoor. Can either be a tuple containing the stage and stage type, or a
|
|
19
|
+
* string containing the name of a custom stage. If not specified at all, then
|
|
20
|
+
* the "normal" destination corresponding to the current stage and room will be
|
|
21
|
+
* used (e.g. the next floor).
|
|
24
22
|
* @param anm2Path Optional. The path to the anm2 file to use. By default, the vanilla trapdoor anm2
|
|
25
|
-
* of "gfx/grid/door_11_trapdoor.anm2" will be used.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* @param _shouldCloseFunc Optional. If the trapdoor is currently open, this function will run on
|
|
30
|
-
* every frame to determine if it should close. By default, a function that
|
|
31
|
-
* emulates a vanilla trapdoor will be used.
|
|
32
|
-
* @param _spawnOpen Optional. Whether or not to spawn the trapdoor in an open state. Can either be
|
|
33
|
-
* a boolean or a function returning a boolean. By default, a function that
|
|
34
|
-
* emulates a vanilla trapdoor will be used.
|
|
23
|
+
* of "gfx/grid/door_11_trapdoor.anm2" will be used. The specified anm2 file must
|
|
24
|
+
* have animations called "Opened", "Closed", and "Open Animation".
|
|
25
|
+
* @param spawnOpen Optional. Whether or not to spawn the trapdoor in an open state. By default,
|
|
26
|
+
* behavior will be used that emulates a vanilla trapdoor.
|
|
35
27
|
*/
|
|
36
|
-
export declare function spawnCustomTrapdoor(gridIndexOrPosition: int | Vector,
|
|
28
|
+
export declare function spawnCustomTrapdoor(gridIndexOrPosition: int | Vector, destination?: [stage: LevelStage, stageType: StageType] | string, anm2Path?: string, spawnOpen?: boolean): GridEntity;
|
|
37
29
|
//# sourceMappingURL=exports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/features/customTrapdoor/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/features/customTrapdoor/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,SAAS,EACV,MAAM,8BAA8B,CAAC;AAgBtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CACjC,mBAAmB,EAAE,GAAG,GAAG,MAAM,EACjC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,EAChE,QAAQ,SAAmC,EAC3C,SAAS,CAAC,EAAE,OAAO,GAClB,UAAU,CAwCZ"}
|