isaacscript-common 6.13.0 → 6.16.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 (144) hide show
  1. package/dist/callbacks/postGridEntityCustomCollision.d.ts +2 -0
  2. package/dist/callbacks/postGridEntityCustomCollision.d.ts.map +1 -0
  3. package/dist/callbacks/postGridEntityCustomCollision.lua +71 -0
  4. package/dist/callbacks/postGridEntityCustomRender.lua +0 -7
  5. package/dist/callbacks/postGridEntityCustomUpdate.lua +0 -7
  6. package/dist/callbacks/subscriptions/postGridEntityCustomBroken.d.ts +6 -0
  7. package/dist/callbacks/subscriptions/postGridEntityCustomBroken.d.ts.map +1 -0
  8. package/dist/callbacks/subscriptions/postGridEntityCustomBroken.lua +29 -0
  9. package/dist/callbacks/subscriptions/postGridEntityCustomCollision.d.ts +6 -0
  10. package/dist/callbacks/subscriptions/postGridEntityCustomCollision.d.ts.map +1 -0
  11. package/dist/callbacks/subscriptions/postGridEntityCustomCollision.lua +29 -0
  12. package/dist/enums/ModCallbackCustom.d.ts +96 -62
  13. package/dist/enums/ModCallbackCustom.d.ts.map +1 -1
  14. package/dist/enums/ModCallbackCustom.lua +64 -60
  15. package/dist/enums/private/SerializationBrand.d.ts +1 -1
  16. package/dist/enums/private/SerializationBrand.lua +1 -1
  17. package/dist/features/customGridEntity.d.ts +7 -3
  18. package/dist/features/customGridEntity.d.ts.map +1 -1
  19. package/dist/features/customGridEntity.lua +67 -7
  20. package/dist/features/extraConsoleCommands/exports.d.ts +4 -3
  21. package/dist/features/extraConsoleCommands/exports.d.ts.map +1 -1
  22. package/dist/features/extraConsoleCommands/exports.lua +4 -3
  23. package/dist/features/extraConsoleCommands/init.lua +1 -0
  24. package/dist/functions/collectibles.d.ts +6 -2
  25. package/dist/functions/collectibles.d.ts.map +1 -1
  26. package/dist/functions/collectibles.lua +4 -2
  27. package/dist/functions/color.d.ts +20 -14
  28. package/dist/functions/color.d.ts.map +1 -1
  29. package/dist/functions/color.lua +78 -73
  30. package/dist/functions/deepCopy.d.ts.map +1 -1
  31. package/dist/functions/deepCopy.lua +22 -1
  32. package/dist/functions/gridEntities.d.ts +2 -36
  33. package/dist/functions/gridEntities.d.ts.map +1 -1
  34. package/dist/functions/gridEntities.lua +2 -78
  35. package/dist/functions/isaacAPIClass.d.ts +1 -1
  36. package/dist/functions/isaacAPIClass.d.ts.map +1 -1
  37. package/dist/functions/itemPool.d.ts +10 -0
  38. package/dist/functions/itemPool.d.ts.map +1 -0
  39. package/dist/functions/itemPool.lua +116 -0
  40. package/dist/functions/kColor.d.ts +20 -14
  41. package/dist/functions/kColor.d.ts.map +1 -1
  42. package/dist/functions/kColor.lua +65 -60
  43. package/dist/functions/mergeTests.lua +2 -2
  44. package/dist/functions/npcs.d.ts +1 -29
  45. package/dist/functions/npcs.d.ts.map +1 -1
  46. package/dist/functions/npcs.lua +0 -45
  47. package/dist/functions/projectiles.d.ts +32 -0
  48. package/dist/functions/projectiles.d.ts.map +1 -0
  49. package/dist/functions/projectiles.lua +73 -0
  50. package/dist/functions/random.d.ts +1 -1
  51. package/dist/functions/random.lua +1 -1
  52. package/dist/functions/rng.d.ts +11 -15
  53. package/dist/functions/rng.d.ts.map +1 -1
  54. package/dist/functions/rng.lua +32 -52
  55. package/dist/functions/rockAlt.d.ts +48 -0
  56. package/dist/functions/rockAlt.d.ts.map +1 -0
  57. package/dist/functions/rockAlt.lua +365 -0
  58. package/dist/functions/saveFile.d.ts +8 -7
  59. package/dist/functions/saveFile.d.ts.map +1 -1
  60. package/dist/functions/saveFile.lua +10 -96
  61. package/dist/functions/serialization.d.ts +26 -7
  62. package/dist/functions/serialization.d.ts.map +1 -1
  63. package/dist/functions/serialization.lua +51 -19
  64. package/dist/functions/table.d.ts +2 -2
  65. package/dist/functions/table.lua +2 -2
  66. package/dist/functions/trinketGive.d.ts +13 -0
  67. package/dist/functions/trinketGive.d.ts.map +1 -1
  68. package/dist/functions/trinketGive.lua +16 -0
  69. package/dist/functions/tstlClass.d.ts +1 -1
  70. package/dist/functions/tstlClass.d.ts.map +1 -1
  71. package/dist/functions/vector.d.ts +21 -14
  72. package/dist/functions/vector.d.ts.map +1 -1
  73. package/dist/functions/vector.lua +58 -54
  74. package/dist/index.d.ts +2 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.lua +16 -0
  77. package/dist/initCustomCallbacks.d.ts.map +1 -1
  78. package/dist/initCustomCallbacks.lua +3 -0
  79. package/dist/interfaces/AddCallbackParameterCustom.d.ts +4 -0
  80. package/dist/interfaces/AddCallbackParameterCustom.d.ts.map +1 -1
  81. package/dist/objects/callbackRegisterFunctions.d.ts.map +1 -1
  82. package/dist/objects/callbackRegisterFunctions.lua +6 -0
  83. package/dist/objects/isaacAPIClassTypeToFunctions.d.ts +12 -0
  84. package/dist/objects/isaacAPIClassTypeToFunctions.d.ts.map +1 -0
  85. package/dist/objects/isaacAPIClassTypeToFunctions.lua +25 -0
  86. package/dist/types/{private/IsaacAPIClass.d.ts → IsaacAPIClass.d.ts} +0 -0
  87. package/dist/types/IsaacAPIClass.d.ts.map +1 -0
  88. package/dist/types/{private/IsaacAPIClass.lua → IsaacAPIClass.lua} +0 -0
  89. package/dist/types/{private/SerializedIsaacAPIClass.d.ts → SerializedIsaacAPIClass.d.ts} +0 -0
  90. package/dist/types/SerializedIsaacAPIClass.d.ts.map +1 -0
  91. package/dist/types/{private/SerializedIsaacAPIClass.lua → SerializedIsaacAPIClass.lua} +0 -0
  92. package/dist/types/{private/TSTLClass.d.ts → TSTLClass.d.ts} +0 -0
  93. package/dist/types/TSTLClass.d.ts.map +1 -0
  94. package/dist/types/{private/TSTLClass.lua → TSTLClass.lua} +0 -0
  95. package/package.json +2 -2
  96. package/src/callbacks/postGridEntityCustomCollision.ts +74 -0
  97. package/src/callbacks/postGridEntityCustomRender.ts +1 -17
  98. package/src/callbacks/postGridEntityCustomUpdate.ts +1 -17
  99. package/src/callbacks/subscriptions/postGridEntityCustomBroken.ts +41 -0
  100. package/src/callbacks/subscriptions/postGridEntityCustomCollision.ts +43 -0
  101. package/src/enums/ModCallbackCustom.ts +38 -2
  102. package/src/enums/private/SerializationBrand.ts +1 -1
  103. package/src/features/customGridEntity.ts +78 -2
  104. package/src/features/extraConsoleCommands/exports.ts +4 -3
  105. package/src/features/extraConsoleCommands/init.ts +1 -0
  106. package/src/features/extraConsoleCommands/listCommands.ts +2 -2
  107. package/src/functions/collectibles.ts +6 -2
  108. package/src/functions/color.ts +89 -87
  109. package/src/functions/deepCopy.ts +15 -2
  110. package/src/functions/gridEntities.ts +2 -77
  111. package/src/functions/isaacAPIClass.ts +1 -1
  112. package/src/functions/itemPool.ts +153 -0
  113. package/src/functions/kColor.ts +87 -84
  114. package/src/functions/mergeTests.ts +2 -2
  115. package/src/functions/npcs.ts +1 -58
  116. package/src/functions/projectiles.ts +78 -0
  117. package/src/functions/random.ts +1 -1
  118. package/src/functions/rng.ts +45 -65
  119. package/src/functions/rockAlt.ts +396 -0
  120. package/src/functions/saveFile.ts +13 -119
  121. package/src/functions/serialization.ts +81 -25
  122. package/src/functions/table.ts +2 -2
  123. package/src/functions/trinketGive.ts +21 -0
  124. package/src/functions/tstlClass.ts +1 -1
  125. package/src/functions/vector.ts +78 -74
  126. package/src/index.ts +2 -0
  127. package/src/initCustomCallbacks.ts +2 -0
  128. package/src/interfaces/AddCallbackParameterCustom.ts +4 -0
  129. package/src/objects/callbackRegisterFunctions.ts +6 -0
  130. package/src/objects/isaacAPIClassTypeToFunctions.ts +63 -0
  131. package/src/types/{private/IsaacAPIClass.ts → IsaacAPIClass.ts} +0 -0
  132. package/src/types/{private/SerializedIsaacAPIClass.ts → SerializedIsaacAPIClass.ts} +0 -0
  133. package/src/types/{private/TSTLClass.ts → TSTLClass.ts} +0 -0
  134. package/dist/objects/isaacAPIClassTypeToCopyFunction.d.ts +0 -6
  135. package/dist/objects/isaacAPIClassTypeToCopyFunction.d.ts.map +0 -1
  136. package/dist/objects/isaacAPIClassTypeToCopyFunction.lua +0 -13
  137. package/dist/objects/serializedIsaacAPIClassTypeToIdentityFunction.d.ts +0 -5
  138. package/dist/objects/serializedIsaacAPIClassTypeToIdentityFunction.d.ts.map +0 -1
  139. package/dist/objects/serializedIsaacAPIClassTypeToIdentityFunction.lua +0 -13
  140. package/dist/types/private/IsaacAPIClass.d.ts.map +0 -1
  141. package/dist/types/private/SerializedIsaacAPIClass.d.ts.map +0 -1
  142. package/dist/types/private/TSTLClass.d.ts.map +0 -1
  143. package/src/objects/isaacAPIClassTypeToCopyFunction.ts +0 -18
  144. package/src/objects/serializedIsaacAPIClassTypeToIdentityFunction.ts +0 -14
