isaacscript-common 8.4.5 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/callbacks/postCursedTeleport.lua +4 -4
- package/dist/callbacks/postPlayerFatalDamage.lua +7 -7
- package/dist/callbacks/postSacrifice.lua +2 -2
- package/dist/callbacks/postTrinketBreak.lua +2 -2
- package/dist/callbacks/subscriptions/postPlayerFatalDamage.d.ts +2 -2
- package/dist/callbacks/subscriptions/postPlayerFatalDamage.d.ts.map +1 -1
- package/dist/callbacks/subscriptions/postPlayerFatalDamage.lua +4 -4
- package/dist/features/characterStats.d.ts.map +1 -1
- package/dist/features/characterStats.lua +1 -2
- package/dist/features/customGridEntity.d.ts.map +1 -1
- package/dist/features/customGridEntity.lua +3 -36
- package/dist/features/extraConsoleCommands/init.d.ts.map +1 -1
- package/dist/features/extraConsoleCommands/init.lua +1 -1
- package/dist/features/firstLast.d.ts +6 -3
- package/dist/features/firstLast.d.ts.map +1 -1
- package/dist/features/firstLast.lua +6 -3
- package/dist/features/playerInventory.d.ts +11 -3
- package/dist/features/playerInventory.d.ts.map +1 -1
- package/dist/features/playerInventory.lua +14 -3
- package/dist/functions/bosses.d.ts +8 -2
- package/dist/functions/bosses.d.ts.map +1 -1
- package/dist/functions/bosses.lua +14 -6
- package/dist/functions/collectibleCacheFlag.d.ts +1 -1
- package/dist/functions/collectibleCacheFlag.d.ts.map +1 -1
- package/dist/functions/collectibleCacheFlag.lua +1 -2
- package/dist/functions/collectibleSet.lua +32 -32
- package/dist/functions/collectibleTag.d.ts +1 -1
- package/dist/functions/collectibleTag.d.ts.map +1 -1
- package/dist/functions/collectibleTag.lua +1 -3
- package/dist/functions/eden.d.ts +1 -1
- package/dist/functions/eden.d.ts.map +1 -1
- package/dist/functions/eden.lua +1 -2
- package/dist/functions/flag.d.ts +1 -1
- package/dist/functions/flag.lua +1 -1
- package/dist/functions/flying.d.ts +1 -1
- package/dist/functions/flying.d.ts.map +1 -1
- package/dist/functions/flying.lua +5 -2
- package/dist/functions/input.d.ts +2 -2
- package/dist/functions/input.d.ts.map +1 -1
- package/dist/functions/input.lua +2 -4
- package/dist/functions/playerHealth.d.ts +93 -0
- package/dist/functions/playerHealth.d.ts.map +1 -1
- package/dist/functions/playerHealth.lua +216 -33
- package/dist/functions/players.d.ts +1 -111
- package/dist/functions/players.d.ts.map +1 -1
- package/dist/functions/players.lua +20 -279
- package/dist/functions/revive.d.ts +1 -1
- package/dist/functions/revive.d.ts.map +1 -1
- package/dist/functions/revive.lua +5 -4
- package/dist/functions/stats.d.ts +16 -0
- package/dist/functions/stats.d.ts.map +1 -1
- package/dist/functions/stats.lua +78 -0
- package/dist/functions/transformations.d.ts +1 -1
- package/dist/functions/transformations.d.ts.map +1 -1
- package/dist/functions/trinketCacheFlag.d.ts +1 -1
- package/dist/functions/trinketCacheFlag.d.ts.map +1 -1
- package/dist/functions/trinketCacheFlag.lua +1 -3
- package/dist/functions/trinketSet.lua +32 -32
- package/dist/index.d.ts +37 -36
- package/dist/sets/bossSets.d.ts +1 -0
- package/dist/sets/bossSets.d.ts.map +1 -1
- package/dist/sets/bossSets.lua +23 -0
- package/package.json +2 -2
- package/src/callbacks/postCursedTeleport.ts +7 -7
- package/src/callbacks/postPlayerFatalDamage.ts +9 -16
- package/src/callbacks/postSacrifice.ts +5 -5
- package/src/callbacks/postTrinketBreak.ts +5 -5
- package/src/callbacks/subscriptions/postPlayerFatalDamage.ts +9 -9
- package/src/features/characterStats.ts +1 -2
- package/src/features/customGridEntity.ts +0 -55
- package/src/features/extraConsoleCommands/init.ts +8 -1
- package/src/features/firstLast.ts +6 -3
- package/src/features/playerInventory.ts +24 -4
- package/src/functions/bosses.ts +18 -6
- package/src/functions/collectibleCacheFlag.ts +3 -3
- package/src/functions/collectibleSet.ts +32 -32
- package/src/functions/collectibleTag.ts +2 -3
- package/src/functions/eden.ts +3 -3
- package/src/functions/flag.ts +1 -1
- package/src/functions/flying.ts +4 -4
- package/src/functions/input.ts +4 -5
- package/src/functions/playerHealth.ts +269 -7
- package/src/functions/players.ts +1 -348
- package/src/functions/revive.ts +6 -10
- package/src/functions/stats.ts +75 -0
- package/src/functions/transformations.ts +1 -1
- package/src/functions/trinketCacheFlag.ts +2 -3
- package/src/functions/trinketSet.ts +32 -32
- package/src/sets/bossSets.ts +33 -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
|
|
7
|
-
const
|
|
6
|
+
const ALL_TRINKET_TYPES_ARRAY: TrinketType[] = [];
|
|
7
|
+
const ALL_TRINKET_TYPES_SET = new Set<TrinketType>();
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const VANILLA_TRINKET_TYPES_ARRAY: TrinketType[] = [];
|
|
10
|
+
const VANILLA_TRINKET_TYPES_SET = new Set<TrinketType>();
|
|
11
11
|
|
|
12
|
-
const
|
|
13
|
-
const
|
|
12
|
+
const MODDED_TRINKET_TYPES_ARRAY: TrinketType[] = [];
|
|
13
|
+
const MODDED_TRINKET_TYPES_SET = new Set<TrinketType>();
|
|
14
14
|
|
|
15
|
-
function
|
|
16
|
-
if (
|
|
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
|
-
|
|
26
|
-
|
|
25
|
+
VANILLA_TRINKET_TYPES_ARRAY.push(trinketType);
|
|
26
|
+
VANILLA_TRINKET_TYPES_SET.add(trinketType);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
function
|
|
32
|
-
if (
|
|
31
|
+
function lazyInitModdedTrinketTypes() {
|
|
32
|
+
if (MODDED_TRINKET_TYPES_ARRAY.length > 0) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
lazyInitVanillaTrinketTypes();
|
|
37
37
|
|
|
38
|
-
for (const trinketType of
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
49
|
-
|
|
48
|
+
MODDED_TRINKET_TYPES_ARRAY.push(trinketType);
|
|
49
|
+
MODDED_TRINKET_TYPES_SET.add(trinketType);
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
68
|
-
return
|
|
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
|
-
|
|
82
|
-
return
|
|
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
|
-
|
|
96
|
-
return
|
|
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
|
-
|
|
110
|
-
return
|
|
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
|
-
|
|
121
|
-
return
|
|
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
|
-
|
|
132
|
-
return
|
|
131
|
+
lazyInitVanillaTrinketTypes();
|
|
132
|
+
return VANILLA_TRINKET_TYPES_SET;
|
|
133
133
|
}
|
package/src/sets/bossSets.ts
CHANGED
|
@@ -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,30 @@ 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
|
+
export const ALL_BOSSES_EXCLUDING_STORY_BOSSES_SET =
|
|
479
|
+
getAllBossesExcludingStoryBossesSet();
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Since story bosses are stored by entity type, we copy the existing bosses and filter them (to
|
|
483
|
+
* avoid having to hard-code story boss variants).
|
|
484
|
+
*/
|
|
485
|
+
function getAllBossesExcludingStoryBossesSet(): ReadonlySet<string> {
|
|
486
|
+
const allBossesExcludingStoryBossesSet = copySet(ALL_BOSSES_SET);
|
|
487
|
+
const allBosses = [...ALL_BOSSES_SET.values()];
|
|
488
|
+
for (const entityTypeVariantString of allBosses) {
|
|
489
|
+
const tuple = parseEntityTypeVariantString(entityTypeVariantString);
|
|
490
|
+
if (tuple === undefined) {
|
|
491
|
+
error(
|
|
492
|
+
"Failed to parse a boss tuple when constructing the story boss set.",
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const [entityType, _variant] = tuple;
|
|
497
|
+
if (STORY_BOSSES_SET.has(entityType)) {
|
|
498
|
+
allBossesExcludingStoryBossesSet.delete(entityTypeVariantString);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
return allBossesExcludingStoryBossesSet;
|
|
503
|
+
}
|