isaacscript-common 8.4.4 → 8.5.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.
Files changed (85) hide show
  1. package/dist/callbacks/postCursedTeleport.lua +4 -4
  2. package/dist/callbacks/postPlayerFatalDamage.lua +7 -7
  3. package/dist/callbacks/postSacrifice.lua +2 -2
  4. package/dist/callbacks/postTrinketBreak.lua +2 -2
  5. package/dist/callbacks/subscriptions/postPlayerFatalDamage.d.ts +2 -2
  6. package/dist/callbacks/subscriptions/postPlayerFatalDamage.d.ts.map +1 -1
  7. package/dist/callbacks/subscriptions/postPlayerFatalDamage.lua +4 -4
  8. package/dist/features/characterStats.d.ts.map +1 -1
  9. package/dist/features/characterStats.lua +1 -2
  10. package/dist/features/customGridEntity.d.ts.map +1 -1
  11. package/dist/features/customGridEntity.lua +3 -36
  12. package/dist/features/extraConsoleCommands/init.d.ts.map +1 -1
  13. package/dist/features/extraConsoleCommands/init.lua +1 -1
  14. package/dist/features/firstLast.d.ts +6 -3
  15. package/dist/features/firstLast.d.ts.map +1 -1
  16. package/dist/features/firstLast.lua +6 -3
  17. package/dist/functions/bosses.d.ts +5 -2
  18. package/dist/functions/bosses.d.ts.map +1 -1
  19. package/dist/functions/bosses.lua +11 -6
  20. package/dist/functions/collectibleCacheFlag.d.ts +1 -1
  21. package/dist/functions/collectibleCacheFlag.d.ts.map +1 -1
  22. package/dist/functions/collectibleCacheFlag.lua +1 -2
  23. package/dist/functions/collectibleSet.lua +32 -32
  24. package/dist/functions/collectibleTag.d.ts +1 -1
  25. package/dist/functions/collectibleTag.d.ts.map +1 -1
  26. package/dist/functions/collectibleTag.lua +1 -3
  27. package/dist/functions/eden.d.ts +1 -1
  28. package/dist/functions/eden.d.ts.map +1 -1
  29. package/dist/functions/eden.lua +1 -2
  30. package/dist/functions/flag.d.ts +1 -1
  31. package/dist/functions/flag.lua +1 -1
  32. package/dist/functions/flying.d.ts +1 -1
  33. package/dist/functions/flying.d.ts.map +1 -1
  34. package/dist/functions/flying.lua +5 -2
  35. package/dist/functions/input.d.ts +2 -2
  36. package/dist/functions/input.d.ts.map +1 -1
  37. package/dist/functions/input.lua +2 -4
  38. package/dist/functions/playerHealth.d.ts +93 -0
  39. package/dist/functions/playerHealth.d.ts.map +1 -1
  40. package/dist/functions/playerHealth.lua +216 -33
  41. package/dist/functions/players.d.ts +1 -111
  42. package/dist/functions/players.d.ts.map +1 -1
  43. package/dist/functions/players.lua +20 -279
  44. package/dist/functions/revive.d.ts +1 -1
  45. package/dist/functions/revive.d.ts.map +1 -1
  46. package/dist/functions/revive.lua +5 -4
  47. package/dist/functions/stats.d.ts +16 -0
  48. package/dist/functions/stats.d.ts.map +1 -1
  49. package/dist/functions/stats.lua +78 -0
  50. package/dist/functions/transformations.d.ts +1 -1
  51. package/dist/functions/transformations.d.ts.map +1 -1
  52. package/dist/functions/trinketCacheFlag.d.ts +1 -1
  53. package/dist/functions/trinketCacheFlag.d.ts.map +1 -1
  54. package/dist/functions/trinketCacheFlag.lua +1 -3
  55. package/dist/functions/trinketSet.lua +32 -32
  56. package/dist/index.d.ts +22 -33
  57. package/dist/sets/bossSets.d.ts +1 -0
  58. package/dist/sets/bossSets.d.ts.map +1 -1
  59. package/dist/sets/bossSets.lua +19 -0
  60. package/package.json +2 -2
  61. package/src/callbacks/postCursedTeleport.ts +7 -7
  62. package/src/callbacks/postPlayerFatalDamage.ts +9 -16
  63. package/src/callbacks/postSacrifice.ts +5 -5
  64. package/src/callbacks/postTrinketBreak.ts +5 -5
  65. package/src/callbacks/subscriptions/postPlayerFatalDamage.ts +9 -9
  66. package/src/features/characterStats.ts +1 -2
  67. package/src/features/customGridEntity.ts +0 -55
  68. package/src/features/extraConsoleCommands/init.ts +8 -1
  69. package/src/features/firstLast.ts +6 -3
  70. package/src/functions/bosses.ts +15 -6
  71. package/src/functions/collectibleCacheFlag.ts +3 -3
  72. package/src/functions/collectibleSet.ts +32 -32
  73. package/src/functions/collectibleTag.ts +2 -3
  74. package/src/functions/eden.ts +3 -3
  75. package/src/functions/flag.ts +1 -1
  76. package/src/functions/flying.ts +4 -4
  77. package/src/functions/input.ts +4 -5
  78. package/src/functions/playerHealth.ts +269 -7
  79. package/src/functions/players.ts +1 -348
  80. package/src/functions/revive.ts +6 -10
  81. package/src/functions/stats.ts +75 -0
  82. package/src/functions/transformations.ts +1 -1
  83. package/src/functions/trinketCacheFlag.ts +2 -3
  84. package/src/functions/trinketSet.ts +32 -32
  85. package/src/sets/bossSets.ts +24 -0