@@ -2,11 +2,15 @@ local ____exports = {}
2
2
  local OBJECT_NAME
3
3
  local ____SerializationBrand = require("enums.private.SerializationBrand")
4
4
  local SerializationBrand = ____SerializationBrand.SerializationBrand
5
- local ____SerializationType = require("enums.SerializationType")
6
- local SerializationType = ____SerializationType.SerializationType
7
5
  local ____isaacAPIClass = require("functions.isaacAPIClass")
8
6
  local isaacAPIClassEquals = ____isaacAPIClass.isaacAPIClassEquals
9
7
  local isIsaacAPIClassOfType = ____isaacAPIClass.isIsaacAPIClassOfType
8
+ local ____random = require("functions.random")
9
+ local getRandom = ____random.getRandom
10
+ local ____rng = require("functions.rng")
11
+ local getRandomSeed = ____rng.getRandomSeed
12
+ local isRNG = ____rng.isRNG
13
+ local newRNG = ____rng.newRNG
10
14
  local ____table = require("functions.table")
11
15
  local copyValuesToTable = ____table.copyValuesToTable
12
16
  local getNumbersFromTable = ____table.getNumbersFromTable
@@ -19,66 +23,56 @@ function ____exports.isKColor(self, object)
19
23
  end
20
24
  local KEYS = {"Red", "Green", "Blue", "Alpha"}
