isaacscript-common 30.11.4 → 30.11.5

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 +1 @@
1
- {"version":3,"file":"pillEffectClasses.d.ts","sourceRoot":"","sources":["../../../src/objects/pillEffectClasses.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAE1B,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,yBAAyB,mCAAmC,CAAC;AAE1E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDkC,CAAC"}
1
+ {"version":3,"file":"pillEffectClasses.d.ts","sourceRoot":"","sources":["../../../src/objects/pillEffectClasses.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAE1B,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,yBAAyB,mCAAmC,CAAC;AAE1E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDkC,CAAC"}
@@ -53,7 +53,6 @@ ____exports.PILL_EFFECT_CLASSES = {
53
53
  [PillEffect.VURP] = ItemConfigPillEffectClass.MEDIUM,
54
54
  [PillEffect.SHOT_SPEED_DOWN] = ItemConfigPillEffectClass.MAJOR,
55
55
  [PillEffect.SHOT_SPEED_UP] = ItemConfigPillEffectClass.MAJOR,
56
- [PillEffect.EXPERIMENTAL] = ItemConfigPillEffectClass.MAJOR,
57
56
  [PillEffect.EXPERIMENTAL] = ItemConfigPillEffectClass.MAJOR
58
57
  }
59
58
  return ____exports
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isaacscript-common",
3
- "version": "30.11.4",
3
+ "version": "30.11.5",
4
4
  "description": "Helper functions and features for IsaacScript mods.",
5
5
  "keywords": [
6
6
  "isaac",
@@ -18,6 +18,7 @@ import { PickupIndex } from "../../../types/PickupIndex";
18
18
  import { ReadonlySet } from "../../../types/ReadonlySet";
19
19
  import { Feature } from "../../private/Feature";
20
20
  import { PickupIndexCreation } from "./PickupIndexCreation";
21
+ import { RunInNFrames } from "./RunInNFrames";
21
22
 
22
23
  const ROLL_COLLECTIBLE_TYPES = new ReadonlySet([
23
24
  // The `PRE_USE_ITEM` D6 callback is fired for D6, D100, Dice Shard, 4-pip Dice Room, and 6-pip
@@ -44,12 +45,19 @@ export class PreventCollectibleRotation extends Feature {
44
45
  public override v = v;
45
46
 
46
47
  private pickupIndexCreation: PickupIndexCreation;
48
+ private runInNFrames: RunInNFrames;
47
49
 
48
50
  /** @internal */
49
- constructor(pickupIndexCreation: PickupIndexCreation) {
51
+ constructor(
52
+ pickupIndexCreation: PickupIndexCreation,
53
+ runInNFrames: RunInNFrames,
54
+ ) {
50
55
  super();
51
56
 
52
- this.featuresUsed = [ISCFeature.PICKUP_INDEX_CREATION];
57
+ this.featuresUsed = [
58
+ ISCFeature.PICKUP_INDEX_CREATION,
59
+ ISCFeature.RUN_IN_N_FRAMES,
60
+ ];
53
61
 
54
62
  this.callbacksUsed = [
55
63
  // 5
@@ -69,6 +77,7 @@ export class PreventCollectibleRotation extends Feature {
69
77
  ];
70
78
 
71
79
  this.pickupIndexCreation = pickupIndexCreation;
80
+ this.runInNFrames = runInNFrames;
72
81
  }
73
82
 
74
83
  private preUseItem = (
@@ -169,7 +178,7 @@ export class PreventCollectibleRotation extends Feature {
169
178
  if (!isCollectible(collectible)) {
170
179
  const entityID = getEntityID(collectible);
171
180
  error(
172
- `The "preventCollectibleRotate" function was given a non-collectible: ${entityID}`,
181
+ `The "preventCollectibleRotation" function was given a non-collectible: ${entityID}`,
173
182
  );
174
183
  }
175
184
 
@@ -181,5 +190,17 @@ export class PreventCollectibleRotation extends Feature {
181
190
  if (collectible.SubType !== collectibleType) {
182
191
  setCollectibleSubType(collectible, collectibleType);
183
192
  }
193
+
194
+ // It takes a frame for the `setCollectibleSubType` function to apply. There is a race condition
195
+ // whereby if the next frame is a collectible rotation (which occurs on frame 30, 60, 90, and so
196
+ // on), the collectible rotation will overwrite the `setCollectibleSubType` function. Thus, we
197
+ // must check again on the next frame. However, we cannot use an `EntityPtr`, because the
198
+ // reference is destroyed when the rotation occurs. Thus, we resort to using the `Exists` method
199
+ // and hope that no crashes occur.
200
+ this.runInNFrames.runNextGameFrame(() => {
201
+ if (collectible.Exists() && collectible.SubType !== collectibleType) {
202
+ setCollectibleSubType(collectible, collectibleType);
203
+ }
204
+ });
184
205
  }
185
206
  }
package/src/features.ts CHANGED
@@ -156,6 +156,7 @@ export function getFeatures(
156
156
  );
157
157
  const preventCollectibleRotation = new PreventCollectibleRotation(
158
158
  pickupIndexCreation,
159
+ runInNFrames,
159
160
  );
160
161
 
161
162
  const customGridEntities = new CustomGridEntities(runInNFrames);
@@ -6,56 +6,55 @@ import {
6
6
  export const DEFAULT_PILL_EFFECT_CLASS = ItemConfigPillEffectClass.MODDED;
7
7
 
8
8
  export const PILL_EFFECT_CLASSES = {
9
- [PillEffect.BAD_GAS]: ItemConfigPillEffectClass.MINOR,
10
- [PillEffect.BAD_TRIP]: ItemConfigPillEffectClass.MEDIUM,
11
- [PillEffect.BALLS_OF_STEEL]: ItemConfigPillEffectClass.MEDIUM,
12
- [PillEffect.BOMBS_ARE_KEYS]: ItemConfigPillEffectClass.MEDIUM,
13
- [PillEffect.EXPLOSIVE_DIARRHEA]: ItemConfigPillEffectClass.MINOR,
14
- [PillEffect.FULL_HEALTH]: ItemConfigPillEffectClass.MEDIUM,
15
- [PillEffect.HEALTH_DOWN]: ItemConfigPillEffectClass.MAJOR,
16
- [PillEffect.HEALTH_UP]: ItemConfigPillEffectClass.MAJOR,
17
- [PillEffect.I_FOUND_PILLS]: ItemConfigPillEffectClass.JOKE,
18
- [PillEffect.PUBERTY]: ItemConfigPillEffectClass.JOKE,
19
- [PillEffect.PRETTY_FLY]: ItemConfigPillEffectClass.MEDIUM,
20
- [PillEffect.RANGE_DOWN]: ItemConfigPillEffectClass.MAJOR,
21
- [PillEffect.RANGE_UP]: ItemConfigPillEffectClass.MAJOR,
22
- [PillEffect.SPEED_DOWN]: ItemConfigPillEffectClass.MAJOR,
23
- [PillEffect.SPEED_UP]: ItemConfigPillEffectClass.MAJOR,
24
- [PillEffect.TEARS_DOWN]: ItemConfigPillEffectClass.MAJOR,
25
- [PillEffect.TEARS_UP]: ItemConfigPillEffectClass.MAJOR,
26
- [PillEffect.LUCK_DOWN]: ItemConfigPillEffectClass.MAJOR,
27
- [PillEffect.LUCK_UP]: ItemConfigPillEffectClass.MAJOR,
28
- [PillEffect.TELEPILLS]: ItemConfigPillEffectClass.MAJOR,
29
- [PillEffect.FORTY_EIGHT_HOUR_ENERGY]: ItemConfigPillEffectClass.MEDIUM,
30
- [PillEffect.HEMATEMESIS]: ItemConfigPillEffectClass.MEDIUM,
31
- [PillEffect.PARALYSIS]: ItemConfigPillEffectClass.MINOR,
32
- [PillEffect.I_CAN_SEE_FOREVER]: ItemConfigPillEffectClass.MEDIUM,
33
- [PillEffect.PHEROMONES]: ItemConfigPillEffectClass.MINOR,
34
- [PillEffect.AMNESIA]: ItemConfigPillEffectClass.MEDIUM,
35
- [PillEffect.LEMON_PARTY]: ItemConfigPillEffectClass.MINOR,
36
- [PillEffect.R_U_A_WIZARD]: ItemConfigPillEffectClass.MINOR,
37
- [PillEffect.PERCS]: ItemConfigPillEffectClass.MINOR,
38
- [PillEffect.ADDICTED]: ItemConfigPillEffectClass.MINOR,
39
- [PillEffect.RELAX]: ItemConfigPillEffectClass.JOKE,
40
- [PillEffect.QUESTION_MARKS]: ItemConfigPillEffectClass.MINOR,
41
- [PillEffect.ONE_MAKES_YOU_LARGER]: ItemConfigPillEffectClass.MINOR,
42
- [PillEffect.ONE_MAKES_YOU_SMALL]: ItemConfigPillEffectClass.MINOR,
43
- [PillEffect.INFESTED_EXCLAMATION]: ItemConfigPillEffectClass.MINOR,
44
- [PillEffect.INFESTED_QUESTION]: ItemConfigPillEffectClass.MINOR,
45
- [PillEffect.POWER]: ItemConfigPillEffectClass.MINOR,
46
- [PillEffect.RETRO_VISION]: ItemConfigPillEffectClass.MINOR,
47
- [PillEffect.FRIENDS_TILL_THE_END]: ItemConfigPillEffectClass.MINOR,
48
- [PillEffect.X_LAX]: ItemConfigPillEffectClass.MINOR,
49
- [PillEffect.SOMETHINGS_WRONG]: ItemConfigPillEffectClass.JOKE,
50
- [PillEffect.IM_DROWSY]: ItemConfigPillEffectClass.MINOR,
51
- [PillEffect.IM_EXCITED]: ItemConfigPillEffectClass.MINOR,
52
- [PillEffect.GULP]: ItemConfigPillEffectClass.MEDIUM,
53
- [PillEffect.HORF]: ItemConfigPillEffectClass.JOKE,
9
+ [PillEffect.BAD_GAS]: ItemConfigPillEffectClass.MINOR, // 0
10
+ [PillEffect.BAD_TRIP]: ItemConfigPillEffectClass.MEDIUM, // 1
11
+ [PillEffect.BALLS_OF_STEEL]: ItemConfigPillEffectClass.MEDIUM, // 2
12
+ [PillEffect.BOMBS_ARE_KEYS]: ItemConfigPillEffectClass.MEDIUM, // 3
13
+ [PillEffect.EXPLOSIVE_DIARRHEA]: ItemConfigPillEffectClass.MINOR, // 4
14
+ [PillEffect.FULL_HEALTH]: ItemConfigPillEffectClass.MEDIUM, // 5
15
+ [PillEffect.HEALTH_DOWN]: ItemConfigPillEffectClass.MAJOR, // 6
16
+ [PillEffect.HEALTH_UP]: ItemConfigPillEffectClass.MAJOR, // 7
17
+ [PillEffect.I_FOUND_PILLS]: ItemConfigPillEffectClass.JOKE, // 8
18
+ [PillEffect.PUBERTY]: ItemConfigPillEffectClass.JOKE, // 9
19
+ [PillEffect.PRETTY_FLY]: ItemConfigPillEffectClass.MEDIUM, // 10
20
+ [PillEffect.RANGE_DOWN]: ItemConfigPillEffectClass.MAJOR, // 11
21
+ [PillEffect.RANGE_UP]: ItemConfigPillEffectClass.MAJOR, // 12
22
+ [PillEffect.SPEED_DOWN]: ItemConfigPillEffectClass.MAJOR, // 13
23
+ [PillEffect.SPEED_UP]: ItemConfigPillEffectClass.MAJOR, // 14
24
+ [PillEffect.TEARS_DOWN]: ItemConfigPillEffectClass.MAJOR, // 15
25
+ [PillEffect.TEARS_UP]: ItemConfigPillEffectClass.MAJOR, // 16
26
+ [PillEffect.LUCK_DOWN]: ItemConfigPillEffectClass.MAJOR, // 17
27
+ [PillEffect.LUCK_UP]: ItemConfigPillEffectClass.MAJOR, // 18
28
+ [PillEffect.TELEPILLS]: ItemConfigPillEffectClass.MAJOR, // 19
29
+ [PillEffect.FORTY_EIGHT_HOUR_ENERGY]: ItemConfigPillEffectClass.MEDIUM, // 20
30
+ [PillEffect.HEMATEMESIS]: ItemConfigPillEffectClass.MEDIUM, // 21
31
+ [PillEffect.PARALYSIS]: ItemConfigPillEffectClass.MINOR, // 22
32
+ [PillEffect.I_CAN_SEE_FOREVER]: ItemConfigPillEffectClass.MEDIUM, // 23
33
+ [PillEffect.PHEROMONES]: ItemConfigPillEffectClass.MINOR, // 24
34
+ [PillEffect.AMNESIA]: ItemConfigPillEffectClass.MEDIUM, // 25
35
+ [PillEffect.LEMON_PARTY]: ItemConfigPillEffectClass.MINOR, // 26
36
+ [PillEffect.R_U_A_WIZARD]: ItemConfigPillEffectClass.MINOR, // 27
37
+ [PillEffect.PERCS]: ItemConfigPillEffectClass.MINOR, // 28
38
+ [PillEffect.ADDICTED]: ItemConfigPillEffectClass.MINOR, // 29
39
+ [PillEffect.RELAX]: ItemConfigPillEffectClass.JOKE, // 30
40
+ [PillEffect.QUESTION_MARKS]: ItemConfigPillEffectClass.MINOR, // 31
41
+ [PillEffect.ONE_MAKES_YOU_LARGER]: ItemConfigPillEffectClass.MINOR, // 32
42
+ [PillEffect.ONE_MAKES_YOU_SMALL]: ItemConfigPillEffectClass.MINOR, // 33
43
+ [PillEffect.INFESTED_EXCLAMATION]: ItemConfigPillEffectClass.MINOR, // 34
44
+ [PillEffect.INFESTED_QUESTION]: ItemConfigPillEffectClass.MINOR, // 35
45
+ [PillEffect.POWER]: ItemConfigPillEffectClass.MINOR, // 36
46
+ [PillEffect.RETRO_VISION]: ItemConfigPillEffectClass.MINOR, // 37
47
+ [PillEffect.FRIENDS_TILL_THE_END]: ItemConfigPillEffectClass.MINOR, // 38
48
+ [PillEffect.X_LAX]: ItemConfigPillEffectClass.MINOR, // 39
49
+ [PillEffect.SOMETHINGS_WRONG]: ItemConfigPillEffectClass.JOKE, // 40
50
+ [PillEffect.IM_DROWSY]: ItemConfigPillEffectClass.MINOR, // 41
51
+ [PillEffect.IM_EXCITED]: ItemConfigPillEffectClass.MINOR, // 42
52
+ [PillEffect.GULP]: ItemConfigPillEffectClass.MEDIUM, // 43
53
+ [PillEffect.HORF]: ItemConfigPillEffectClass.JOKE, // 44
54
54
  [PillEffect.FEELS_LIKE_IM_WALKING_ON_SUNSHINE]:
55
- ItemConfigPillEffectClass.MINOR,
56
- [PillEffect.VURP]: ItemConfigPillEffectClass.MEDIUM,
57
- [PillEffect.SHOT_SPEED_DOWN]: ItemConfigPillEffectClass.MAJOR,
58
- [PillEffect.SHOT_SPEED_UP]: ItemConfigPillEffectClass.MAJOR,
59
- [PillEffect.EXPERIMENTAL]: ItemConfigPillEffectClass.MAJOR,
60
- [PillEffect.EXPERIMENTAL]: ItemConfigPillEffectClass.MAJOR,
55
+ ItemConfigPillEffectClass.MINOR, // 45
56
+ [PillEffect.VURP]: ItemConfigPillEffectClass.MEDIUM, // 46
57
+ [PillEffect.SHOT_SPEED_DOWN]: ItemConfigPillEffectClass.MAJOR, // 47
58
+ [PillEffect.SHOT_SPEED_UP]: ItemConfigPillEffectClass.MAJOR, // 48
59
+ [PillEffect.EXPERIMENTAL]: ItemConfigPillEffectClass.MAJOR, // 49
61
60
  } as const satisfies Record<PillEffect, ItemConfigPillEffectClass>;