@@ -3,17 +3,17 @@ import { itemConfig } from "../core/cachedClasses";
3
3
  import { getModdedTrinketTypes } from "../features/firstLast";
4
4
  import { getVanillaTrinketTypes } from "./trinkets";
5
5
 
6
- const ALL_TRINKETS_ARRAY: TrinketType[] = [];
7
- const ALL_TRINKETS_SET = new Set<TrinketType>();
6
+ const ALL_TRINKET_TYPES_ARRAY: TrinketType[] = [];
7
+ const ALL_TRINKET_TYPES_SET = new Set<TrinketType>();
8
8
 
9
- const VANILLA_TRINKETS_ARRAY: TrinketType[] = [];
10
- const VANILLA_TRINKETS_SET = new Set<TrinketType>();
9
+ const VANILLA_TRINKET_TYPES_ARRAY: TrinketType[] = [];
10
+ const VANILLA_TRINKET_TYPES_SET = new Set<TrinketType>();
11
11
 
12
- const MODDED_TRINKETS_ARRAY: TrinketType[] = [];
13
- const MODDED_TRINKETS_SET = new Set<TrinketType>();
12
+ const MODDED_TRINKET_TYPES_ARRAY: TrinketType[] = [];
13
+ const MODDED_TRINKET_TYPES_SET = new Set<TrinketType>();
14
14
 