21
25
  OBJECT_NAME = "KColor"
22
- --- Helper function to copy a `KColor` object.
26
+ --- Helper function to copy a `KColor` Isaac API class.
27
+ function ____exports.copyKColor(self, kColor)
28
+ if not ____exports.isKColor(nil, kColor) then
29
+ error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
30
+ end
31
+ return KColor(kColor.Red, kColor.Green, kColor.Blue, kColor.Alpha)
32
+ end
33
+ --- Helper function to convert a `SerializedKColor` object to a normal `KColor` object. (This is used
34
+ -- by the save data manager when reading data from the "save#.dat" file.)
35
+ function ____exports.deserializeKColor(self, kColor)
36
+ if not isTable(nil, kColor) then
37
+ error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
38
+ end
39
+ local r, g, b, a = table.unpack(getNumbersFromTable(
40
+ nil,
41
+ kColor,
42
+ OBJECT_NAME,
43
+ table.unpack(KEYS)
44
+ ))
45
+ if r == nil then
46
+ error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Red")
47
+ end
48
+ if g == nil then
49
+ error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Green")
50
+ end
51
+ if b == nil then
52
+ error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Blue")
53
+ end
54
+ if a == nil then
55
+ error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: Alpha")
56
+ end
57
+ return KColor(r, g, b, a)
58
+ end
59
+ --- Helper function to get a random color.
23
60
  --
24
- -- @param kColor The KColor object to copy. In the case of deserialization, this will actually be a
25
- -- Lua table instead of an instantiated KColor class.
26
- -- @param serializationType Default is `SerializationType.NONE`.
27
- function ____exports.copyKColor(self, kColor, serializationType)
28
- if serializationType == nil then
29
- serializationType = SerializationType.NONE
61
+ -- @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
62
+ -- `RNG.Next` method will be called. Default is `getRandomSeed()`.
63
+ -- @param alpha Optional. The alpha value to use. Default is 1.
64
+ function ____exports.getRandomKColor(self, seedOrRNG, alpha)
65
+ if seedOrRNG == nil then
66
+ seedOrRNG = getRandomSeed(nil)
30
67
  end
31
- repeat
32
- local ____switch3 = serializationType
33
- local ____cond3 = ____switch3 == SerializationType.NONE
34
- if ____cond3 then
35
- do
36
- if not ____exports.isKColor(nil, kColor) then
37
- error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
38
- end
39
- return KColor(kColor.Red, kColor.Green, kColor.Blue, kColor.Alpha)
40
- end
41
- end
42
- ____cond3 = ____cond3 or ____switch3 == SerializationType.SERIALIZE
43
- if ____cond3 then
44
- do
45
- if not ____exports.isKColor(nil, kColor) then
46
- error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
47
- end
48
- local kColorTable = {}
49
- copyValuesToTable(nil, kColor, KEYS, kColorTable)
50
- kColorTable[SerializationBrand.K_COLOR] = ""
51
- return kColorTable
52
- end
53
- end
54
- ____cond3 = ____cond3 or ____switch3 == SerializationType.DESERIALIZE
55
- if ____cond3 then
56
- do
57
- if not isTable(nil, kColor) then
58
- error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
59
- end
60
- local r, g, b, a = table.unpack(getNumbersFromTable(
61
- nil,
62
- kColor,
63
- OBJECT_NAME,
64
- table.unpack(KEYS)
65
- ))
66
- if r == nil then
67
- error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: r")
68
- end
69
- if g == nil then
70
- error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: g")
71
- end
72
- if b == nil then
73
- error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: b")
74
- end
75
- if a == nil then
76
- error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object did not have a value for: a")
77
- end
78
- return KColor(r, g, b, a)
79
- end
80
- end
81
- until true
68
+ if alpha == nil then
69
+ alpha = 1
70
+ end
71
+ local rng = isRNG(nil, seedOrRNG) and seedOrRNG or newRNG(nil, seedOrRNG)
72
+ local r = getRandom(nil, rng)
73
+ local g = getRandom(nil, rng)
74
+ local b = getRandom(nil, rng)
75
+ return KColor(r, g, b, alpha)
82
76
  end
83
77
  --- Used to determine is the given table is a serialized `KColor` object created by the save data
84
78
  -- manager and/or the `deepCopy` function.
@@ -95,4 +89,15 @@ end
95
89
  function ____exports.kColorEquals(self, kColor1, kColor2)
96
90
  return isaacAPIClassEquals(nil, kColor1, kColor2, KEYS)
97
91
  end
92
+ --- Helper function to convert a `KColor` object to a `SerializedKColor` object. (This is used by the
93
+ -- save data manager when writing data from the "save#.dat" file.)
94
+ function ____exports.serializeKColor(self, kColor)
95
+ if not ____exports.isKColor(nil, kColor) then
96
+ error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
97
+ end
98
+ local kColorTable = {}
99
+ copyValuesToTable(nil, kColor, KEYS, kColorTable)
100
+ kColorTable[SerializationBrand.K_COLOR] = ""
101
+ return kColorTable
102
+ end
98
103
  return ____exports
@@ -19,8 +19,8 @@ local newRNG = ____rng.newRNG
19
19
  local ____serialization = require("functions.serialization")
