isaacscript-common 6.14.0 → 6.15.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.
@@ -1,108 +1,22 @@
1
- local ____lualib = require("lualib_bundle")
2
- local Map = ____lualib.Map
3
- local __TS__New = ____lualib.__TS__New
4
- local __TS__Iterator = ____lualib.__TS__Iterator
5
1
  local ____exports = {}
6
- local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
7
- local CollectibleType = ____isaac_2Dtypescript_2Ddefinitions.CollectibleType
8
- local PlayerType = ____isaac_2Dtypescript_2Ddefinitions.PlayerType
9
- local TrinketType = ____isaac_2Dtypescript_2Ddefinitions.TrinketType
10
- local ____cachedClasses = require("cachedClasses")
11
- local game = ____cachedClasses.game
12
- local ____collectibleSet = require("functions.collectibleSet")
13
- local getCollectibleSet = ____collectibleSet.getCollectibleSet
14
- local ____playerDataStructures = require("functions.playerDataStructures")
15
- local mapGetPlayer = ____playerDataStructures.mapGetPlayer
16
- local mapSetPlayer = ____playerDataStructures.mapSetPlayer
17
- local ____playerIndex = require("functions.playerIndex")
18
- local getPlayers = ____playerIndex.getPlayers
19
2
  local ____players = require("functions.players")
20
3
  local anyPlayerHasCollectible = ____players.anyPlayerHasCollectible
21
- local getPlayersOfType = ____players.getPlayersOfType
22
- local ____utils = require("functions.utils")
23
- local ____repeat = ____utils["repeat"]
24
- local COLLECTIBLES_THAT_AFFECT_ITEM_POOLS = {CollectibleType.CHAOS, CollectibleType.SACRED_ORB, CollectibleType.TMTRAINER}
25
- local TRINKETS_THAT_AFFECT_ITEM_POOLS = {TrinketType.NO}
26
- --- Helper function to see if the given collectible is unlocked on the player's save file. This
4
+ --- Helper function to see if the given collectible is unlocked on the current save file. This
27
5
  -- requires providing the corresponding item pool that the collectible is located in.
28
6
  --
29
- -- - If any player currently has the item, then it is assumed to be unlocked. (This is because Eden
30
- -- may have randomly started with the provided collectible, and it will be subsequently removed
31
- -- from all pools.)
7
+ -- - If any player currently has the collectible, then it is assumed to be unlocked. (This is
8
+ -- because in almost all cases, when a collectible is added to a player's inventory, it is
9
+ -- subsequently removed from all pools.)
32
10
  -- - If the collectible is located in more than one item pool, then any item pool can be provided.
33
11
  -- - If the collectible is not located in any item pools, then this function will always return
34
12
  -- false.
35
- -- - If any player is Tainted Lost, they will be temporarily changed to Isaac and then temporarily
36
- -- changed back (because Tainted Lost is not able to retrieve some collectibles from item pools).
37
- function ____exports.isCollectibleUnlocked(self, collectibleTypeToCheckFor, itemPoolToCheckFor)
38
- if anyPlayerHasCollectible(nil, collectibleTypeToCheckFor) then
13
+ -- - If the collectible is non-offensive, any Tainted Losts will be temporarily changed to Isaac and
14
+ -- then changed back. (This is because Tainted Lost is not able to retrieve non-offensive
15
+ -- collectibles from item pools).
16
+ function ____exports.isCollectibleUnlocked(self, collectibleType, itemPoolType)
17
+ if anyPlayerHasCollectible(nil, collectibleType) then
39
18
  return true
40
19
  end