15
- function lazyInitVanillaTrinkets() {
16
- if (VANILLA_TRINKETS_ARRAY.length > 0) {
15
+ function lazyInitVanillaTrinketTypes() {
16
+ if (VANILLA_TRINKET_TYPES_ARRAY.length > 0) {
17
17
  return;
18
18
  }
19
19
 
@@ -22,22 +22,22 @@ function lazyInitVanillaTrinkets() {
22
22
  // Vanilla trinket types are contiguous, but we check every value just in case.
23
23
  const itemConfigItem = itemConfig.GetTrinket(trinketType);
24
24
  if (itemConfigItem !== undefined) {
25
- VANILLA_TRINKETS_ARRAY.push(trinketType);
26
- VANILLA_TRINKETS_SET.add(trinketType);
25
+ VANILLA_TRINKET_TYPES_ARRAY.push(trinketType);
26
+ VANILLA_TRINKET_TYPES_SET.add(trinketType);
27
27
  }
28
28
  }
29
29
  }
30
30
 
31
- function lazyInitModdedTrinkets() {
32
- if (MODDED_TRINKETS_ARRAY.length > 0) {
31
+ function lazyInitModdedTrinketTypes() {
32
+ if (MODDED_TRINKET_TYPES_ARRAY.length > 0) {
33
33
  return;
34
34
  }
35
35
 
36
- lazyInitVanillaTrinkets();
36
+ lazyInitVanillaTrinketTypes();
37
37
 
38
- for (const trinketType of VANILLA_TRINKETS_ARRAY) {
39
- ALL_TRINKETS_ARRAY.push(trinketType);
40
- ALL_TRINKETS_SET.add(trinketType);
38
+ for (const trinketType of VANILLA_TRINKET_TYPES_ARRAY) {
39
+ ALL_TRINKET_TYPES_ARRAY.push(trinketType);
40
+ ALL_TRINKET_TYPES_SET.add(trinketType);
41
41
  }
42
42
 
43
43
  const moddedTrinketTypes = getModdedTrinketTypes();
@@ -45,11 +45,11 @@ function lazyInitModdedTrinkets() {
45
45
  // Modded trinket types are contiguous, but we check every value just in case.
46
46
  const itemConfigItem = itemConfig.GetTrinket(trinketType);
47
47
  if (itemConfigItem !== undefined) {
48
- MODDED_TRINKETS_ARRAY.push(trinketType);
49
- MODDED_TRINKETS_SET.add(trinketType);
48
+ MODDED_TRINKET_TYPES_ARRAY.push(trinketType);
49
+ MODDED_TRINKET_TYPES_SET.add(trinketType);
50
50
 
51
- ALL_TRINKETS_ARRAY.push(trinketType);
52
- ALL_TRINKETS_SET.add(trinketType);
51
+ ALL_TRINKET_TYPES_ARRAY.push(trinketType);
52
+ ALL_TRINKET_TYPES_SET.add(trinketType);
53
53
  }
54
54
  }
55
55
  }
@@ -64,8 +64,8 @@ function lazyInitModdedTrinkets() {
64
64
  * all trinkets will necessarily be present when a mod first loads (due to mod load order).
65
65
  */
66
66
  export function getModdedTrinketArray(): readonly TrinketType[] {
67
- lazyInitModdedTrinkets();
68
- return MODDED_TRINKETS_ARRAY;
67
+ lazyInitModdedTrinketTypes();
68
+ return MODDED_TRINKET_TYPES_ARRAY;
69
69
  }
70
70
 
71
71
  /**
@@ -78,8 +78,8 @@ export function getModdedTrinketArray(): readonly TrinketType[] {
78
78
  * all trinkets will necessarily be present when a mod first loads (due to mod load order).
79
79
  */
80
80
  export function getModdedTrinketSet(): ReadonlySet<TrinketType> {
81
- lazyInitModdedTrinkets();
82
- return MODDED_TRINKETS_SET;
81
+ lazyInitModdedTrinketTypes();
82
+ return MODDED_TRINKET_TYPES_SET;
83
83
  }
84
84
 
85
85
  /**
@@ -92,8 +92,8 @@ export function getModdedTrinketSet(): ReadonlySet<TrinketType> {
92
92
  * all trinkets will necessarily be present when a mod first loads (due to mod load order).
93
93
  */
94
94
  export function getTrinketArray(): readonly TrinketType[] {
95
- lazyInitModdedTrinkets();
96
- return ALL_TRINKETS_ARRAY;
95
+ lazyInitModdedTrinketTypes();
96
+ return ALL_TRINKET_TYPES_ARRAY;
97
97
  }
98
98
 
99
99
  /**
@@ -106,8 +106,8 @@ export function getTrinketArray(): readonly TrinketType[] {
106
106
  * all trinkets will necessarily be present when a mod first loads (due to mod load order).
107
107
  */
108
108
  export function getTrinketSet(): ReadonlySet<TrinketType> {
109
- lazyInitModdedTrinkets();
110
- return ALL_TRINKETS_SET;
109
+ lazyInitModdedTrinketTypes();
110
+ return ALL_TRINKET_TYPES_SET;
111
111
  }
112
112
 
113
113
  /**
@@ -117,8 +117,8 @@ export function getTrinketSet(): ReadonlySet<TrinketType> {
117
117
  * use the `getVanillaTrinketSet` helper function instead.
118
118
  */
119
119
  export function getVanillaTrinketArray(): readonly TrinketType[] {
120
- lazyInitVanillaTrinkets();
121
- return VANILLA_TRINKETS_ARRAY;
120
+ lazyInitVanillaTrinketTypes();
121
+ return VANILLA_TRINKET_TYPES_ARRAY;
122
122
  }
123
123
 
124
124
  /**
@@ -128,6 +128,6 @@ export function getVanillaTrinketArray(): readonly TrinketType[] {
128
128
  * use the `getVanillaTrinketArray` helper function instead.
129
129
  */
130
130
  export function getVanillaTrinketSet(): ReadonlySet<TrinketType> {
131
- lazyInitVanillaTrinkets();
132
- return VANILLA_TRINKETS_SET;
131
+ lazyInitVanillaTrinketTypes();
132
+ return VANILLA_TRINKET_TYPES_SET;
133
133
  }
@@ -29,10 +29,16 @@ import {
29
29
  WarVariant,
30
30
  WidowVariant,
31
31
  } from "isaac-typescript-definitions";
32
+ import { parseEntityTypeVariantString } from "../functions/entities";
33
+ import { copySet } from "../functions/set";
34
+ import { STORY_BOSSES_SET } from "./storyBossesSet";
32
35
 
33
36
  // The "bosspools.xml" file does not actually correspond to the real boss pools, so these sets were
34
37
  // determined through experimentation on v1.7.8a.
35
38
 
39
+ // We use sets of strings instead of tuples for these data structures because TypeScript/Lua does
40
+ // not have real tuples. If we store bosses as tuples, then we cannot do a set lookup in O(1).
41
+
36
42
  /** Contains just the bosses in Basement (not e.g. Burning Basement). */
37
43
  const BASEMENT_BOSSES_SET: ReadonlySet<string> = new Set([
38
44
  `${EntityType.LARRY_JR}.${LarryJrVariant.LARRY_JR}`, // 19.0
@@ -468,3 +474,21 @@ export const ALL_BOSSES_SET: ReadonlySet<string> = new Set([
468
474
  ...ALL_STAGE_10_BOSSES_SET.values(),
469
475
  ...ALL_STAGE_11_BOSSES_SET.values(),
470
476
  ]);
477
+
478
+ // Since story bosses are stored by entity type, we copy the existing bosses and filter them (to
479
+ // avoid having to hard-code story boss variants).
480
+ const allBossesExcludingStoryBossesSet = copySet(ALL_BOSSES_SET);
481
+ const allBosses = [...ALL_BOSSES_SET.values()];
482
+ for (const entityTypeVariantString of allBosses) {
483
+ const tuple = parseEntityTypeVariantString(entityTypeVariantString);
484
+ if (tuple === undefined) {
485
+ error("Failed to parse a boss tuple when constructing the story boss set.");
486
+ }
487
+
488
+ const [entityType, _variant] = tuple;
489
+ if (STORY_BOSSES_SET.has(entityType)) {
490
+ allBossesExcludingStoryBossesSet.delete(entityTypeVariantString);
491
+ }
492
+ }
493
+ export const ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET: ReadonlySet<string> =
494
+ allBossesExcludingStoryBossesSet;