20
20
  local isSerializedIsaacAPIClass = ____serialization.isSerializedIsaacAPIClass
21
21
  local ____vector = require("functions.vector")
22
- local copyVector = ____vector.copyVector
23
22
  local isVector = ____vector.isVector
23
+ local serializeVector = ____vector.serializeVector
24
24
  function oldTableHasUpdatedValue(self)
25
25
  local key = "foo"
26
26
  local oldValue = "bar"
@@ -60,7 +60,7 @@ function oldTableHasSerializedIsaacAPIClass(self)
60
60
  local x = 50
61
61
  local y = 60
62
62
  local vector = Vector(x, y)
63
- local vectorSerialized = copyVector(nil, vector, SerializationType.SERIALIZE)
63
+ local vectorSerialized = serializeVector(nil, vector)
64
64
  if not isSerializedIsaacAPIClass(nil, vectorSerialized) then
65
65
  error("The \"isSerializedIsaacAPIClass\" function says that a serialized vector is not serialized.")
66
66
  end
@@ -1,18 +1,4 @@
1
- import { EntityType, ProjectilesMode } from "isaac-typescript-definitions";
2
- /**
3
- * Helper function to make an NPC fire a projectile. Returns the fired projectile. Use this function
4
- * instead of the `EntityNPC.FireProjectiles` method, since that returns void.
5
- *
6
- * @param npc The NPC to fire the projectile from.
7
- * @param position The staring position of the projectile.
8
- * @param velocity The starting velocity of the projectile.
9
- * @param projectilesMode The mode of the projectile. Optional. Default is
10
- * `ProjectilesMode.ONE_PROJECTILE`.
11
- * @param projectileParams The parameters of the projectile. Optional. Default is
12
- * `ProjectileParams()`.
13
- * @returns The fired projectile.
14
- */
15
- export declare function fireProjectiles(npc: EntityNPC, position: Vector, velocity: Vector, projectilesMode?: ProjectilesMode, projectileParams?: ProjectileParams): EntityProjectile[];
1
+ import { EntityType } from "isaac-typescript-definitions";
16
2
  /**
17
3
  * Helper function to get all of the non-dead NPCs in the room.
18
4
  *
@@ -46,18 +32,4 @@ export declare function isDyingEggyWithNoSpidersLeft(npc: EntityNPC): boolean;
46
32
  * enemies.
47
33
  */
48
34
  export declare function isRaglingDeathPatch(npc: EntityNPC): boolean;
49
- /**
50
- * The base game `EntityNPC.FireProjectiles` method does not return anything, which is a problem in
51
- * situations where you need to work with the fired projectiles. This function invokes that method,
52
- * and then returns the projectiles that were spawned.
53
- *
54
- * @param npc The EntityNPC firing projectiles.
55
- * @param position The starting position of the projectiles.
56
- * @param velocity The starting velocity of the projectiles.
57
- * @param projectilesMode A ProjectilesMode enum value defining how to fire the projectiles.
58
- * @param projectileParams A ProjectileParams object containing various parameters for the
59
- * projectiles.
60
- * @returns An array of EntityProjectiles containing all fired projectiles.
61
- */
62
- export declare function npcFireProjectiles(npc: EntityNPC, position: Vector, velocity: Vector, projectilesMode: ProjectilesMode, projectileParams: ProjectileParams): EntityProjectile[];
63
35
  //# sourceMappingURL=npcs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"npcs.d.ts","sourceRoot":"","sources":["../../src/functions/npcs.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,UAAU,EAMV,eAAe,EAGhB,MAAM,8BAA8B,CAAC;AAgCtC;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,eAAgD,EACjE,gBAAgB,GAAE,gBAAqC,GACtD,gBAAgB,EAAE,CAMpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,UAAU,GAAE,UAAe,EAC3B,OAAO,SAAK,EACZ,OAAO,SAAK,EACZ,cAAc,UAAQ,GACrB,SAAS,EAAE,CAGb;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAoB3D;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAKpE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAO3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,GACjC,gBAAgB,EAAE,CAOpB"}
