isaacscript-common 1.2.122 → 1.2.125

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.
@@ -5,8 +5,8 @@ local ____exports = {}
5
5
  local hasSubscriptions, postPEffectUpdateReordered, queueEmpty, queueNotEmpty, v
6
6
  local ____exports = require("features.saveDataManager.exports")
7
7
  local saveDataManager = ____exports.saveDataManager
8
- local ____player = require("functions.player")
9
- local getPlayerIndex = ____player.getPlayerIndex
8
+ local ____playerDataStructures = require("functions.playerDataStructures")
9
+ local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
10
10
  local ____DefaultMap = require("types.DefaultMap")
11
11
  local DefaultMap = ____DefaultMap.DefaultMap
12
12
  local ____ModCallbacksCustom = require("types.ModCallbacksCustom")
@@ -27,8 +27,7 @@ function postPEffectUpdateReordered(self, player)
27
27
  if not hasSubscriptions(nil) then
28
28
  return
29
29
  end
30
- local playerIndex = getPlayerIndex(nil, player)
31
- local pickingUpItem = v.run.playerPickingUpItemMap:getAndSetDefault(playerIndex)
30
+ local pickingUpItem = defaultMapGetPlayer(nil, v.run.playersPickingUpItemMap, player)
32
31
  if player:IsItemQueueEmpty() then
33
32
  queueEmpty(nil, player, pickingUpItem)
34
33
  else
@@ -53,7 +52,7 @@ function queueNotEmpty(self, player, pickingUpItem)
53
52
  preItemPickupFire(nil, player, pickingUpItem)
54
53
  end
55
54
  end