41
- local taintedLosts = getPlayersOfType(nil, PlayerType.THE_LOST_B)
42
- for ____, player in ipairs(taintedLosts) do
43
- player:ChangePlayerType(PlayerType.ISAAC)
44
- end
45
- local removedItemsMap = __TS__New(Map)
46
- local removedTrinketsMap = __TS__New(Map)
47
- for ____, player in ipairs(getPlayers(nil)) do
48
- local removedItems = {}
49
- for ____, itemToRemove in ipairs(COLLECTIBLES_THAT_AFFECT_ITEM_POOLS) do
50
- if player:HasCollectible(itemToRemove) then
51
- local numCollectibles = player:GetCollectibleNum(itemToRemove)
52
- ____repeat(
53
- nil,
54
- numCollectibles,
55
- function()
56
- player:RemoveCollectible(itemToRemove)
57
- removedItems[#removedItems + 1] = itemToRemove
58
- end
59
- )
60
- end
61
- end
62
- mapSetPlayer(nil, removedItemsMap, player, removedItems)
63
- local removedTrinkets = {}
64
- for ____, trinketToRemove in ipairs(TRINKETS_THAT_AFFECT_ITEM_POOLS) do
65
- if player:HasTrinket(trinketToRemove) then
66
- local numTrinkets = player:GetTrinketMultiplier(trinketToRemove)
67
- ____repeat(
68
- nil,
69
- numTrinkets,
70
- function()
71
- player:TryRemoveTrinket(trinketToRemove)
72
- removedTrinkets[#removedTrinkets + 1] = trinketToRemove
73
- end
74
- )
75
- end
76
- end
77
- mapSetPlayer(nil, removedTrinketsMap, player, removedTrinkets)
78
- end
79
- local itemPool = game:GetItemPool()
80
- local collectibleSet = getCollectibleSet(nil)
81
- for ____, collectibleType in __TS__Iterator(collectibleSet:values()) do
82
- if collectibleType ~= collectibleTypeToCheckFor then
83
- itemPool:AddRoomBlacklist(collectibleType)
84
- end
85
- end
86
- local retrievedCollectibleType = itemPool:GetCollectible(itemPoolToCheckFor, false, 1)
87
- local collectibleUnlocked = retrievedCollectibleType == collectibleTypeToCheckFor
88
- itemPool:ResetRoomBlacklist()
89
- for ____, player in ipairs(getPlayers(nil)) do
90
- local removedItems = mapGetPlayer(nil, removedItemsMap, player)
91
- if removedItems ~= nil then
92
- for ____, collectibleType in ipairs(removedItems) do
93
- player:AddCollectible(collectibleType, 0, false)
94
- end
95
- end
96
- local removedTrinkets = mapGetPlayer(nil, removedTrinketsMap, player)
97
- if removedTrinkets ~= nil then
98
- for ____, trinketType in ipairs(removedTrinkets) do
99
- player:AddTrinket(trinketType, false)
100
- end
101
- end
102
- end
103
- for ____, player in ipairs(taintedLosts) do
104
- player:ChangePlayerType(PlayerType.THE_LOST_B)
105
- end
106
- return collectibleUnlocked
20
+ return ____exports.isCollectibleUnlocked(nil, collectibleType, itemPoolType)
107
21
  end
108
22
  return ____exports
@@ -17,6 +17,19 @@ export declare function giveTrinketsBack(player: EntityPlayer, trinketSituation:
17
17
  * avoid calling this function multiple times. Default is 1.
18
18
  */
19
19
  export declare function smeltTrinket(player: EntityPlayer, trinketType: TrinketType, numTrinkets?: number): void;
20
+ /**
21
+ * Helper function to smelt two or more different trinkets. If you want to smelt one trinket (or
22
+ * multiple copies of one trinket), then use the `smeltTrinket` helper function instead.
23
+ *
24
+ * This function is variadic, meaning that you can pass as many trinket types as you want to smelt.
25
+ *
26
+ * Before smelting, this function will automatically remove the trinkets that the player is holding,
27
+ * if any, and then give them back after the new trinket is smelted.
28
+ *
29
+ * @param player The player to smelt the trinkets to.
30
+ * @param trinketTypes The trinket types to smelt.
31
+ */
32
+ export declare function smeltTrinkets(player: EntityPlayer, ...trinketTypes: TrinketType[]): void;
20
33
  /**
21
34
  * Helper function to temporarily remove a specific kind of trinket from the player. Use this in
22
35
  * combination with the `giveTrinketsBack` function to take away and give back a trinket on the same
@@ -1 +1 @@
1
- {"version":3,"file":"trinketGive.d.ts","sourceRoot":"","sources":["../../src/functions/trinketGive.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKlE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,GAC7C,IAAI,CA+BN;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,WAAW,SAAI,GACd,IAAI,CASN;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,GACvB,gBAAgB,GAAG,SAAS,CAkC9B;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,GACnB,gBAAgB,GAAG,SAAS,CAsB9B"}
1
+ {"version":3,"file":"trinketGive.d.ts","sourceRoot":"","sources":["../../src/functions/trinketGive.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKlE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,GAC7C,IAAI,CA+BN;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,WAAW,SAAI,GACd,IAAI,CASN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,GAAG,YAAY,EAAE,WAAW,EAAE,GAC7B,IAAI,CAIN;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,GACvB,gBAAgB,GAAG,SAAS,CAkC9B;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,GACnB,gBAAgB,GAAG,SAAS,CAsB9B"}
@@ -81,6 +81,22 @@ function ____exports.smeltTrinket(self, player, trinketType, numTrinkets)
81
81
  )
82
82
  ____exports.giveTrinketsBack(nil, player, trinketSituation)
83
83
  end
84
+ --- Helper function to smelt two or more different trinkets. If you want to smelt one trinket (or
85
+ -- multiple copies of one trinket), then use the `smeltTrinket` helper function instead.
86
+ --
87
+ -- This function is variadic, meaning that you can pass as many trinket types as you want to smelt.
88
+ --
89
+ -- Before smelting, this function will automatically remove the trinkets that the player is holding,
90
+ -- if any, and then give them back after the new trinket is smelted.
91
+ --
92
+ -- @param player The player to smelt the trinkets to.
93
+ -- @param trinketTypes The trinket types to smelt.
94
+ function ____exports.smeltTrinkets(self, player, ...)
95
+ local trinketTypes = {...}
96
+ for ____, trinketType in ipairs(trinketTypes) do
97
+ ____exports.smeltTrinket(nil, player, trinketType)
98
+ end
99
+ end
84
100
  --- Helper function to temporarily remove a specific kind of trinket from the player. Use this in
85
101
  -- combination with the `giveTrinketsBack` function to take away and give back a trinket on the same
86
102
  -- frame. This function correctly handles multiple trinket slots and ensures that all copies of the
package/dist/index.d.ts CHANGED
@@ -74,6 +74,7 @@ export * from "./functions/gridEntities";
74
74
  export * from "./functions/gridEntitiesSpecific";
75
75
  export * from "./functions/input";
76
76
  export * from "./functions/isaacAPIClass";
77
+ export * from "./functions/itemPool";
77
78
  export * from "./functions/jsonHelpers";
78
79
  export * from "./functions/jsonRoom";
79
80
  export * from "./functions/kColor";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.lua CHANGED
@@ -590,6 +590,14 @@ do
590
590
  end
591
591
  end
592
592
  end
593
+ do
594
+ local ____export = require("functions.itemPool")
595
+ for ____exportKey, ____exportValue in pairs(____export) do
596
+ if ____exportKey ~= "default" then
597
+ ____exports[____exportKey] = ____exportValue
598
+ end
599
+ end
600
+ end
593
601
  do
594
602
  local ____export = require("functions.jsonHelpers")
595
603
  for ____exportKey, ____exportValue in pairs(____export) do
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "6.14.0",
3
+ "version": "6.15.0",
4
4
  "description": "Helper functions and features for IsaacScript mods.",
5
5
  "keywords": [
6
6
  "isaac",
@@ -323,6 +323,10 @@ export function getCollectibleName(collectibleType: CollectibleType): string {
323
323
  return DEFAULT_COLLECTIBLE_NAME;
324
324
  }
325
325
 
326
+ /**
327
+ * Helper function to get the "pedestal type" of a collectible. For example, it might be sitting on
328
+ * top of a broken Blood Donation Machine, or it might be sitting on top of an opened Spiked Chest.
329
+ */
326
330
  export function getCollectiblePedestalType(
327
331
  collectible: EntityPickup,
328
332
  ): CollectiblePedestalType {
@@ -338,8 +342,8 @@ export function getCollectiblePedestalType(
338
342
  }
339
343
 
340
344
  /**
341
- * Helper function to get the path to a collectible's quality. Returns 0 if the provided collectible
342
- * type was not valid.
345
+ * Helper function to get a collectible's quality. For example, Mom's Knife has a quality of 4.
346
+ * Returns 0 if the provided collectible type was not valid.
343
347
  */
344
348
  export function getCollectibleQuality(collectibleType: CollectibleType): int {
345
349
  const itemConfigItem = itemConfig.GetCollectible(collectibleType);
@@ -0,0 +1,153 @@
1
+ import {
2
+ CollectibleType,
3
+ ItemConfigTag,
4
+ ItemPoolType,
5
+ PlayerType,
6
+ TrinketType,
7
+ } from "isaac-typescript-definitions";
8
+ import { game } from "../cachedClasses";
9
+ import { PlayerIndex } from "../types/PlayerIndex";
10
+ import { getCollectibleSet } from "./collectibleSet";
11
+ import { collectibleHasTag } from "./collectibleTag";
12
+ import { mapGetPlayer, mapSetPlayer } from "./playerDataStructures";
13
+ import { getPlayers } from "./playerIndex";
14
+ import { getPlayersOfType } from "./players";
15
+ import { repeat } from "./utils";
16
+
17
+ const COLLECTIBLES_THAT_AFFECT_ITEM_POOLS: readonly CollectibleType[] = [
18
+ CollectibleType.CHAOS, // 402
19
+ CollectibleType.SACRED_ORB, // 691
20
+ CollectibleType.TMTRAINER, // 721
21
+ ];
22
+
23
+ const TRINKETS_THAT_AFFECT_ITEM_POOLS: readonly TrinketType[] = [
24
+ TrinketType.NO,
25
+ ];
26
+
27
+ /**
28
+ * Helper function to see if the given collectible is still present in the given item pool.
29
+ *
30
+ * If the collectible is non-offensive, any Tainted Losts will be temporarily changed to Isaac and
31
+ * then changed back. (This is because Tainted Lost is not able to retrieve non-offensive
32
+ * collectibles from item pools).
33
+ */
34
+ export function isCollectibleInItemPool(
35
+ collectibleType: CollectibleType,
36
+ itemPoolType: ItemPoolType,
37
+ ): boolean {
38
+ // On Tainted Lost, it is impossible to retrieve non-offensive collectibles from pools, so we
39
+ // temporarily change the character to Isaac.
40
+ const taintedLosts = getPlayersOfType(PlayerType.THE_LOST_B);
41
+ const isOffensive = collectibleHasTag(
42
+ collectibleType,
43
+ ItemConfigTag.OFFENSIVE,
44
+ );
45
+ let changedPlayerTypes = false;
46
+ if (!isOffensive) {
47
+ changedPlayerTypes = true;
48
+ for (const player of taintedLosts) {
49
+ player.ChangePlayerType(PlayerType.ISAAC);
50
+ }
51
+ }
52
+
53
+ const [removedItemsMap, removedTrinketsMap] =
54
+ removeItemsAndTrinketsThatAffectItemPools();
55
+
56
+ // Blacklist every collectible in the game except for the provided collectible.
57
+ const itemPool = game.GetItemPool();
58
+ const collectibleSet = getCollectibleSet();
59
+ for (const collectibleTypeInSet of collectibleSet.values()) {
60
+ if (collectibleTypeInSet !== collectibleType) {
61
+ itemPool.AddRoomBlacklist(collectibleTypeInSet);
62
+ }
63
+ }
64
+
65
+ // Get a collectible from the pool and see if it is the intended collectible. (We can use any
66
+ // arbitrary value as the seed since it should not influence the result.)
67
+ const retrievedCollectibleType = itemPool.GetCollectible(
68
+ itemPoolType,
69
+ false,
70
+ 1 as Seed,
71
+ );
72
+
73
+ const collectibleUnlocked = retrievedCollectibleType === collectibleType;
74
+
75
+ // Reset the blacklist
76
+ itemPool.ResetRoomBlacklist();
77
+
78
+ restoreItemsAndTrinketsThatAffectItemPools(
79
+ removedItemsMap,
80
+ removedTrinketsMap,
81
+ );
82
+
83
+ // Change any players back to Tainted Lost, if necessary.
84
+ if (changedPlayerTypes) {
85
+ for (const player of taintedLosts) {
86
+ player.ChangePlayerType(PlayerType.THE_LOST_B);
87
+ }
88
+ }
89
+
90
+ return collectibleUnlocked;
91
+ }
92
+
93
+ /**
94
+ * Before checking the item pools, remove any collectibles or trinkets that would affect the
95
+ * retrieved collectible types.
96
+ */
97
+ function removeItemsAndTrinketsThatAffectItemPools(): [
98
+ removedItemsMap: Map<PlayerIndex, CollectibleType[]>,
99
+ removedTrinketsMap: Map<PlayerIndex, TrinketType[]>,
100
+ ] {
101
+ const removedItemsMap = new Map<PlayerIndex, CollectibleType[]>();
102
+ const removedTrinketsMap = new Map<PlayerIndex, TrinketType[]>();
103
+ for (const player of getPlayers()) {
104
+ const removedItems: CollectibleType[] = [];
105
+ for (const itemToRemove of COLLECTIBLES_THAT_AFFECT_ITEM_POOLS) {
106
+ if (player.HasCollectible(itemToRemove)) {
107
+ const numCollectibles = player.GetCollectibleNum(itemToRemove);
108
+ repeat(numCollectibles, () => {
109
+ player.RemoveCollectible(itemToRemove);
110
+ removedItems.push(itemToRemove);
111
+ });
112
+ }
113
+ }
114
+
115
+ mapSetPlayer(removedItemsMap, player, removedItems);
116
+
117
+ const removedTrinkets: TrinketType[] = [];
118
+ for (const trinketToRemove of TRINKETS_THAT_AFFECT_ITEM_POOLS) {
119
+ if (player.HasTrinket(trinketToRemove)) {
120
+ const numTrinkets = player.GetTrinketMultiplier(trinketToRemove);
121
+ repeat(numTrinkets, () => {
122
+ player.TryRemoveTrinket(trinketToRemove);
123
+ removedTrinkets.push(trinketToRemove);
124
+ });
125
+ }
126
+ }
127
+
128
+ mapSetPlayer(removedTrinketsMap, player, removedTrinkets);
129
+ }
130
+
131
+ return [removedItemsMap, removedTrinketsMap];
132
+ }
133
+
134
+ function restoreItemsAndTrinketsThatAffectItemPools(
135
+ removedItemsMap: Map<PlayerIndex, CollectibleType[]>,
136
+ removedTrinketsMap: Map<PlayerIndex, TrinketType[]>,
137
+ ) {
138
+ for (const player of getPlayers()) {
139
+ const removedItems = mapGetPlayer(removedItemsMap, player);
140
+ if (removedItems !== undefined) {
141
+ for (const collectibleType of removedItems) {
142
+ player.AddCollectible(collectibleType, 0, false); // Prevent Chaos from spawning pickups
143
+ }
144
+ }
145
+
146
+ const removedTrinkets = mapGetPlayer(removedTrinketsMap, player);
147
+ if (removedTrinkets !== undefined) {
148
+ for (const trinketType of removedTrinkets) {
149
+ player.AddTrinket(trinketType, false);
150
+ }
151
+ }
152
+ }
153
+ }