1
+ {"version":3,"file":"npcs.d.ts","sourceRoot":"","sources":["../../src/functions/npcs.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,UAAU,EAQX,MAAM,8BAA8B,CAAC;AA+BtC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,UAAU,GAAE,UAAe,EAC3B,OAAO,SAAK,EACZ,OAAO,SAAK,EACZ,cAAc,UAAQ,GACrB,SAAS,EAAE,CAGb;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAoB3D;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAKpE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAO3D"}
@@ -17,16 +17,12 @@ local MotherSubType = ____isaac_2Dtypescript_2Ddefinitions.MotherSubType
17
17
  local MotherVariant = ____isaac_2Dtypescript_2Ddefinitions.MotherVariant
18
18
  local NpcState = ____isaac_2Dtypescript_2Ddefinitions.NpcState
19
19
  local PeepVariant = ____isaac_2Dtypescript_2Ddefinitions.PeepVariant
20
- local ProjectilesMode = ____isaac_2Dtypescript_2Ddefinitions.ProjectilesMode
21
20
  local RaglingVariant = ____isaac_2Dtypescript_2Ddefinitions.RaglingVariant
22
21
  local VisVariant = ____isaac_2Dtypescript_2Ddefinitions.VisVariant
23
22
  local ____constants = require("constants")
24
23
  local EGGY_STATE_FRAME_OF_FINAL_SPIDER = ____constants.EGGY_STATE_FRAME_OF_FINAL_SPIDER
25
- local ____entities = require("functions.entities")
26
- local getFilteredNewEntities = ____entities.getFilteredNewEntities
27
24
  local ____entitiesSpecific = require("functions.entitiesSpecific")
28
25
  local getNPCs = ____entitiesSpecific.getNPCs
29
- local getProjectiles = ____entitiesSpecific.getProjectiles
30
26
  --- Checks for specific NPCs that have "CanShutDoors" set to true naturally by the game, but should
31
27
  -- not actually keep the doors closed (like Death's scythes).
32
28
  function ____exports.isAliveExceptionNPC(self, npc)
@@ -82,29 +78,6 @@ NON_ALIVE_NPCS_TYPE_VARIANT_SUBTYPE = __TS__New(
82
78
  (((tostring(EntityType.MOTHER) .. ".") .. tostring(MotherVariant.MOTHER_1)) .. ".") .. tostring(MotherSubType.PHASE_2)
83
79
  }
84
80
  )
85
- --- Helper function to make an NPC fire a projectile. Returns the fired projectile. Use this function
86
- -- instead of the `EntityNPC.FireProjectiles` method, since that returns void.
87
- --
88
- -- @param npc The NPC to fire the projectile from.
89
- -- @param position The staring position of the projectile.
90
- -- @param velocity The starting velocity of the projectile.
91
- -- @param projectilesMode The mode of the projectile. Optional. Default is
92
- -- `ProjectilesMode.ONE_PROJECTILE`.
93
- -- @param projectileParams The parameters of the projectile. Optional. Default is
94
- -- `ProjectileParams()`.
95
- -- @returns The fired projectile.
96
- function ____exports.fireProjectiles(self, npc, position, velocity, projectilesMode, projectileParams)
97
- if projectilesMode == nil then
98
- projectilesMode = ProjectilesMode.ONE_PROJECTILE
99
- end
100
- if projectileParams == nil then
101
- projectileParams = ProjectileParams()
102
- end
103
- local oldProjectiles = getProjectiles(nil, projectileParams.Variant)
104
- npc:FireProjectiles(position, velocity, projectilesMode, projectileParams)
105
- local newProjectiles = getProjectiles(nil, projectileParams.Variant)
106
- return getFilteredNewEntities(nil, oldProjectiles, newProjectiles)
107
- end
108
81
  --- Helper function to get all of the non-dead NPCs in the room.
109
82
  --
110
83
  -- This function will not include NPCs on an internal blacklist, such as Death's scythes or Big Horn
@@ -142,22 +115,4 @@ function ____exports.getAliveNPCs(self, entityType, variant, subType, ignoreFrie
142
115
  function(____, npc) return not npc:IsDead() and not ____exports.isAliveExceptionNPC(nil, npc) end
143
116
  )
144
117
  end
145
- --- The base game `EntityNPC.FireProjectiles` method does not return anything, which is a problem in
146
- -- situations where you need to work with the fired projectiles. This function invokes that method,
147
- -- and then returns the projectiles that were spawned.
148
- --
149
- -- @param npc The EntityNPC firing projectiles.
150
- -- @param position The starting position of the projectiles.
151
- -- @param velocity The starting velocity of the projectiles.
152
- -- @param projectilesMode A ProjectilesMode enum value defining how to fire the projectiles.
153
- -- @param projectileParams A ProjectileParams object containing various parameters for the
154
- -- projectiles.
155
- -- @returns An array of EntityProjectiles containing all fired projectiles.
156
- function ____exports.npcFireProjectiles(self, npc, position, velocity, projectilesMode, projectileParams)
157
- local oldEntities = getProjectiles(nil)
158
- npc:FireProjectiles(position, velocity, projectilesMode, projectileParams)
159
- local newEntities = getProjectiles(nil)
160
- local filteredNewEntities = getFilteredNewEntities(nil, oldEntities, newEntities)
161
- return filteredNewEntities
162
- end
163
118
  return ____exports
@@ -0,0 +1,32 @@
1
+ import { ProjectilesMode } from "isaac-typescript-definitions";
2
+ /**
3
+ * Helper function to make an NPC fire one or more projectiles. Returns the fired projectile(s).
4
+ *
5
+ * Use this function instead of the `EntityNPC.FireProjectiles` method if you need to modify or
6
+ * access the `EntityProjectile` objects after they are fired, since this function returns the
7
+ * objects in an array.
8
+ *
9
+ * @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
10
+ * the projectile(s) to come from anything in particular.
11
+ * @param position The staring position of the projectile(s).
12
+ * @param velocity The starting velocity of the projectile(s).
13
+ * @param projectilesMode Optional. The mode of the projectile(s). Default is
14
+ * `ProjectilesMode.ONE_PROJECTILE`.
15
+ * @param projectileParams Optional. The parameters of the projectile(s). Default is
16
+ * `ProjectileParams()`.
17
+ * @returns The fired projectile(s).
18
+ */
19
+ export declare function fireProjectiles(npc: EntityNPC | undefined, position: Vector, velocity: Vector, projectilesMode?: ProjectilesMode, projectileParams?: ProjectileParams): EntityProjectile[];
20
+ /**
21
+ * Helper function to spawn projectiles in a circle around a position. Under the hood, this
22
+ * leverages `ProjectileMode.N_PROJECTILES_IN_CIRCLE`.
23
+ *
24
+ * @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
25
+ * the projectile(s) to come from anything in particular.
26
+ * @param position The staring position of the projectile(s).
27
+ * @param speed The speed of the projectile(s).
28
+ * @param numProjectiles The amount of projectiles to spawn.
29
+ * @returns The fired projectile(s).
30
+ */
31
+ export declare function fireProjectilesInCircle(npc: EntityNPC | undefined, position: Vector, speed: float, numProjectiles: int): EntityProjectile[];
32
+ //# sourceMappingURL=projectiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectiles.d.ts","sourceRoot":"","sources":["../../src/functions/projectiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAItC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,eAAgD,EACjE,gBAAgB,GAAE,gBAAqC,GACtD,gBAAgB,EAAE,CAoBpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,GAAG,GAClB,gBAAgB,EAAE,CAQpB"}
@@ -0,0 +1,73 @@
1
+ local ____exports = {}
2
+ local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
3
+ local EntityFlag = ____isaac_2Dtypescript_2Ddefinitions.EntityFlag
4
+ local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
5
+ local ProjectilesMode = ____isaac_2Dtypescript_2Ddefinitions.ProjectilesMode
6
+ local ____entities = require("functions.entities")
7
+ local getFilteredNewEntities = ____entities.getFilteredNewEntities
8
+ local ____entitiesSpecific = require("functions.entitiesSpecific")
9
+ local getProjectiles = ____entitiesSpecific.getProjectiles
10
+ local spawnNPC = ____entitiesSpecific.spawnNPC
11
+ --- Helper function to make an NPC fire one or more projectiles. Returns the fired projectile(s).
12
+ --
13
+ -- Use this function instead of the `EntityNPC.FireProjectiles` method if you need to modify or
14
+ -- access the `EntityProjectile` objects after they are fired, since this function returns the
15
+ -- objects in an array.
16
+ --
17
+ -- @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
18
+ -- the projectile(s) to come from anything in particular.
19
+ -- @param position The staring position of the projectile(s).
20
+ -- @param velocity The starting velocity of the projectile(s).
21
+ -- @param projectilesMode Optional. The mode of the projectile(s). Default is
22
+ -- `ProjectilesMode.ONE_PROJECTILE`.
23
+ -- @param projectileParams Optional. The parameters of the projectile(s). Default is
24
+ -- `ProjectileParams()`.
25
+ -- @returns The fired projectile(s).
26
+ function ____exports.fireProjectiles(self, npc, position, velocity, projectilesMode, projectileParams)
27
+ if projectilesMode == nil then
28
+ projectilesMode = ProjectilesMode.ONE_PROJECTILE
29
+ end
30
+ if projectileParams == nil then
31
+ projectileParams = ProjectileParams()
32
+ end
33
+ local oldProjectiles = getProjectiles(nil, projectileParams.Variant)
34
+ local spawnedFly = false
35
+ if npc == nil then
36
+ spawnedFly = true
37
+ npc = spawnNPC(
38
+ nil,
39
+ EntityType.FLY,
40
+ 0,
41
+ 0,
42
+ position
43
+ )
44
+ npc.Visible = false
45
+ npc:ClearEntityFlags(EntityFlag.APPEAR)
46
+ end
47
+ npc:FireProjectiles(position, velocity, projectilesMode, projectileParams)
48
+ local newProjectiles = getProjectiles(nil, projectileParams.Variant)
49
+ if spawnedFly then
50
+ npc:Remove()
51
+ end
52
+ return getFilteredNewEntities(nil, oldProjectiles, newProjectiles)
53
+ end
54
+ --- Helper function to spawn projectiles in a circle around a position. Under the hood, this
55
+ -- leverages `ProjectileMode.N_PROJECTILES_IN_CIRCLE`.
56
+ --
57
+ -- @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
58
+ -- the projectile(s) to come from anything in particular.
59
+ -- @param position The staring position of the projectile(s).
60
+ -- @param speed The speed of the projectile(s).
61
+ -- @param numProjectiles The amount of projectiles to spawn.
62
+ -- @returns The fired projectile(s).
63
+ function ____exports.fireProjectilesInCircle(self, npc, position, speed, numProjectiles)
64
+ local velocity = Vector(speed, numProjectiles)
65
+ return ____exports.fireProjectiles(
66
+ nil,
67
+ npc,
68
+ position,
69
+ velocity,
70
+ ProjectilesMode.N_PROJECTILES_IN_CIRCLE
71
+ )
72
+ end
73
+ return ____exports
@@ -27,7 +27,7 @@ export declare function getRandomFloat(min: int, max: int, seedOrRNG?: Seed | RN
27
27
  /**
28
28
  * This returns a random integer between min and max. It is inclusive on both ends.
29
29
  *
30
- * Note that this function will invoke the `Next` method on the `RNG` object before returning the
30
+ * Note that this function will run the `Next` method on the `RNG` object before returning the
31
31
  * random number.
32
32
  *
33
33
  * For example:
@@ -44,7 +44,7 @@ function ____exports.getRandomFloat(self, min, max, seedOrRNG)
44
44
  end
45
45
  --- This returns a random integer between min and max. It is inclusive on both ends.
46
46
  --
47
- -- Note that this function will invoke the `Next` method on the `RNG` object before returning the
47
+ -- Note that this function will run the `Next` method on the `RNG` object before returning the
48
48
  -- random number.
49
49
  --
50
50
  -- For example:
@@ -1,24 +1,16 @@
1
1
  /// <reference types="typescript-to-lua/language-extensions" />
2
2
  /// <reference types="isaac-typescript-definitions" />
3
3
  /// <reference types="isaac-typescript-definitions" />
4
- import { SerializationType } from "../enums/SerializationType";
5
- declare type SerializedRNG = LuaMap<string, unknown> & {
4
+ export declare type SerializedRNG = LuaMap<string, unknown> & {
6
5
  readonly __serializedRNGBrand: symbol;
7
6
  };
8
- interface CopyRNGReturn {
9
- [SerializationType.NONE]: RNG;
10
- [SerializationType.SERIALIZE]: SerializedRNG;
11
- [SerializationType.DESERIALIZE]: RNG;
12
- }
7
+ /** Helper function to copy an `RNG` Isaac API class. */
8
+ export declare function copyRNG(rng: RNG): RNG;
13
9
  /**
14
- * Helper function to copy an `RNG` object.
15
- *
16
- * @param rng The RNG object to copy. In the case of deserialization, this will actually be a Lua
17
- * table instead of an instantiated RNG class.
18
- * @param serializationType Default is `SerializationType.NONE`.
10
+ * Helper function to convert a `SerializedRNG` object to a normal `RNG` object. (This is used by
11
+ * the save data manager when reading data from the "save#.dat" file.)
19
12
  */
20
- export declare function copyRNG<R extends RNG | SerializedRNG, S extends SerializationType>(rng: R, serializationType: S): CopyRNGReturn[S];
21
- export declare function copyRNG<R extends RNG | SerializedRNG>(rng: R): CopyRNGReturn[SerializationType.NONE];
13
+ export declare function deserializeRNG(rng: SerializedRNG): RNG;
22
14
  /**
23
15
  * Helper function to get a random `Seed` value to be used in spawning entities and so on. Use this
24
16
  * instead of calling the `Random` function directly since that can return a value of 0 and crash
@@ -39,6 +31,11 @@ export declare function isSerializedRNG(object: unknown): object is SerializedRN
39
31
  */
40
32
  export declare function newRNG(seed?: Seed): RNG;
41
33
  export declare function rngEquals(rng1: RNG, rng2: RNG): boolean;
34
+ /**
35
+ * Helper function to convert a `RNG` object to a `SerializedRNG` object. (This is used by the save
36
+ * data manager when writing data from the "save#.dat" file.)
37
+ */
38
+ export declare function serializeRNG(rng: RNG): SerializedRNG;
42
39
  /**
43
40
  * Helper function to iterate over the provided object and set the seed for all of the values that
44
41
  * are RNG objects equal to a particular seed.
@@ -51,5 +48,4 @@ export declare function setAllRNGToSeed(object: unknown, seed: Seed): void;
51
48
  export declare function setAllRNGToStartSeed(object: unknown): void;
52
49
  /** Helper function to set a seed to an RNG object using Blade's recommended shift index. */
53
50
  export declare function setSeed(rng: RNG, seed: Seed): void;
54
- export {};
55
51
  //# sourceMappingURL=rng.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rng.d.ts","sourceRoot":"","sources":["../../src/functions/rng.ts"],"names":[],"mappings":";;;AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAK/D,aAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC7C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC,CAAC;AAEF,UAAU,aAAa;IACrB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAC9B,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC7C,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;CACtC;AAYD;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,CAAC,SAAS,GAAG,GAAG,aAAa,EAC7B,CAAC,SAAS,iBAAiB,EAC3B,GAAG,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAClD,wBAAgB,OAAO,CAAC,CAAC,SAAS,GAAG,GAAG,aAAa,EACnD,GAAG,EAAE,CAAC,GACL,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAiDzC;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,2EAA2E;AAC3E,wBAAgB,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,GAAG,CAEpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,aAAa,CAMxE;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,OAAkB,GAAG,GAAG,CAIlD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAoBjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAK1D;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CASlD"}
1
+ {"version":3,"file":"rng.d.ts","sourceRoot":"","sources":["../../src/functions/rng.ts"],"names":[],"mappings":";;;AAMA,oBAAY,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACpD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC,CAAC;AAYF,wDAAwD;AACxD,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CASrC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,CAatD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,2EAA2E;AAC3E,wBAAgB,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,GAAG,CAEpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,aAAa,CAMxE;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,OAAkB,GAAG,GAAG,CAIlD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa,CAYpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAoBjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAK1D;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CASlD"}
@@ -6,8 +6,6 @@ local ____cachedClasses = require("cachedClasses")
6
6
  local game = ____cachedClasses.game
7
7
  local ____SerializationBrand = require("enums.private.SerializationBrand")
8
8
  local SerializationBrand = ____SerializationBrand.SerializationBrand
9
- local ____SerializationType = require("enums.SerializationType")
10
- local SerializationType = ____SerializationType.SerializationType
11
9
  local ____isaacAPIClass = require("functions.isaacAPIClass")
12
10
  local isaacAPIClassEquals = ____isaacAPIClass.isaacAPIClassEquals
13
11
  local isIsaacAPIClassOfType = ____isaacAPIClass.isIsaacAPIClassOfType
@@ -49,57 +47,27 @@ end
49
47
  RECOMMENDED_SHIFT_IDX = 35
50
48
  local KEYS = {"seed"}
51
49
  OBJECT_NAME = "RNG"
52
- --- Helper function to copy an `RNG` object.
53
- --
54
- -- @param rng The RNG object to copy. In the case of deserialization, this will actually be a Lua
55
- -- table instead of an instantiated RNG class.
56
- -- @param serializationType Default is `SerializationType.NONE`.
57
- function ____exports.copyRNG(self, rng, serializationType)
58
- if serializationType == nil then
59
- serializationType = SerializationType.NONE
50
+ --- Helper function to copy an `RNG` Isaac API class.
51
+ function ____exports.copyRNG(self, rng)
52
+ if not ____exports.isRNG(nil, rng) then
53
+ error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
60
54
  end
61
- repeat
62
- local ____switch3 = serializationType
63
- local ____cond3 = ____switch3 == SerializationType.NONE
64
- if ____cond3 then
65
- do
66
- if not ____exports.isRNG(nil, rng) then
67
- error(((("Failed to copy a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
68
- end
69
- local seed = rng:GetSeed()
70
- return ____exports.newRNG(nil, seed)
71
- end
72
- end
73
- ____cond3 = ____cond3 or ____switch3 == SerializationType.SERIALIZE
74
- if ____cond3 then
75
- do
76
- if not ____exports.isRNG(nil, rng) then
77
- error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
78
- end
79
- local seed = rng:GetSeed()
80
- local rngTable = {}
81
- rngTable.seed = seed
82
- rngTable[SerializationBrand.RNG] = ""
83
- return rngTable
84
- end
85
- end
86
- ____cond3 = ____cond3 or ____switch3 == SerializationType.DESERIALIZE
87
- if ____cond3 then
88
- do
89
- if not isTable(nil, rng) then
90
- error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
91
- end
92
- local seedNumber = table.unpack(getNumbersFromTable(
93
- nil,
94
- rng,
95
- OBJECT_NAME,
96
- table.unpack(KEYS)
97
- ))
98
- local seed = seedNumber
99
- return ____exports.newRNG(nil, seed)
100
- end
101
- end
102
- until true
55
+ local seed = rng:GetSeed()
56
+ return ____exports.newRNG(nil, seed)
57
+ end
58
+ --- Helper function to convert a `SerializedRNG` object to a normal `RNG` object. (This is used by
59
+ -- the save data manager when reading data from the "save#.dat" file.)
60
+ function ____exports.deserializeRNG(self, rng)
61
+ if not isTable(nil, rng) then
62
+ error(("Failed to deserialize a " .. OBJECT_NAME) .. " object since the provided object was not a Lua table.")
63
+ end
64
+ local seed = table.unpack(getNumbersFromTable(
65
+ nil,
66
+ rng,
67
+ OBJECT_NAME,
68
+ table.unpack(KEYS)
69
+ ))
70
+ return ____exports.newRNG(nil, seed)
103
71
  end
104
72
  --- Used to determine is the given table is a serialized `RNG` object created by the save data
105
73
  -- manager and/or the `deepCopy` function.
@@ -116,6 +84,18 @@ end
116
84
  function ____exports.rngEquals(self, rng1, rng2)
117
85
  return isaacAPIClassEquals(nil, rng1, rng2, KEYS)
118
86
  end
87
+ --- Helper function to convert a `RNG` object to a `SerializedRNG` object. (This is used by the save
88
+ -- data manager when writing data from the "save#.dat" file.)
89
+ function ____exports.serializeRNG(self, rng)
90
+ if not ____exports.isRNG(nil, rng) then
91
+ error(((("Failed to serialize a " .. OBJECT_NAME) .. " object since the provided object was not a userdata ") .. OBJECT_NAME) .. " class.")
92
+ end
93
+ local seed = rng:GetSeed()
94
+ local rngTable = {}
95
+ rngTable.seed = seed
96
+ rngTable[SerializationBrand.RNG] = ""
97
+ return rngTable
98
+ end
119
99
  --- Helper function to iterate over the provided object and set the seed for all of the values that
120
100
  -- are RNG objects equal to a particular seed.
121
101
  function ____exports.setAllRNGToSeed(self, object, seed)
@@ -0,0 +1,48 @@
1
+ /// <reference types="isaac-typescript-definitions" />
2
+ /// <reference types="isaac-typescript-definitions" />
3
+ /// <reference types="isaac-typescript-definitions" />
4
+ import { RockAltType } from "../enums/RockAltType";
5
+ /**
6
+ * Helper function to get the alternate rock type (i.e. urn, mushroom, etc.) that the current room
7
+ * will have.
8
+ *
9
+ * The rock type is based on the backdrop of the room.
10
+ *
11
+ * For example, if you change the backdrop of the starting room of the run to `BackdropType.CAVES`,
12
+ * and then spawn `GridEntityType.ROCK_ALT`, it will be a mushroom instead of an urn. Additionally,
13
+ * if it is destroyed, it will generate mushroom-appropriate rewards.
14
+ *
15
+ * On the other hand, if an urn is spawned first before the backdrop is changed to
16
+ * `BackdropType.CAVES`, the graphic of the urn will not switch to a mushroom. However, when
17
+ * destroyed, the urn will still generate mushroom-appropriate rewards.
18
+ */
19
+ export declare function getRockAltType(): RockAltType;
20
+ /**
21
+ * Helper function for emulating what happens when a vanilla `GridEntityType.ROCK_ALT` grid entity
22
+ * breaks.
23
+ *
24
+ * Most of the time, this function will do nothing, similar to how most of the time, when an
25
+ * individual urn is destroyed, nothing will spawn.
26
+ *
27
+ * Note that in vanilla, trinkets will not spawn if they have already been removed from the trinket
28
+ * pool. This function cannot replicate that behavior because there is no way to check to see if a
29
+ * trinket is still in the pool. Thus, it will always have a chance to spawn the respective trinket
30
+ * (e.g. Swallowed Penny from urns).
31
+ *
32
+ * The logic in this function is based on the rewards listed on the wiki:
33
+ * https://bindingofisaacrebirth.fandom.com/wiki/Rocks
34
+ *
35
+ * @param position The place to spawn the reward.
36
+ * @param rockAltType The type of reward to spawn. For example, `RockAltType.URN` will have a chance
37
+ * at spawning coins and spiders.
38
+ * @param variant Optional. The variant of the grid entity to emulate. Default is 0, which
39
+ * corresponds to a "normal" grid entity or an empty bucket. This only matters when
40
+ * spawning the reward for buckets. (Empty buckets have different rewards than full
41
+ * buckets.)
42
+ * @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
43
+ * `RNG.Next` method will be called. Default is `getRandomSeed()`. Normally, you
44
+ * should pass the `InitSeed` of the grid entity that was broken.
45
+ * @returns Whether or not this function spawned something.
46
+ */
47
+ export declare function spawnRockAltReward(position: Vector, rockAltType: RockAltType, variant?: number, seedOrRNG?: Seed | RNG): boolean;
48
+ //# sourceMappingURL=rockAlt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rockAlt.d.ts","sourceRoot":"","sources":["../../src/functions/rockAlt.ts"],"names":[],"mappings":";;;AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA+BnD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,OAAO,SAAI,EACX,SAAS,GAAE,IAAI,GAAG,GAAqB,GACtC,OAAO,CAwBT"}