56
- v = {run = {playerPickingUpItemMap = __TS__New(
55
+ v = {run = {playersPickingUpItemMap = __TS__New(
57
56
  DefaultMap,
58
57
  function() return newPickingUpItem(nil) end
59
58
  )}}
@@ -9,8 +9,10 @@ local saveDataManager = ____exports.saveDataManager
9
9
  local ____flag = require("functions.flag")
10
10
  local hasFlag = ____flag.hasFlag
11
11
  local ____player = require("functions.player")
12
- local getPlayerIndex = ____player.getPlayerIndex
13
12
  local getPlayerNumHitsRemaining = ____player.getPlayerNumHitsRemaining
13
+ local ____playerDataStructures = require("functions.playerDataStructures")
14
+ local mapGetPlayer = ____playerDataStructures.mapGetPlayer
15
+ local mapSetPlayer = ____playerDataStructures.mapSetPlayer
14
16
  local ____postCursedTeleport = require("callbacks.subscriptions.postCursedTeleport")
15
17
  local postCursedTeleportFire = ____postCursedTeleport.postCursedTeleportFire
16
18
  local postCursedTeleportHasSubscriptions = ____postCursedTeleport.postCursedTeleportHasSubscriptions
@@ -31,8 +33,7 @@ function setDamageFrame(self, tookDamage, damageFlags)
31
33
  if player == nil then
32
34
  return
33
35
  end
34
- local playerIndex = getPlayerIndex(nil, player)
35
- local trackingArray = v.run.damageFrameMap:get(playerIndex)
36
+ local trackingArray = mapGetPlayer(nil, v.run.playersDamageFrameMap, player)
36
37
  if trackingArray ~= nil then
37
38
  local lastDamageFrame, callbackFiredOnThisFrame = table.unpack(trackingArray)
38
39
  if lastDamageFrame == gameFrameCount and callbackFiredOnThisFrame then
@@ -42,7 +43,8 @@ function setDamageFrame(self, tookDamage, damageFlags)
42
43
  if isPotentialNaturalTeleportFromSacrificeRoom(nil, damageFlags) then
43
44
  return
44
45
  end
45
- v.run.damageFrameMap:set(playerIndex, {gameFrameCount, false})
46
+ local newTrackingArray = {gameFrameCount, false}
47
+ mapSetPlayer(nil, v.run.playersDamageFrameMap, player, newTrackingArray)
46
48
  end
47
49
  function isPotentialNaturalTeleportFromSacrificeRoom(self, damageFlags)
48
50
  local game = Game()
@@ -65,10 +67,7 @@ function postPlayerRenderPlayer(self, player)
65
67
  if not hasSubscriptions(nil) then
66
68
  return
67
69
  end
68
- local game = Game()
69
- local gameFrameCount = game:GetFrameCount()
70
- local playerIndex = getPlayerIndex(nil, player)
71
- local trackingArray = v.run.damageFrameMap:get(playerIndex)
70
+ local trackingArray = mapGetPlayer(nil, v.run.playersDamageFrameMap, player)
72
71
  if trackingArray == nil then
73
72
  return
74
73
  end
@@ -79,7 +78,10 @@ function postPlayerRenderPlayer(self, player)
79
78
  if callbackActivatedOnThisFrame then
80
79
  return
81
80
  end
82
- v.run.damageFrameMap:set(playerIndex, {gameFrameCount, true})
81
+ local game = Game()
82
+ local gameFrameCount = game:GetFrameCount()
83
+ local newTrackingArray = {gameFrameCount, true}
84
+ mapSetPlayer(nil, v.run.playersDamageFrameMap, player, newTrackingArray)
83
85
  postCursedTeleportFire(nil, player)
84
86
  end
85
87
  function playerIsTeleportingFromCursedTeleport(self, player, lastDamageFrame)
@@ -102,7 +104,7 @@ function playerIsTeleportingFromCursedTeleport(self, player, lastDamageFrame)
102
104
  return false
103
105
  end
104
106
  v = {
105
- run = {damageFrameMap = __TS__New(Map)},
107
+ run = {playersDamageFrameMap = __TS__New(Map)},
106
108
  level = {numSacrifices = 0}
107
109
  }
108
110
  function ____exports.postCursedTeleportCallbackInit(self, mod)
@@ -1,13 +1,15 @@
1
1
  --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
2
  local ____lualib = require("lualib_bundle")
3
- local Map = ____lualib.Map
4
3
  local __TS__New = ____lualib.__TS__New
5
4
  local ____exports = {}
6
5
  local hasSubscriptions, postPEffectUpdateReordered, v
7
6
  local ____exports = require("features.saveDataManager.exports")
8
7
  local saveDataManager = ____exports.saveDataManager
9
- local ____player = require("functions.player")
10
- local getPlayerIndex = ____player.getPlayerIndex
8
+ local ____playerDataStructures = require("functions.playerDataStructures")
9
+ local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
10
+ local mapSetPlayer = ____playerDataStructures.mapSetPlayer
11
+ local ____DefaultMap = require("types.DefaultMap")
12
+ local DefaultMap = ____DefaultMap.DefaultMap
11
13
  local ____ModCallbacksCustom = require("types.ModCallbacksCustom")
12
14
  local ModCallbacksCustom = ____ModCallbacksCustom.ModCallbacksCustom
13
15
  local ____postPlayerChangeType = require("callbacks.subscriptions.postPlayerChangeType")
@@ -21,18 +23,16 @@ function postPEffectUpdateReordered(self, player)
21
23
  return
22
24
  end
23
25
  local character = player:GetPlayerType()
24
- local playerIndex = getPlayerIndex(nil, player)
25
- local storedCharacter = v.run.characterMap:get(playerIndex)
26
- if storedCharacter == nil then
27
- v.run.characterMap:set(playerIndex, character)
28
- return
29
- end
26
+ local storedCharacter = defaultMapGetPlayer(nil, v.run.playersCharacterMap, player, character)
30
27
  if character ~= storedCharacter then
31
- v.run.characterMap:set(playerIndex, character)
28
+ mapSetPlayer(nil, v.run.playersCharacterMap, player, character)
32
29
  postPlayerChangeTypeFire(nil, player, storedCharacter, character)
33
30
  end
34
31
  end
35
- v = {run = {characterMap = __TS__New(Map)}}
32
+ v = {run = {playersCharacterMap = __TS__New(
33
+ DefaultMap,
34
+ function(____, _key, character) return character end
35
+ )}}
36
36
  function ____exports.postPlayerChangeTypeCallbackInit(self, mod)
37
37
  saveDataManager(nil, "postPlayerChangeType", v, hasSubscriptions)
38
38
  mod:AddCallbackCustom(ModCallbacksCustom.MC_POST_PEFFECT_UPDATE_REORDERED, postPEffectUpdateReordered)
@@ -6,8 +6,10 @@ local hasSubscriptions, entityTakeDmgPlayer, v
6
6
  local ____exports = require("features.saveDataManager.exports")
7
7
  local saveDataManager = ____exports.saveDataManager
8
8
  local ____player = require("functions.player")
9
- local getPlayerIndex = ____player.getPlayerIndex
10
9
  local isChildPlayer = ____player.isChildPlayer
10
+ local ____playerDataStructures = require("functions.playerDataStructures")
11
+ local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
12
+ local mapSetPlayer = ____playerDataStructures.mapSetPlayer
11
13
  local ____revive = require("functions.revive")
12
14
  local isDamageToPlayerFatal = ____revive.isDamageToPlayerFatal
13
15
  local willPlayerRevive = ____revive.willPlayerRevive
@@ -32,8 +34,8 @@ function entityTakeDmgPlayer(self, tookDamage, damageAmount, damageFlags, damage
32
34
  end
33
35
  local game = Game()
34
36
  local gameFrameCount = game:GetFrameCount()
35
- local playerIndex = getPlayerIndex(nil, player)
36
- local lastDamageGameFrame = v.run.playersLastDamageGameFrame:getAndSetDefault(playerIndex, gameFrameCount)
37
+ local lastDamageGameFrame = defaultMapGetPlayer(nil, v.run.playersLastDamageGameFrame, player)
38
+ mapSetPlayer(nil, v.run.playersLastDamageGameFrame, player, gameFrameCount)
37
39
  if willPlayerRevive(nil, player) then
38
40
  return nil
39
41
  end
@@ -59,10 +61,7 @@ function entityTakeDmgPlayer(self, tookDamage, damageAmount, damageFlags, damage
59
61
  end
60
62
  return nil
61
63
  end
62
- v = {run = {playersLastDamageGameFrame = __TS__New(
63
- DefaultMap,
64
- function(____, _key, gameFrameCount) return gameFrameCount end
65
- )}}
64
+ v = {run = {playersLastDamageGameFrame = __TS__New(DefaultMap, nil)}}
66
65
  function ____exports.postPlayerFatalDamageCallbackInit(self, mod)
67
66
  saveDataManager(nil, "postPlayerFatalDamage", v)
68
67
  mod:AddCallback(ModCallbacks.MC_ENTITY_TAKE_DMG, entityTakeDmgPlayer, EntityType.ENTITY_PLAYER)
@@ -6,8 +6,9 @@ local ____exports = {}
6
6
  local hasSubscriptions, postPlayerUpdate, v
7
7
  local ____exports = require("features.saveDataManager.exports")
8
8
  local saveDataManager = ____exports.saveDataManager
9
- local ____player = require("functions.player")
10
- local getPlayerIndex = ____player.getPlayerIndex
9
+ local ____playerDataStructures = require("functions.playerDataStructures")
10
+ local setAddPlayer = ____playerDataStructures.setAddPlayer
11
+ local setHasPlayer = ____playerDataStructures.setHasPlayer
11
12
  local ____postPlayerInitLate = require("callbacks.subscriptions.postPlayerInitLate")
12
13
  local postPlayerInitLateFire = ____postPlayerInitLate.postPlayerInitLateFire
13
14
  local postPlayerInitLateHasSubscriptions = ____postPlayerInitLate.postPlayerInitLateHasSubscriptions
@@ -18,13 +19,12 @@ function postPlayerUpdate(self, player)
18
19
  if not hasSubscriptions(nil) then
19
20
  return
20
21
  end
21
- local playerIndex = getPlayerIndex(nil, player)
22
- if not v.run.firedSet:has(playerIndex) then
23
- v.run.firedSet:add(playerIndex)
22
+ if not setHasPlayer(nil, v.run.playersFiredSet, player) then
23
+ setAddPlayer(nil, v.run.playersFiredSet, player)
24
24
  postPlayerInitLateFire(nil, player)
25
25
  end
26
26
  end
27
- v = {run = {firedSet = __TS__New(Set)}}
27
+ v = {run = {playersFiredSet = __TS__New(Set)}}
28
28
  function ____exports.postPlayerInitLateCallbackInit(self, mod)
29
29
  saveDataManager(nil, "postPlayerInitLate", v, hasSubscriptions)
30
30
  mod:AddCallback(ModCallbacks.MC_POST_PLAYER_UPDATE, postPlayerUpdate)
@@ -8,8 +8,9 @@ local ____exports = require("features.saveDataManager.exports")
8
8
  local saveDataManager = ____exports.saveDataManager
9
9
  local ____pickups = require("functions.pickups")
10
10
  local getPickups = ____pickups.getPickups
11
- local ____player = require("functions.player")
12
- local getPlayerIndex = ____player.getPlayerIndex
11
+ local ____playerDataStructures = require("functions.playerDataStructures")
12
+ local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
13
+ local mapSetPlayer = ____playerDataStructures.mapSetPlayer
13
14
  local ____DefaultMap = require("types.DefaultMap")
14
15
  local DefaultMap = ____DefaultMap.DefaultMap
15
16
  local ____postPurchase = require("callbacks.subscriptions.postPurchase")
@@ -23,9 +24,8 @@ function postPEffectUpdate(self, player)
23
24
  return
24
25
  end
25
26
  local isHoldingItem = player:IsHoldingItem()
26
- local playerIndex = getPlayerIndex(nil, player)
27
- local wasHoldingItemOnLastFrame = v.room.playersHoldingItemOnLastFrameMap:getAndSetDefault(playerIndex)
28
- v.room.playersHoldingItemOnLastFrameMap:set(playerIndex, isHoldingItem)
27
+ local wasHoldingItemOnLastFrame = defaultMapGetPlayer(nil, v.room.playersHoldingItemOnLastFrameMap, player)
28
+ mapSetPlayer(nil, v.room.playersHoldingItemOnLastFrameMap, player, isHoldingItem)
29
29
  if not wasHoldingItemOnLastFrame and isHoldingItem then
30
30
  playerPickedUpNewItem(nil, player)
31
31
  end
@@ -9,8 +9,8 @@ local ____exports = require("features.saveDataManager.exports")
9
9
  local saveDataManager = ____exports.saveDataManager
10
10
  local ____math = require("functions.math")
11
11
  local range = ____math.range
12
- local ____player = require("functions.player")
13
- local getPlayerIndex = ____player.getPlayerIndex
12
+ local ____playerDataStructures = require("functions.playerDataStructures")
13
+ local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
14
14
  local ____DefaultMap = require("types.DefaultMap")
15
15
  local DefaultMap = ____DefaultMap.DefaultMap
16
16
  local ____ModCallbacksCustom = require("types.ModCallbacksCustom")
@@ -25,8 +25,7 @@ function postPEffectUpdateReordered(self, player)
25
25
  if not hasSubscriptions(nil) then
26
26
  return
27
27
  end
28
- local playerIndex = getPlayerIndex(nil, player)
29
- local playerTransformationsMap = v.run.playersTransformationsMap:getAndSetDefault(playerIndex)
28
+ local playerTransformationsMap = defaultMapGetPlayer(nil, v.run.playersTransformationsMap, player)
30
29
  for ____, playerForm in ipairs(VALID_TRANSFORMATIONS) do
31
30
  local hasForm = player:HasPlayerForm(playerForm)
32
31
  local storedForm = playerTransformationsMap:getAndSetDefault(playerForm)
@@ -5,8 +5,8 @@ local ____exports = {}
5
5
  local hasSubscriptions, entityTakeDmgPlayer, postPEffectUpdateReordered, TRINKETS_THAT_CAN_BREAK, v
6
6
  local ____exports = require("features.saveDataManager.exports")
7
7
  local saveDataManager = ____exports.saveDataManager
8
- local ____player = require("functions.player")
9
- local getPlayerIndex = ____player.getPlayerIndex
8
+ local ____playerDataStructures = require("functions.playerDataStructures")
9
+ local defaultMapGetPlayer = ____playerDataStructures.defaultMapGetPlayer
10
10
  local ____DefaultMap = require("types.DefaultMap")
11
11
  local DefaultMap = ____DefaultMap.DefaultMap
12
12
  local ____ModCallbacksCustom = require("types.ModCallbacksCustom")
@@ -25,8 +25,7 @@ function entityTakeDmgPlayer(self, tookDamage, _damageAmount, _damageFlags, _dam
25
25
  if player == nil then
26
26
  return
27
27
  end
28
- local playerIndex = getPlayerIndex(nil, player)
29
- local trinketMap = v.run.playersTrinketMap:getAndSetDefault(playerIndex)
28
+ local trinketMap = defaultMapGetPlayer(nil, v.run.playersTrinketMap, player)
30
29
  for ____, trinketType in ipairs(TRINKETS_THAT_CAN_BREAK) do
31
30
  do
32
31
  local numTrinketsHeld = player:GetTrinketMultiplier(trinketType)
@@ -48,8 +47,7 @@ function postPEffectUpdateReordered(self, player)
48
47
  if not hasSubscriptions(nil) then
49
48
  return
50
49
  end
51
- local playerIndex = getPlayerIndex(nil, player)
52
- local trinketMap = v.run.playersTrinketMap:getAndSetDefault(playerIndex)
50
+ local trinketMap = defaultMapGetPlayer(nil, v.run.playersTrinketMap, player)
53
51
  for ____, trinketType in ipairs(TRINKETS_THAT_CAN_BREAK) do
54
52
  local numTrinkets = player:GetTrinketMultiplier(trinketType)
55
53
  trinketMap:set(trinketType, numTrinkets)
@@ -63,7 +63,6 @@ export declare const FINAL_STAGE: number;
63
63
  * second TMTRAINER item subtracts one from that, and so on.
64
64
  */
65
65
  export declare const FIRST_GLITCHED_COLLECTIBLE_TYPE: number;
66
- export declare const GOLDEN_TRINKET_SHIFT: number;
67
66
  export declare const GRID_INDEX_CENTER_OF_1X1_ROOM = 67;
68
67
  export declare const GAME_FRAMES_PER_SECOND = 30;
69
68
  export declare const ISAAC_FRAMES_PER_SECOND = 60;
@@ -105,8 +104,36 @@ export declare const NUM_DIMENSIONS = 3;
105
104
  export declare const SECOND_IN_MILLISECONDS = 1000;
106
105
  export declare const MINUTE_IN_MILLISECONDS: number;
107
106
  export declare const ONE_BY_ONE_ROOM_GRID_SIZE = 135;
107
+ /**
108
+ * In vanilla, this is part of the `PillColor` enum, but we implement it as a constant in
109
+ * IsaacScript since it is not a real pill color.
110
+ *
111
+ * 1 << 11
112
+ */
113
+ export declare const PILL_GIANT_FLAG = 2048;
114
+ /**
115
+ * In vanilla, this is part of the `PillColor` enum, but we implement it as a constant in
116
+ * IsaacScript since it is not a real pill color.
117
+ *
118
+ * (1 << 11) - 1
119
+ */
120
+ export declare const PILL_COLOR_MASK = 2047;
108
121
  export declare const SINGLE_USE_ACTIVE_COLLECTIBLE_TYPES: ReadonlySet<CollectibleType>;
109
122
  export declare const STORY_BOSSES: ReadonlySet<EntityType>;
123
+ /**
124
+ * In vanilla, this is part of the `TrinketType` enum, but we implement it as a constant in
125
+ * IsaacScript since it is not a real trinket type.
126
+ *
127
+ * 1 << 15
128
+ */
129
+ export declare const TRINKET_GOLDEN_FLAG = 32768;
130
+ /**
131
+ * In vanilla, this is part of the `TrinketType` enum, but we implement it as a constant in
132
+ * IsaacScript since it is not a real trinket type.
133
+ *
134
+ * (1 << 15) - 1
135
+ */
136
+ export declare const TRINKET_ID_MASK = 32767;
110
137
  /**
111
138
  * This is the number of draw coordinates that each heart spans on the UI in the upper left hand
112
139
  * corner.
@@ -79,7 +79,6 @@ ____exports.FAMILIARS_THAT_SHOOT_PLAYER_TEARS = __TS__New(Set, {
79
79
  })
80
80
  ____exports.FINAL_STAGE = LevelStage.NUM_STAGES - 1
81
81
  ____exports.FIRST_GLITCHED_COLLECTIBLE_TYPE = (1 << 32) - 1
82
- ____exports.GOLDEN_TRINKET_SHIFT = 1 << 15
83
82
  ____exports.GRID_INDEX_CENTER_OF_1X1_ROOM = 67
84
83
  ____exports.GAME_FRAMES_PER_SECOND = 30
85
84
  ____exports.ISAAC_FRAMES_PER_SECOND = 60
@@ -104,6 +103,8 @@ ____exports.NUM_DIMENSIONS = 3
104
103
  ____exports.SECOND_IN_MILLISECONDS = 1000
105
104
  ____exports.MINUTE_IN_MILLISECONDS = 60 * ____exports.SECOND_IN_MILLISECONDS
106
105
  ____exports.ONE_BY_ONE_ROOM_GRID_SIZE = 135
106
+ ____exports.PILL_GIANT_FLAG = 2048
107
+ ____exports.PILL_COLOR_MASK = 2047
107
108
  ____exports.SINGLE_USE_ACTIVE_COLLECTIBLE_TYPES = __TS__New(Set, {
108
109
  CollectibleType.COLLECTIBLE_FORGET_ME_NOW,
109
110
  CollectibleType.COLLECTIBLE_EDENS_SOUL,
@@ -129,5 +130,7 @@ ____exports.STORY_BOSSES = __TS__New(Set, {
129
130
  EntityType.ENTITY_DOGMA,
130
131
  EntityType.ENTITY_BEAST
131
132
  })
133
+ ____exports.TRINKET_GOLDEN_FLAG = 32768
134
+ ____exports.TRINKET_ID_MASK = 32767
132
135
  ____exports.UI_HEART_WIDTH = 12
133
136
  return ____exports
@@ -22,7 +22,7 @@ import { JSONRoom } from "../types/JSONRoom";
22
22
  * function returns the final iterated seed after spawning everything, which can be used in
23
23
  * subsequent room deployments.
24
24
  */
25
- export declare function deployJSONRoom(jsonRoom: JSONRoom, seed?: number, verbose?: boolean): int;
25
+ export declare function deployJSONRoom(jsonRoom: JSONRoom, seed?: Seed, verbose?: boolean): Seed;
26
26
  /**
27
27
  * Helper function to deconstruct a vanilla room and set up a custom room in its place.
28
28
  * Specifically, this will clear the current room of all entities and grid entities, and then spawn
@@ -50,7 +50,7 @@ export declare function deployJSONRoom(jsonRoom: JSONRoom, seed?: number, verbos
50
50
  * function returns the final iterated seed after spawning everything, which can be used in
51
51
  * subsequent room deployments.
52
52
  */
53
- export declare function deployRandomJSONRoom(jsonRooms: JSONRoom[], seed?: number, verbose?: boolean): int;
53
+ export declare function deployRandomJSONRoom(jsonRooms: JSONRoom[], seed?: Seed, verbose?: boolean): Seed;
54
54
  /**
55
55
  * Helper function to remove all naturally spawning entities and grid entities from a room. Notably,
56
56
  * this will not remove players (1), tears (2), familiars (3), lasers (7), knives (8),
@@ -8,16 +8,17 @@ local ____errors = require("errors")
8
8
  local getUpgradeErrorMsg = ____errors.getUpgradeErrorMsg
9
9
  local ____flag = require("functions.flag")
10
10
  local hasFlag = ____flag.hasFlag
11
- local ____player = require("functions.player")
12
- local getPlayerIndex = ____player.getPlayerIndex
11
+ local ____playerDataStructures = require("functions.playerDataStructures")
12
+ local setAddPlayer = ____playerDataStructures.setAddPlayer
13
+ local setDeletePlayer = ____playerDataStructures.setDeletePlayer
14
+ local setHasPlayer = ____playerDataStructures.setHasPlayer
13
15
  local ____exports = require("features.saveDataManager.exports")
14
16
  local saveDataManager = ____exports.saveDataManager
15
17
  function postPEffectUpdate(self, player)
16
18
  local effects = player:GetEffects()
17
19
  local entityFlags = player:GetEntityFlags()
18
20
  local hasPonyCollectibleEffect = effects:HasCollectibleEffect(CollectibleType.COLLECTIBLE_PONY) or effects:HasCollectibleEffect(CollectibleType.COLLECTIBLE_WHITE_PONY)
19
- local playerIndex = getPlayerIndex(nil, player)
20
- local isPonyActiveOnPreviousFrame = v.run.playersIsPonyActive:has(playerIndex)
21
+ local isPonyActiveOnPreviousFrame = setHasPlayer(nil, v.run.playersIsPonyActive, player)
21
22
  local hasPonyFlags = hasFlag(
22
23
  nil,
23
24
  entityFlags,
@@ -25,9 +26,9 @@ function postPEffectUpdate(self, player)
25
26
  )
26
27
  local isPonyActiveNow = hasPonyCollectibleEffect or isPonyActiveOnPreviousFrame and hasPonyFlags
27
28
  if isPonyActiveNow then
28
- v.run.playersIsPonyActive:add(playerIndex)
29
+ setAddPlayer(nil, v.run.playersIsPonyActive, player)
29
30
  else
30
- v.run.playersIsPonyActive:delete(playerIndex)
31
+ setDeletePlayer(nil, v.run.playersIsPonyActive, player)
31
32
  end
32
33
  end
33
34
  local FEATURE_NAME = "pony activation detector"
@@ -44,7 +45,6 @@ function ____exports.isPonyActive(self, player)
44
45
  local msg = getUpgradeErrorMsg(nil, FEATURE_NAME)
45
46
  error(msg)
46
47
  end
47
- local playerIndex = getPlayerIndex(nil, player)
48
- return v.run.playersIsPonyActive:has(playerIndex)
48
+ return setHasPlayer(nil, v.run.playersIsPonyActive, player)
49
49
  end
50
50
  return ____exports
@@ -38,13 +38,13 @@ export declare function isArrayInArray<T>(arrayToMatch: T[] | readonly T[], pare
38
38
  *
39
39
  * From: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
40
40
  */
41
- export declare function shuffleArray<T>(originalArray: T[] | readonly T[], seed?: number): T[];
41
+ export declare function shuffleArray<T>(originalArray: T[] | readonly T[], seed?: Seed): T[];
42
42
  /**
43
43
  * Shuffles the provided array in-place using the Fisher-Yates algorithm.
44
44
  *
45
45
  * From: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
46
46
  */
47
- export declare function shuffleArrayInPlace<T>(array: T[], seed?: number): void;
47
+ export declare function shuffleArrayInPlace<T>(array: T[], seed?: Seed): void;
48
48
  export declare function sumArray(array: number[] | readonly number[]): number;
49
49
  export declare function arrayToString<T>(array: T[]): string;
50
50
  /**
@@ -69,7 +69,7 @@ export declare function arrayRemoveInPlace<T>(array: T[], ...elementsToRemove: T
69
69
  * @param seed Optional. The seed used to select the random element. Default is `Random()`.
70
70
  * @param exceptions Optional. An array of elements to skip over if selected.
71
71
  */
72
- export declare function getRandomArrayElement<T>(array: T[] | readonly T[], seed?: number, exceptions?: T[] | readonly T[]): T;
72
+ export declare function getRandomArrayElement<T>(array: T[] | readonly T[], seed?: Seed, exceptions?: T[] | readonly T[]): T;
73
73
  /**
74
74
  * Helper function to get a random element from the provided array. Once the random element is
75
75
  * decided, it is then removed from the array (in-place).
@@ -78,8 +78,8 @@ export declare function getRandomArrayElement<T>(array: T[] | readonly T[], seed
78
78
  * @param seed Optional. The seed used to select the random element. Default is `Random()`.
79
79
  * @param exceptions Optional. An array of elements to skip over if selected.
80
80
  */
81
- export declare function getRandomArrayElementAndRemove<T>(array: T[], seed?: number, exceptions?: T[] | readonly T[]): T;
82
- export declare function getRandomArrayIndex<T>(array: T[] | readonly T[], seed?: number): int;
81
+ export declare function getRandomArrayElementAndRemove<T>(array: T[], seed?: Seed, exceptions?: T[] | readonly T[]): T;
82
+ export declare function getRandomArrayIndex<T>(array: T[] | readonly T[], seed?: Seed): int;
83
83
  /**
84
84
  * Since Lua uses tables for every non-primitive data structure, it is non-trivial to determine if a
85
85
  * particular table is being used as an array. isArray returns true if:
@@ -40,13 +40,13 @@ export declare function getMaxCards(): int;
40
40
  * @param seed Optional. The seed with which to select the random card. Default is `Random()`.
41
41
  * @param exceptions Optional. An array of cards to not select.
42
42
  */
43
- export declare function getRandomCard(seed?: number, exceptions?: Card[]): Card;
43
+ export declare function getRandomCard(seed?: Seed, exceptions?: Card[]): Card;
44
44
  /**
45
45
  * @param cardType The card type that represents the pool of cards to select from.
46
46
  * @param seed Optional. The seed with which to select the random card. Default is `Random()`.
47
47
  * @param exceptions Optional. An array of cards to not select.
48
48
  */
49
- export declare function getRandomCardOfType(cardType: CardType, seed?: number, exceptions?: Card[]): Card;
49
+ export declare function getRandomCardOfType(cardType: CardType, seed?: Seed, exceptions?: Card[]): Card;
50
50
  /**
51
51
  * Has an equal chance of returning any rune (e.g. Rune of Hagalaz, Blank Rune, Black Rune, Soul of
52
52
  * Isaac, etc.). This will never return a Rune Shard.
@@ -54,7 +54,7 @@ export declare function getRandomCardOfType(cardType: CardType, seed?: number, e
54
54
  * @param seed Optional. The seed with which to select the random rune. Default is `Random()`.
55
55
  * @param exceptions Optional. An array of runes to not select.
56
56
  */
57
- export declare function getRandomRune(seed?: number, exceptions?: Card[]): Card;
57
+ export declare function getRandomRune(seed?: Seed, exceptions?: Card[]): Card;
58
58
  /**
59
59
  * Returns true for cards that have the following card type:
60
60
  * - CardType.TAROT
@@ -9,4 +9,4 @@ export declare function getJSONRoomsOfSubType(jsonRooms: JSONRoom[], subType: in
9
9
  * properly account for each room weight using the algorithm from:
10
10
  * https://stackoverflow.com/questions/1761626/weighted-random-numbers
11
11
  */
12
- export declare function getRandomJSONRoom(jsonRooms: JSONRoom[], seed?: number, verbose?: boolean): JSONRoom;
12
+ export declare function getRandomJSONRoom(jsonRooms: JSONRoom[], seed?: Seed, verbose?: boolean): JSONRoom;
@@ -0,0 +1,33 @@
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ import { DefaultMap } from "../types/DefaultMap";
3
+ import { PlayerIndex } from "../types/PlayerIndex";
4
+ /**
5
+ * Helper function to make using default maps with an index of `PlayerIndex` easier. Use this
6
+ * instead of the `DefaultMap.getAndSetDefault` method if you have a default map of this type.
7
+ */
8
+ export declare function defaultMapGetPlayer<V, A extends unknown[]>(map: DefaultMap<PlayerIndex, V, A>, player: EntityPlayer, ...extraArgs: A): V;
9
+ /**
10
+ * Helper function to make using maps with an index of `PlayerIndex` easier. Use this instead of the
11
+ * `Map.get` method if you have a map of this type.
12
+ */
13
+ export declare function mapGetPlayer<V>(map: Map<PlayerIndex, V>, player: EntityPlayer): V | undefined;
14
+ /**
15
+ * Helper function to make using maps with an index of `PlayerIndex` easier. Use this instead of the
16
+ * `Map.set` method if you have a map of this type.
17
+ */
18
+ export declare function mapSetPlayer<V>(map: Map<PlayerIndex, V>, player: EntityPlayer, value: V): void;
19
+ /**
20
+ * Helper function to make using sets with an type of `PlayerIndex` easier. Use this instead of the
21
+ * `Set.add` method if you have a set of this type.
22
+ */
23
+ export declare function setAddPlayer(set: Set<PlayerIndex>, player: EntityPlayer): Set<PlayerIndex>;
24
+ /**
25
+ * Helper function to make using sets with an type of `PlayerIndex` easier. Use this instead of the
26
+ * `Set.delete` method if you have a set of this type.
27
+ */
28
+ export declare function setDeletePlayer(set: Set<PlayerIndex>, player: EntityPlayer): boolean;
29
+ /**
30
+ * Helper function to make using sets with an type of `PlayerIndex` easier. Use this instead of the
31
+ * `Set.has` method if you have a set of this type.
32
+ */
33
+ export declare function setHasPlayer(set: Set<PlayerIndex>, player: EntityPlayer): boolean;
@@ -0,0 +1,32 @@
1
+ --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
+ local ____lualib = require("lualib_bundle")
3
+ local Map = ____lualib.Map
4
+ local Set = ____lualib.Set
5
+ local ____exports = {}
6
+ local ____player = require("functions.player")
7
+ local getPlayerIndex = ____player.getPlayerIndex
8
+ function ____exports.defaultMapGetPlayer(self, map, player, ...)
9
+ local playerIndex = getPlayerIndex(nil, player)
10
+ return map:getAndSetDefault(playerIndex, ...)
11
+ end
12
+ function ____exports.mapGetPlayer(self, map, player)
13
+ local playerIndex = getPlayerIndex(nil, player)
14
+ return map:get(playerIndex)
15
+ end
16
+ function ____exports.mapSetPlayer(self, map, player, value)
17
+ local playerIndex = getPlayerIndex(nil, player)
18
+ map:set(playerIndex, value)
19
+ end
20
+ function ____exports.setAddPlayer(self, set, player)
21
+ local playerIndex = getPlayerIndex(nil, player)
22
+ return set:add(playerIndex)
23
+ end
24
+ function ____exports.setDeletePlayer(self, set, player)
25
+ local playerIndex = getPlayerIndex(nil, player)
26
+ return set:delete(playerIndex)
27
+ end
28
+ function ____exports.setHasPlayer(self, set, player)
29
+ local playerIndex = getPlayerIndex(nil, player)
30
+ return set:has(playerIndex)
31
+ end
32
+ return ____exports
@@ -4,7 +4,7 @@
4
4
  * the high end. (This is because `RNG.RandomFloat()` can return a value of 0.999, but it will never
5
5
  * return a value of exactly 1.)
6
6
  */
7
- export declare function getRandom(seed?: number): float;
7
+ export declare function getRandom(seed?: Seed): float;
8
8
  /**
9
9
  * This returns a random float between min and max. It is inclusive on the low end, but exclusive on
10
10
  * the high end. (This is because `RNG.RandomFloat()` can return a value of 0.999, but it will never
@@ -15,7 +15,7 @@ export declare function getRandom(seed?: number): float;
15
15
  * const realNumberBetweenOneAndThree = getRandomFloat(1, 3, seed);
16
16
  * ```
17
17
  */
18
- export declare function getRandomFloat(min: int, max: int, seed?: number): float;
18
+ export declare function getRandomFloat(min: int, max: int, seed?: Seed): float;
19
19
  /**
20
20
  * This returns a random integer between min and max, inclusive.
21
21
  *
@@ -24,14 +24,14 @@ export declare function getRandomFloat(min: int, max: int, seed?: number): float
24
24
  * const oneTwoOrThree = getRandomInt(1, 3, seed);
25
25
  * ```
26
26
  */
27
- export declare function getRandomInt(min: int, max: int, seed?: number): int;
27
+ export declare function getRandomInt(min: int, max: int, seed?: Seed): int;
28
28
  /**
29
29
  * Helper function to get the next seed value.
30
30
  *
31
31
  * This function is useful because it is standard practice to work with seed values directly over
32
32
  * RNG objects, since the latter are not serializable.
33
33
  */
34
- export declare function nextSeed(seed: int): int;
34
+ export declare function nextSeed(seed: Seed): Seed;
35
35
  /**
36
36
  * Helper function to initialize an RNG object.
37
37
  *
@@ -46,4 +46,4 @@ export declare function nextSeed(seed: int): int;
46
46
  * (If you aren't initializing it with a seed, then don't use this function and instead simply call
47
47
  * the `RNG()` constructor.)
48
48
  */
49
- export declare function initRNG(seed?: number): RNG;
49
+ export declare function initRNG(seed?: Seed): RNG;
@@ -3,7 +3,7 @@
3
3
  * Uses the player's current health and other miscellaneous things to determine if incoming damage
4
4
  * will be fatal.
5
5
  */
6
- export declare function isDamageToPlayerFatal(player: EntityPlayer, damageAmount: int, damageSource: EntityRef, lastDamageGameFrame: int): boolean;
6
+ export declare function isDamageToPlayerFatal(player: EntityPlayer, damageAmount: int, damageSource: EntityRef, lastDamageGameFrame: int | null): boolean;
7
7
  /**
8
8
  * The `EntityPlayer.WillPlayerRevive()` function does not properly account for Mysterious Paper, so
9
9
  * use this helper function instead for more robust revival detection.
@@ -1,3 +1,4 @@
1
+ /// <reference types="isaac-typescript-definitions" />
1
2
  /**
2
3
  * Helper function to add all of the values in one set to another set. The first set passed will be
3
4
  * modified in place.
@@ -27,7 +28,7 @@ export declare function deleteSetsFromSet<T>(mainSet: Set<T>, ...setsToRemove: A
27
28
  * @param seed Optional. The seed used to select the random element. Default is `Random()`.
28
29
  * @param exceptions Optional. An array of elements to skip over if selected.
29
30
  */
30
- export declare function getRandomSetElement<T>(set: Set<T> | ReadonlySet<T>, seed?: number, exceptions?: T[] | readonly T[]): T;
31
+ export declare function getRandomSetElement<T>(set: Set<T> | ReadonlySet<T>, seed?: Seed, exceptions?: T[] | readonly T[]): T;
31
32
  /**
32
33
  * Helper function to get a sorted array based on the contents of a set.
33
34
  *
@@ -12,7 +12,7 @@
12
12
  * @param forceFreeItem Optional. Set to true to disable the logic that gives the item a price for
13
13
  * Tainted Keeper. Default is false.
14
14
  */
15
- export declare function spawnCollectible(collectibleType: CollectibleType | int, position: Vector, seed?: number, options?: boolean, forceFreeItem?: boolean): EntityPickup;
15
+ export declare function spawnCollectible(collectibleType: CollectibleType | int, position: Vector, seed?: Seed, options?: boolean, forceFreeItem?: boolean): EntityPickup;
16
16
  /**
17
17
  * Helper function to spawn an empty collectible. Doing this is tricky since spawning a collectible
18
18
  * with `CollectibleType.COLLECTIBLE_NULL` will result in spawning a collectible with a random type
@@ -21,4 +21,4 @@ export declare function spawnCollectible(collectibleType: CollectibleType | int,
21
21
  * Instead, this function arbitrarily spawns a collectible with
22
22
  * `CollectibleType.COLLECTIBLE_SAD_ONION`, and then converts it to an empty pedestal afterward.
23
23
  */
24
- export declare function spawnEmptyCollectible(position: Vector, seed?: number): EntityPickup;
24
+ export declare function spawnEmptyCollectible(position: Vector, seed?: Seed): EntityPickup;
@@ -1,7 +1,7 @@
1
1
  --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
2
  local ____exports = {}
3
3
  local ____constants = require("constants")
4
- local GOLDEN_TRINKET_SHIFT = ____constants.GOLDEN_TRINKET_SHIFT
4
+ local TRINKET_GOLDEN_FLAG = ____constants.TRINKET_GOLDEN_FLAG
5
5
  local ____player = require("functions.player")
6
6
  local useActiveItemTemp = ____player.useActiveItemTemp
7
7
  local ____utils = require("functions.utils")
@@ -18,11 +18,11 @@ function ____exports.temporarilyRemoveTrinket(self, player, trinketType)
18
18
  numTrinkets = numTrinkets + 1
19
19
  end
20
20
  local numSmeltedTrinkets = numTrinkets
21
- local trinketWasInSlot1 = trinket1 == trinketType or trinket1 + GOLDEN_TRINKET_SHIFT == trinketType
21
+ local trinketWasInSlot1 = trinket1 == trinketType or trinket1 + TRINKET_GOLDEN_FLAG == trinketType
22
22
  if trinketWasInSlot1 then
23
23
  numSmeltedTrinkets = numSmeltedTrinkets - 1
24
24
  end
25
- local trinketWasInSlot2 = trinket2 == trinketType or trinket2 + GOLDEN_TRINKET_SHIFT == trinketType
25
+ local trinketWasInSlot2 = trinket2 == trinketType or trinket2 + TRINKET_GOLDEN_FLAG == trinketType
26
26
  if trinketWasInSlot2 then
27
27
  numSmeltedTrinkets = numSmeltedTrinkets - 1
28
28
  end
@@ -1,7 +1,7 @@
1
1
  --[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
2
2
  local ____exports = {}
3
3
  local ____constants = require("constants")
4
- local GOLDEN_TRINKET_SHIFT = ____constants.GOLDEN_TRINKET_SHIFT
4
+ local TRINKET_GOLDEN_FLAG = ____constants.TRINKET_GOLDEN_FLAG
5
5
  local ____trinketDescriptionMap = require("maps.trinketDescriptionMap")
6
6
  local TRINKET_DESCRIPTION_MAP = ____trinketDescriptionMap.TRINKET_DESCRIPTION_MAP
7
7
  local ____trinketNameMap = require("maps.trinketNameMap")
@@ -83,7 +83,7 @@ function ____exports.hasOpenTrinketSlot(self, player)
83
83
  return openTrinketSlot ~= nil
84
84
  end
85
85
  function ____exports.isGoldenTrinket(self, trinketType)
86
- return trinketType > GOLDEN_TRINKET_SHIFT
86
+ return trinketType > TRINKET_GOLDEN_FLAG
87
87
  end
88
88
  function ____exports.smeltTrinket(self, player, trinketType, numTrinkets)
89
89
  if numTrinkets == nil then
package/dist/index.d.ts CHANGED
@@ -41,6 +41,7 @@ export * from "./functions/npc";
41
41
  export * from "./functions/pickups";
42
42
  export * from "./functions/pills";
43
43
  export * from "./functions/player";
44
+ export * from "./functions/playerDataStructures";
44
45
  export * from "./functions/playerHealth";
45
46
  export * from "./functions/pocketItems";
46
47
  export * from "./functions/positionVelocity";
package/dist/index.lua CHANGED
@@ -337,6 +337,14 @@ do
337
337
  end
338
338
  end
339
339
  end
340
+ do
341
+ local ____export = require("functions.playerDataStructures")
342
+ for ____exportKey, ____exportValue in pairs(____export) do
343
+ if ____exportKey ~= "default" then
344
+ ____exports[____exportKey] = ____exportValue
345
+ end
346
+ end
347
+ end
340
348
  do
341
349
  local ____export = require("functions.playerHealth")
342
350
  for ____exportKey, ____exportValue in pairs(____export) do
@@ -1,10 +1,11 @@
1
1
  /// <reference types="isaac-typescript-definitions" />
2
2
  /**
3
3
  * PlayerIndex is a specific type of string; see the documentation for the [[`getPlayerIndex`]]
4
- * function. Mods can signify that data structures handle EntityPlayers by using this type:
4
+ * function. Mods can signify that data structures handle EntityPlayers by using this type.
5
5
  *
6
+ * For example:
6
7
  * ```
7
- * const myPlayerMap = new Map<PlayerIndex, string>();
8
+ * const playersNameMap = new Map<PlayerIndex, string>();
8
9
  * ```
9
10
  *
10
11
  * This type is branded for extra type safety.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "1.2.122",
3
+ "version": "1.2.125",
4
4
  "description": "Helper functions for IsaacScript mods",
5
5
  "keywords": [
6
6
  "isaac",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "devDependencies": {
28
28
  "@zamiell/typescript-to-lua": "^1.4.2",
29
- "isaac-typescript-definitions": "^1.0.359",
29
+ "isaac-typescript-definitions": "^1.0.361",
30
30
  "isaacscript-lint": "^1.0.84",
31
31
  "isaacscript-tsconfig": "^1.1.8",
32
32
  "typedoc": "^0.22.13",