isaacscript-common 3.0.0 → 3.2.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 (95) hide show
  1. package/cachedClasses.d.ts +6 -4
  2. package/cachedClasses.lua +4 -4
  3. package/callbacks/postPickupInitFirst.d.ts +1 -0
  4. package/callbacks/postPickupInitFirst.lua +55 -0
  5. package/callbacks/postSlotDestroyed.d.ts +1 -0
  6. package/callbacks/postSlotDestroyed.lua +66 -0
  7. package/callbacks/postSlotRender.lua +3 -21
  8. package/callbacks/subscriptions/postCustomRevive.d.ts +1 -0
  9. package/callbacks/subscriptions/postDoorRender.d.ts +1 -0
  10. package/callbacks/subscriptions/postDoorUpdate.d.ts +1 -0
  11. package/callbacks/subscriptions/postPickupCollect.d.ts +1 -0
  12. package/callbacks/subscriptions/postPickupInitFirst.d.ts +3 -0
  13. package/callbacks/subscriptions/postPickupInitFirst.lua +29 -0
  14. package/callbacks/subscriptions/postPickupStateChanged.d.ts +1 -0
  15. package/callbacks/subscriptions/postPitRender.d.ts +1 -0
  16. package/callbacks/subscriptions/postPitUpdate.d.ts +1 -0
  17. package/callbacks/subscriptions/postPoopRender.d.ts +1 -0
  18. package/callbacks/subscriptions/postPoopUpdate.d.ts +1 -0
  19. package/callbacks/subscriptions/postPressurePlateRender.d.ts +1 -0
  20. package/callbacks/subscriptions/postPressurePlateUpdate.d.ts +1 -0
  21. package/callbacks/subscriptions/postRockRender.d.ts +1 -0
  22. package/callbacks/subscriptions/postRockUpdate.d.ts +1 -0
  23. package/callbacks/subscriptions/postSpikesRender.d.ts +1 -0
  24. package/callbacks/subscriptions/postSpikesUpdate.d.ts +1 -0
  25. package/callbacks/subscriptions/postTNTRender.d.ts +1 -0
  26. package/callbacks/subscriptions/postTNTUpdate.d.ts +1 -0
  27. package/classes/DefaultMap.d.ts +1 -2
  28. package/classes/DefaultMap.lua +1 -4
  29. package/enums/ModCallbackCustom.d.ts +61 -39
  30. package/enums/ModCallbackCustom.lua +40 -38
  31. package/features/debugDisplay/exports.d.ts +17 -0
  32. package/features/debugDisplay/v.d.ts +17 -0
  33. package/features/deployJSONRoom.d.ts +1 -0
  34. package/features/saveDataManager/load.lua +12 -8
  35. package/features/saveDataManager/main.lua +10 -3
  36. package/features/saveDataManager/merge.lua +33 -21
  37. package/features/saveDataManager/save.lua +12 -7
  38. package/functions/array.d.ts +2 -0
  39. package/functions/bombs.d.ts +3 -0
  40. package/functions/bombs.lua +12 -0
  41. package/functions/chargeBar.d.ts +1 -0
  42. package/functions/collectibles.d.ts +13 -8
  43. package/functions/collectibles.lua +24 -11
  44. package/functions/deepCopy.lua +35 -26
  45. package/functions/deepCopyTests.lua +8 -5
  46. package/functions/direction.d.ts +8 -0
  47. package/functions/direction.lua +27 -0
  48. package/functions/doors.d.ts +1 -0
  49. package/functions/doors.lua +5 -0
  50. package/functions/entity.d.ts +4 -4
  51. package/functions/entity.lua +8 -8
  52. package/functions/entitySpecific.d.ts +20 -20
  53. package/functions/entitySpecific.lua +10 -10
  54. package/functions/enums.d.ts +2 -0
  55. package/functions/globals.lua +2 -10
  56. package/functions/gridEntitySpecific.d.ts +5 -0
  57. package/functions/isaacAPIClass.d.ts +4 -4
  58. package/functions/isaacAPIClass.lua +6 -6
  59. package/functions/jsonRoom.d.ts +2 -0
  60. package/functions/log.lua +3 -3
  61. package/functions/pickups.d.ts +9 -9
  62. package/functions/player.d.ts +7 -0
  63. package/functions/player.lua +44 -9
  64. package/functions/playerHealth.d.ts +3 -0
  65. package/functions/playerHealth.lua +87 -68
  66. package/functions/playerIndex.d.ts +2 -0
  67. package/functions/positionVelocity.d.ts +3 -0
  68. package/functions/random.d.ts +2 -0
  69. package/functions/revive.d.ts +2 -0
  70. package/functions/rng.d.ts +1 -0
  71. package/functions/saveFile.d.ts +15 -0
  72. package/functions/saveFile.lua +106 -0
  73. package/functions/serialization.lua +2 -2
  74. package/functions/set.d.ts +1 -0
  75. package/functions/sprite.d.ts +2 -0
  76. package/functions/table.d.ts +12 -0
  77. package/functions/table.lua +34 -0
  78. package/functions/tears.d.ts +1 -0
  79. package/functions/tstlClass.d.ts +34 -0
  80. package/functions/tstlClass.lua +54 -9
  81. package/functions/ui.d.ts +2 -0
  82. package/functions/utils.d.ts +15 -0
  83. package/functions/utils.lua +20 -0
  84. package/functions/vector.lua +4 -16
  85. package/index.d.ts +2 -0
  86. package/index.lua +16 -0
  87. package/initCustomCallbacks.lua +6 -0
  88. package/interfaces/AddCallbackParameterCustom.d.ts +2 -0
  89. package/interfaces/ChargeBarSprites.d.ts +1 -0
  90. package/interfaces/private/TSTLClassMetatable.d.ts +2 -0
  91. package/objects/callbackRegisterFunctions.lua +3 -0
  92. package/objects/oppositeDoorSlots.d.ts +4 -0
  93. package/objects/oppositeDoorSlots.lua +15 -0
  94. package/package.json +1 -1
  95. package/types/AnyEntity.d.ts +10 -0
@@ -143,7 +143,7 @@ export declare enum ModCallbackCustom {
143
143
  * only fire if the familiar variant matches the `FamiliarVariant` provided.
144
144
  *
145
145
  * ```ts
146
- * function postTearInitLate(familiar: EntityFamiliar): void {}
146
+ * function postFamiliarInitLate(familiar: EntityFamiliar): void {}
147
147
  * ```
148
148
  */
149
149
  POST_FAMILIAR_INIT_LATE = 11,
@@ -490,6 +490,28 @@ export declare enum ModCallbackCustom {
490
490
  * ```
491
491
  */
492
492
  POST_PICKUP_COLLECT = 36,
493
+ /**
494
+ * Fires from the `MC_POST_PICKUP_INIT` callback on the first time that a player has seen the
495
+ * respective pickup on the run.
496
+ *
497
+ * This callback is useful because pickups will despawn upon leaving the room and respawn upon
498
+ * re-entering the room.
499
+ *
500
+ * For most cases, this callback will simply fire when `MC_POST_PICKUP_INIT` fires and the player
501
+ * is not re-entering a previously visited room.
502
+ *
503
+ * The special case is when a player enters a post-Ascent Treasure Room or Boss Room. For these
504
+ * cases, the `InitSeed` of any pickups seen from previous floors is kept track of to prevent the
505
+ * callback from firing when re-entering the room.
506
+ *
507
+ * When registering the callback, takes an optional second argument that will make the callback
508
+ * only fire if the collectible type matches the `PickupVariant` provided.
509
+ *
510
+ * ```ts
511
+ * function postPickupInitFirst(pickup: EntityPickup): void {}
512
+ * ```
513
+ */
514
+ POST_PICKUP_INIT_FIRST = 37,
493
515
  /**
494
516
  * Fires on the first `MC_POST_PICKUP_UPDATE` frame for each pickup.
495
517
  *
@@ -503,7 +525,7 @@ export declare enum ModCallbackCustom {
503
525
  * function postPickupInitLate(pickup: EntityPickup): void {}
504
526
  * ```
505
527
  */
506
- POST_PICKUP_INIT_LATE = 37,
528
+ POST_PICKUP_INIT_LATE = 38,
507
529
  /**
508
530
  * Fires from the `MC_POST_PICKUP_UPDATE` callback when a pickup's state has changed from what it
509
531
  * was on the previous frame.
@@ -519,9 +541,9 @@ export declare enum ModCallbackCustom {
519
541
  * ): void {}
520
542
  * ```
521
543
  */
522
- POST_PICKUP_STATE_CHANGED = 38,
523
- POST_PIT_RENDER = 39,
524
- POST_PIT_UPDATE = 40,
544
+ POST_PICKUP_STATE_CHANGED = 39,
545
+ POST_PIT_RENDER = 40,
546
+ POST_PIT_UPDATE = 41,
525
547
  /**
526
548
  * Fires from the `MC_POST_PEFFECT_UPDATE` callback when a player entity gains or loses any health
527
549
  * (i.e. hearts). For more information, see the `PlayerHealth` enum.
@@ -537,7 +559,7 @@ export declare enum ModCallbackCustom {
537
559
  * ) {}
538
560
  * ```
539
561
  */
540
- POST_PLAYER_CHANGE_HEALTH = 41,
562
+ POST_PLAYER_CHANGE_HEALTH = 42,
541
563
  /**
542
564
  * Fires from the `MC_POST_PEFFECT_UPDATE` callback when a player entity changes its player type
543
565
  * (i.e. character). For example, it will fire after using Clicker, after dying with the Judas'
@@ -555,7 +577,7 @@ export declare enum ModCallbackCustom {
555
577
  * ) {}
556
578
  * ```
557
579
  */
558
- POST_PLAYER_CHANGE_TYPE = 42,
580
+ POST_PLAYER_CHANGE_TYPE = 43,
559
581
  /**
560
582
  * Fires from the `MC_ENTITY_TAKE_DMG` callback when a player takes fatal damage. Return false to
561
583
  * prevent the fatal damage.
@@ -572,7 +594,7 @@ export declare enum ModCallbackCustom {
572
594
  * function postPlayerFatalDamage(player: EntityPlayer) {}
573
595
  * ```
574
596
  */
575
- POST_PLAYER_FATAL_DAMAGE = 43,
597
+ POST_PLAYER_FATAL_DAMAGE = 44,
576
598
  /**
577
599
  * Fires on the first `MC_POST_PLAYER_UPDATE` frame for each player.
578
600
  *
@@ -586,7 +608,7 @@ export declare enum ModCallbackCustom {
586
608
  * function postPlayerInitLate(pickup: EntityPickup): void {}
587
609
  * ```
588
610
  */
589
- POST_PLAYER_INIT_LATE = 44,
611
+ POST_PLAYER_INIT_LATE = 45,
590
612
  /**
591
613
  * Similar to the vanilla callback of the same name, but fires after the `MC_POST_GAME_STARTED`
592
614
  * callback fires (if the player is spawning on the 0th game frame of the run).
@@ -607,8 +629,8 @@ export declare enum ModCallbackCustom {
607
629
  * function postPlayerInitReordered(player: EntityPlayer): void {}
608
630
  * ```
609
631
  */
610
- POST_PLAYER_INIT_REORDERED = 45,
611
- POST_PLAYER_RENDER_REORDERED = 46,
632
+ POST_PLAYER_INIT_REORDERED = 46,
633
+ POST_PLAYER_RENDER_REORDERED = 47,
612
634
  /**
613
635
  * Similar to the vanilla callback of the same name, but fires after the `MC_POST_GAME_STARTED`
614
636
  * callback fires (if the player is being updated on the 0th game frame of the run).
@@ -629,11 +651,11 @@ export declare enum ModCallbackCustom {
629
651
  * function postPlayerUpdateReordered(player: EntityPlayer): void {}
630
652
  * ```
631
653
  */
632
- POST_PLAYER_UPDATE_REORDERED = 47,
633
- POST_POOP_RENDER = 48,
634
- POST_POOP_UPDATE = 49,
635
- POST_PRESSURE_PLATE_RENDER = 50,
636
- POST_PRESSURE_PLATE_UPDATE = 51,
654
+ POST_PLAYER_UPDATE_REORDERED = 48,
655
+ POST_POOP_RENDER = 49,
656
+ POST_POOP_UPDATE = 50,
657
+ POST_PRESSURE_PLATE_RENDER = 51,
658
+ POST_PRESSURE_PLATE_UPDATE = 52,
637
659
  /**
638
660
  * Fires on the first `MC_POST_PROJECTILE_UPDATE` frame for each projectile.
639
661
  *
@@ -647,7 +669,7 @@ export declare enum ModCallbackCustom {
647
669
  * function postProjectileInitLate(projectile: EntityProjectile): void {}
648
670
  * ```
649
671
  */
650
- POST_PROJECTILE_INIT_LATE = 52,
672
+ POST_PROJECTILE_INIT_LATE = 53,
651
673
  /**
652
674
  * Fires from the `MC_POST_PEFFECT_UPDATE` callback when a player first picks up a new item. The
653
675
  * pickup returned in the callback is assumed to be the first pickup that no longer exists.
@@ -661,10 +683,10 @@ export declare enum ModCallbackCustom {
661
683
  * function postPurchase(player: EntityPlayer, pickup: EntityPickup): void {}
662
684
  * ```
663
685
  */
664
- POST_PURCHASE = 53,
665
- POST_ROCK_RENDER = 54,
666
- POST_ROCK_UPDATE = 55,
667
- POST_ROOM_CLEAR_CHANGED = 56,
686
+ POST_PURCHASE = 54,
687
+ POST_ROCK_RENDER = 55,
688
+ POST_ROCK_UPDATE = 56,
689
+ POST_ROOM_CLEAR_CHANGED = 57,
668
690
  /**
669
691
  * Fires from the `MC_ENTITY_TAKE_DMG` callback when a player takes damage from spikes in a
670
692
  * Sacrifice Room.
@@ -673,7 +695,7 @@ export declare enum ModCallbackCustom {
673
695
  * function postSacrifice(player: EntityPlayer, numSacrifices: int): void {}
674
696
  * ```
675
697
  */
676
- POST_SACRIFICE = 57,
698
+ POST_SACRIFICE = 58,
677
699
  /**
678
700
  * Fires from the `MC_POST_RENDER` callback when a slot entity's animation changes.
679
701
  *
@@ -684,7 +706,7 @@ export declare enum ModCallbackCustom {
684
706
  * function postSlotAnimationChanged(slot: Entity): void {}
685
707
  * ```
686
708
  */
687
- POST_SLOT_ANIMATION_CHANGED = 58,
709
+ POST_SLOT_ANIMATION_CHANGED = 59,
688
710
  /**
689
711
  * Fires from the `MC_POST_RENDER` callback when a slot plays the animation that indicates that it
690
712
  * has broken.
@@ -696,7 +718,7 @@ export declare enum ModCallbackCustom {
696
718
  * function postSlotDestroyed(slot: Entity): void {}
697
719
  * ```
698
720
  */
699
- POST_SLOT_DESTROYED = 59,
721
+ POST_SLOT_DESTROYED = 60,
700
722
  /**
701
723
  * Fires when a new slot entity is initialized. Specifically, this is either:
702
724
  *
@@ -712,7 +734,7 @@ export declare enum ModCallbackCustom {
712
734
  * function postSlotInit(slot: Entity): void {}
713
735
  * ```
714
736
  */
715
- POST_SLOT_INIT = 60,
737
+ POST_SLOT_INIT = 61,
716
738
  /**
717
739
  * Fires from the `MC_POST_RENDER` callback on every frame that a slot entity exists.
718
740
  *
@@ -723,7 +745,7 @@ export declare enum ModCallbackCustom {
723
745
  * function postSlotRender(slot: Entity): void {}
724
746
  * ```
725
747
  */
726
- POST_SLOT_RENDER = 61,
748
+ POST_SLOT_RENDER = 62,
727
749
  /**
728
750
  * Fires from the `MC_POST_UPDATE` callback on every frame that a slot entity exists.
729
751
  *
@@ -734,9 +756,9 @@ export declare enum ModCallbackCustom {
734
756
  * function postSlotUpdate(slot: Entity): void {}
735
757
  * ```
736
758
  */
737
- POST_SLOT_UPDATE = 62,
738
- POST_SPIKES_RENDER = 63,
739
- POST_SPIKES_UPDATE = 64,
759
+ POST_SLOT_UPDATE = 63,
760
+ POST_SPIKES_RENDER = 64,
761
+ POST_SPIKES_UPDATE = 65,
740
762
  /**
741
763
  * Fires on the first `MC_POST_TEAR_UPDATE` frame for each tear.
742
764
  *
@@ -750,7 +772,7 @@ export declare enum ModCallbackCustom {
750
772
  * function postTearInitLate(tear: EntityTear): void {}
751
773
  * ```
752
774
  */
753
- POST_TEAR_INIT_LATE = 65,
775
+ POST_TEAR_INIT_LATE = 66,
754
776
  /**
755
777
  * Fires on the second `MC_POST_TEAR_UPDATE` frame for each tear (i.e. frame 1).
756
778
  *
@@ -763,9 +785,9 @@ export declare enum ModCallbackCustom {
763
785
  * function postTearInitVeryLate(tear: EntityTear): void {}
764
786
  * ```
765
787
  */
766
- POST_TEAR_INIT_VERY_LATE = 66,
767
- POST_TNT_RENDER = 67,
768
- POST_TNT_UPDATE = 68,
788
+ POST_TEAR_INIT_VERY_LATE = 67,
789
+ POST_TNT_RENDER = 68,
790
+ POST_TNT_UPDATE = 69,
769
791
  /**
770
792
  * Fires from the `MC_POST_PEFFECT_UPDATE` callback when a player gains or loses a new
771
793
  * transformation.
@@ -783,7 +805,7 @@ export declare enum ModCallbackCustom {
783
805
  * ): void {}
784
806
  * ```
785
807
  */
786
- POST_TRANSFORMATION = 69,
808
+ POST_TRANSFORMATION = 70,
787
809
  /**
788
810
  * Fires from `MC_ENTITY_TAKE_DMG` callback when a Wishbone or a Walnut breaks.
789
811
  *
@@ -797,7 +819,7 @@ export declare enum ModCallbackCustom {
797
819
  * ): void {}
798
820
  * ```
799
821
  */
800
- POST_TRINKET_BREAK = 70,
822
+ POST_TRINKET_BREAK = 71,
801
823
  /**
802
824
  * Fires from the `MC_POST_PEFFECT_UPDATE` callback on the frame before a Berserk! effect ends
803
825
  * when the player is predicted to die (e.g. they currently have no health left or they took
@@ -810,7 +832,7 @@ export declare enum ModCallbackCustom {
810
832
  * function preBerserkDeath(player: EntityPlayer) {}
811
833
  * ```
812
834
  */
813
- PRE_BERSERK_DEATH = 71,
835
+ PRE_BERSERK_DEATH = 72,
814
836
  /**
815
837
  * Fires from the `MC_POST_PLAYER_FATAL_DAMAGE` callback when a player is about to die. If you
816
838
  * want to initiate a custom revival, return an integer that corresponds to the item or type of
@@ -823,7 +845,7 @@ export declare enum ModCallbackCustom {
823
845
  * function preCustomRevive(player: EntityPlayer) {}
824
846
  * ```
825
847
  */
826
- PRE_CUSTOM_REVIVE = 72,
848
+ PRE_CUSTOM_REVIVE = 73,
827
849
  /**
828
850
  * Fires from the `MC_POST_PEFFECT_UPDATE` callback when an item becomes queued (i.e. when the
829
851
  * player begins to hold the item above their head).
@@ -842,7 +864,7 @@ export declare enum ModCallbackCustom {
842
864
  * ): void {}
843
865
  * ```
844
866
  */
845
- PRE_ITEM_PICKUP = 73,
867
+ PRE_ITEM_PICKUP = 74,
846
868
  /**
847
869
  * Fires on the `MC_POST_RENDER` frame before the player is taken to a new floor. Only fires when
848
870
  * a player jumps into a trapdoor or enters a heaven door (beam of light). Does not fire on the
@@ -856,5 +878,5 @@ export declare enum ModCallbackCustom {
856
878
  * function preNewLevel(player: EntityPlayer): void {}
857
879
  * ```
858
880
  */
859
- PRE_NEW_LEVEL = 74
881
+ PRE_NEW_LEVEL = 75
860
882
  }
@@ -80,80 +80,82 @@ ____exports.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED = 35
80
80
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED] = "POST_PEFFECT_UPDATE_REORDERED"
81
81
  ____exports.ModCallbackCustom.POST_PICKUP_COLLECT = 36
82
82
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_COLLECT] = "POST_PICKUP_COLLECT"
83
- ____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE = 37
83
+ ____exports.ModCallbackCustom.POST_PICKUP_INIT_FIRST = 37
84
+ ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_INIT_FIRST] = "POST_PICKUP_INIT_FIRST"
85
+ ____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE = 38
84
86
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_INIT_LATE] = "POST_PICKUP_INIT_LATE"
85
- ____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED = 38
87
+ ____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED = 39
86
88
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PICKUP_STATE_CHANGED] = "POST_PICKUP_STATE_CHANGED"
87
- ____exports.ModCallbackCustom.POST_PIT_RENDER = 39
89
+ ____exports.ModCallbackCustom.POST_PIT_RENDER = 40
88
90
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PIT_RENDER] = "POST_PIT_RENDER"
89
- ____exports.ModCallbackCustom.POST_PIT_UPDATE = 40
91
+ ____exports.ModCallbackCustom.POST_PIT_UPDATE = 41
90
92
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PIT_UPDATE] = "POST_PIT_UPDATE"
91
- ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH = 41
93
+ ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH = 42
92
94
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_CHANGE_HEALTH] = "POST_PLAYER_CHANGE_HEALTH"
93
- ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE = 42
95
+ ____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE = 43
94
96
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_CHANGE_TYPE] = "POST_PLAYER_CHANGE_TYPE"
95
- ____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE = 43
97
+ ____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE = 44
96
98
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_FATAL_DAMAGE] = "POST_PLAYER_FATAL_DAMAGE"
97
- ____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE = 44
99
+ ____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE = 45
98
100
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_INIT_LATE] = "POST_PLAYER_INIT_LATE"
99
- ____exports.ModCallbackCustom.POST_PLAYER_INIT_REORDERED = 45
101
+ ____exports.ModCallbackCustom.POST_PLAYER_INIT_REORDERED = 46
100
102
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_INIT_REORDERED] = "POST_PLAYER_INIT_REORDERED"
101
- ____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED = 46
103
+ ____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED = 47
102
104
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_RENDER_REORDERED] = "POST_PLAYER_RENDER_REORDERED"
103
- ____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED = 47
105
+ ____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED = 48
104
106
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED] = "POST_PLAYER_UPDATE_REORDERED"
105
- ____exports.ModCallbackCustom.POST_POOP_RENDER = 48
107
+ ____exports.ModCallbackCustom.POST_POOP_RENDER = 49
106
108
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_POOP_RENDER] = "POST_POOP_RENDER"
107
- ____exports.ModCallbackCustom.POST_POOP_UPDATE = 49
109
+ ____exports.ModCallbackCustom.POST_POOP_UPDATE = 50
108
110
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_POOP_UPDATE] = "POST_POOP_UPDATE"
109
- ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER = 50
111
+ ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER = 51
110
112
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PRESSURE_PLATE_RENDER] = "POST_PRESSURE_PLATE_RENDER"
111
- ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE = 51
113
+ ____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE = 52
112
114
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PRESSURE_PLATE_UPDATE] = "POST_PRESSURE_PLATE_UPDATE"
113
- ____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE = 52
115
+ ____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE = 53
114
116
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PROJECTILE_INIT_LATE] = "POST_PROJECTILE_INIT_LATE"
115
- ____exports.ModCallbackCustom.POST_PURCHASE = 53
117
+ ____exports.ModCallbackCustom.POST_PURCHASE = 54
116
118
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_PURCHASE] = "POST_PURCHASE"
117
- ____exports.ModCallbackCustom.POST_ROCK_RENDER = 54
119
+ ____exports.ModCallbackCustom.POST_ROCK_RENDER = 55
118
120
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROCK_RENDER] = "POST_ROCK_RENDER"
119
- ____exports.ModCallbackCustom.POST_ROCK_UPDATE = 55
121
+ ____exports.ModCallbackCustom.POST_ROCK_UPDATE = 56
120
122
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROCK_UPDATE] = "POST_ROCK_UPDATE"
121
- ____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED = 56
123
+ ____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED = 57
122
124
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED] = "POST_ROOM_CLEAR_CHANGED"
123
- ____exports.ModCallbackCustom.POST_SACRIFICE = 57
125
+ ____exports.ModCallbackCustom.POST_SACRIFICE = 58
124
126
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SACRIFICE] = "POST_SACRIFICE"
125
- ____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED = 58
127
+ ____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED = 59
126
128
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED] = "POST_SLOT_ANIMATION_CHANGED"
127
- ____exports.ModCallbackCustom.POST_SLOT_DESTROYED = 59
129
+ ____exports.ModCallbackCustom.POST_SLOT_DESTROYED = 60
128
130
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_DESTROYED] = "POST_SLOT_DESTROYED"
129
- ____exports.ModCallbackCustom.POST_SLOT_INIT = 60
131
+ ____exports.ModCallbackCustom.POST_SLOT_INIT = 61
130
132
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_INIT] = "POST_SLOT_INIT"
131
- ____exports.ModCallbackCustom.POST_SLOT_RENDER = 61
133
+ ____exports.ModCallbackCustom.POST_SLOT_RENDER = 62
132
134
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_RENDER] = "POST_SLOT_RENDER"
133
- ____exports.ModCallbackCustom.POST_SLOT_UPDATE = 62
135
+ ____exports.ModCallbackCustom.POST_SLOT_UPDATE = 63
134
136
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SLOT_UPDATE] = "POST_SLOT_UPDATE"
135
- ____exports.ModCallbackCustom.POST_SPIKES_RENDER = 63
137
+ ____exports.ModCallbackCustom.POST_SPIKES_RENDER = 64
136
138
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SPIKES_RENDER] = "POST_SPIKES_RENDER"
137
- ____exports.ModCallbackCustom.POST_SPIKES_UPDATE = 64
139
+ ____exports.ModCallbackCustom.POST_SPIKES_UPDATE = 65
138
140
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_SPIKES_UPDATE] = "POST_SPIKES_UPDATE"
139
- ____exports.ModCallbackCustom.POST_TEAR_INIT_LATE = 65
141
+ ____exports.ModCallbackCustom.POST_TEAR_INIT_LATE = 66
140
142
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_INIT_LATE] = "POST_TEAR_INIT_LATE"
141
- ____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE = 66
143
+ ____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE = 67
142
144
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TEAR_INIT_VERY_LATE] = "POST_TEAR_INIT_VERY_LATE"
143
- ____exports.ModCallbackCustom.POST_TNT_RENDER = 67
145
+ ____exports.ModCallbackCustom.POST_TNT_RENDER = 68
144
146
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TNT_RENDER] = "POST_TNT_RENDER"
145
- ____exports.ModCallbackCustom.POST_TNT_UPDATE = 68
147
+ ____exports.ModCallbackCustom.POST_TNT_UPDATE = 69
146
148
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TNT_UPDATE] = "POST_TNT_UPDATE"
147
- ____exports.ModCallbackCustom.POST_TRANSFORMATION = 69
149
+ ____exports.ModCallbackCustom.POST_TRANSFORMATION = 70
148
150
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TRANSFORMATION] = "POST_TRANSFORMATION"
149
- ____exports.ModCallbackCustom.POST_TRINKET_BREAK = 70
151
+ ____exports.ModCallbackCustom.POST_TRINKET_BREAK = 71
150
152
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.POST_TRINKET_BREAK] = "POST_TRINKET_BREAK"
151
- ____exports.ModCallbackCustom.PRE_BERSERK_DEATH = 71
153
+ ____exports.ModCallbackCustom.PRE_BERSERK_DEATH = 72
152
154
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_BERSERK_DEATH] = "PRE_BERSERK_DEATH"
153
- ____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE = 72
155
+ ____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE = 73
154
156
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_CUSTOM_REVIVE] = "PRE_CUSTOM_REVIVE"
155
- ____exports.ModCallbackCustom.PRE_ITEM_PICKUP = 73
157
+ ____exports.ModCallbackCustom.PRE_ITEM_PICKUP = 74
156
158
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_ITEM_PICKUP] = "PRE_ITEM_PICKUP"
157
- ____exports.ModCallbackCustom.PRE_NEW_LEVEL = 74
159
+ ____exports.ModCallbackCustom.PRE_NEW_LEVEL = 75
158
160
  ____exports.ModCallbackCustom[____exports.ModCallbackCustom.PRE_NEW_LEVEL] = "PRE_NEW_LEVEL"
159
161
  return ____exports
@@ -1,4 +1,21 @@
1
1
  /// <reference types="isaac-typescript-definitions" />
2
+ /// <reference types="isaac-typescript-definitions" />
3
+ /// <reference types="isaac-typescript-definitions" />
4
+ /// <reference types="isaac-typescript-definitions" />
5
+ /// <reference types="isaac-typescript-definitions" />
6
+ /// <reference types="isaac-typescript-definitions" />
7
+ /// <reference types="isaac-typescript-definitions" />
8
+ /// <reference types="isaac-typescript-definitions" />
9
+ /// <reference types="isaac-typescript-definitions" />
10
+ /// <reference types="isaac-typescript-definitions" />
11
+ /// <reference types="isaac-typescript-definitions" />
12
+ /// <reference types="isaac-typescript-definitions" />
13
+ /// <reference types="isaac-typescript-definitions" />
14
+ /// <reference types="isaac-typescript-definitions" />
15
+ /// <reference types="isaac-typescript-definitions" />
16
+ /// <reference types="isaac-typescript-definitions" />
17
+ /// <reference types="isaac-typescript-definitions" />
18
+ /// <reference types="isaac-typescript-definitions" />
2
19
  /**
3
20
  * After using the "playerDisplay" console command, text will be drawn on each player for debugging
4
21
  * purposes. Use this function to specify a callback function that will returns the string that
@@ -1,4 +1,21 @@
1
1
  /// <reference types="isaac-typescript-definitions" />
2
+ /// <reference types="isaac-typescript-definitions" />
3
+ /// <reference types="isaac-typescript-definitions" />
4
+ /// <reference types="isaac-typescript-definitions" />
5
+ /// <reference types="isaac-typescript-definitions" />
6
+ /// <reference types="isaac-typescript-definitions" />
7
+ /// <reference types="isaac-typescript-definitions" />
8
+ /// <reference types="isaac-typescript-definitions" />
9
+ /// <reference types="isaac-typescript-definitions" />
10
+ /// <reference types="isaac-typescript-definitions" />
11
+ /// <reference types="isaac-typescript-definitions" />
12
+ /// <reference types="isaac-typescript-definitions" />
13
+ /// <reference types="isaac-typescript-definitions" />
14
+ /// <reference types="isaac-typescript-definitions" />
15
+ /// <reference types="isaac-typescript-definitions" />
16
+ /// <reference types="isaac-typescript-definitions" />
17
+ /// <reference types="isaac-typescript-definitions" />
18
+ /// <reference types="isaac-typescript-definitions" />
2
19
  declare const v: {
3
20
  run: {
4
21
  player: boolean;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="isaac-typescript-definitions" />
2
+ /// <reference types="isaac-typescript-definitions" />
2
3
  import { JSONRoom } from "../interfaces/JSONRoom";
3
4
  /**
4
5
  * Helper function to deconstruct a vanilla room and set up a custom room in its place.
@@ -7,6 +7,8 @@ local jsonDecode = ____jsonHelpers.jsonDecode
7
7
  local ____log = require("functions.log")
8
8
  local log = ____log.log
9
9
  local logError = ____log.logError
10
+ local ____table = require("functions.table")
11
+ local iterateTableDeterministically = ____table.iterateTableDeterministically
10
12
  local ____constants = require("features.saveDataManager.constants")
11
13
  local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
12
14
  local SAVE_DATA_MANAGER_FEATURE_NAME = ____constants.SAVE_DATA_MANAGER_FEATURE_NAME
@@ -41,26 +43,28 @@ function ____exports.loadFromDisk(self, mod, oldSaveData)
41
43
  if SAVE_DATA_MANAGER_DEBUG then
42
44
  log("Converted data from the \"save#.dat\" to a Lua table.")
43
45
  end
44
- for key, value in pairs(newSaveData) do
45
- do
46
+ iterateTableDeterministically(
47
+ nil,
48
+ newSaveData,
49
+ function(____, key, value)
46
50
  if type(key) ~= "string" then
47
- goto __continue5
51
+ return
48
52
  end
49
53
  local valueType = type(value)
50
54
  if valueType ~= "table" then
51
- goto __continue5
55
+ return
52
56
  end
53
57
  local oldSaveDataForSubscriber = oldSaveData[key]
54
58
  if oldSaveDataForSubscriber == nil then
55
- goto __continue5
59
+ return
56
60
  end
57
61
  if SAVE_DATA_MANAGER_DEBUG then
58
62
  log("Merging in stored data for feature: " .. key)
59
63
  end
60
64
  merge(nil, oldSaveDataForSubscriber, value, key)
61
- end
62
- ::__continue5::
63
- end
65
+ end,
66
+ SAVE_DATA_MANAGER_DEBUG
67
+ )
64
68
  log(("The " .. SAVE_DATA_MANAGER_FEATURE_NAME) .. " loaded data from the \"save#.dat\" file.")
65
69
  end
66
70
  return ____exports
@@ -19,7 +19,9 @@ local ____log = require("functions.log")
19
19
  local logError = ____log.logError
20
20
  local ____table = require("functions.table")
21
21
  local clearTable = ____table.clearTable
22
+ local iterateTableDeterministically = ____table.iterateTableDeterministically
22
23
  local ____constants = require("features.saveDataManager.constants")
24
+ local SAVE_DATA_MANAGER_DEBUG = ____constants.SAVE_DATA_MANAGER_DEBUG
23
25
  local SAVE_DATA_MANAGER_FEATURE_NAME = ____constants.SAVE_DATA_MANAGER_FEATURE_NAME
24
26
  local ____load = require("features.saveDataManager.load")
25
27
  local loadFromDisk = ____load.loadFromDisk
@@ -64,9 +66,14 @@ function restoreDefaultsAll(self)
64
66
  restoreDefaults(nil, SaveDataKey.ROOM)
65
67
  end
66
68
  function restoreDefaults(self, saveDataKey)
67
- for subscriberName, saveData in pairs(saveDataMap) do
68
- ____exports.restoreDefaultSaveData(nil, subscriberName, saveData, saveDataKey)
69
- end
69
+ iterateTableDeterministically(
70
+ nil,
71
+ saveDataMap,
72
+ function(____, subscriberName, saveData)
73
+ ____exports.restoreDefaultSaveData(nil, subscriberName, saveData, saveDataKey)
74
+ end,
75
+ SAVE_DATA_MANAGER_DEBUG
76
+ )
70
77
  end
71
78
  function ____exports.restoreDefaultSaveData(self, subscriberName, saveData, saveDataKey)
72
79
  if not RESETTABLE_SAVE_DATA_KEYS:has(saveDataKey) then
@@ -1,6 +1,5 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local Map = ____lualib.Map
3
- local __TS__InstanceOf = ____lualib.__TS__InstanceOf
4
3
  local Set = ____lualib.Set
5
4
  local ____exports = {}
6
5
  local mergeArray, mergeTSTLObject, mergeTable
@@ -19,6 +18,10 @@ local deserializeIsaacAPIClass = ____serialization.deserializeIsaacAPIClass
19
18
  local isSerializedIsaacAPIClass = ____serialization.isSerializedIsaacAPIClass
20
19
  local ____table = require("functions.table")
21
20
  local clearTable = ____table.clearTable
21
+ local iterateTableDeterministically = ____table.iterateTableDeterministically
22
+ local ____tstlClass = require("functions.tstlClass")
23
+ local isTSTLMap = ____tstlClass.isTSTLMap
24
+ local isTSTLSet = ____tstlClass.isTSTLSet
22
25
  local ____utils = require("functions.utils")
23
26
  local getTraversalDescription = ____utils.getTraversalDescription
24
27
  local ____constants = require("features.saveDataManager.constants")
@@ -62,7 +65,7 @@ function ____exports.merge(self, oldObject, newTable, traversalDescription)
62
65
  mergeArray(nil, oldTable, newTable)
63
66
  return
64
67
  end
65
- if __TS__InstanceOf(oldObject, Map) or __TS__InstanceOf(oldObject, Set) then
68
+ if isTSTLMap(nil, oldObject) or isTSTLSet(nil, oldObject) then
66
69
  mergeTSTLObject(nil, oldObject, newTable, traversalDescription)
67
70
  else
68
71
  mergeTable(nil, oldObject, newTable, traversalDescription)
@@ -70,27 +73,34 @@ function ____exports.merge(self, oldObject, newTable, traversalDescription)
70
73
  end
71
74
  function mergeArray(self, oldArray, newArray)
72
75
  clearTable(nil, oldArray)
73
- for key, value in pairs(newArray) do
74
- oldArray[key] = value
75
- end
76
+ iterateTableDeterministically(
77
+ nil,
78
+ newArray,
79
+ function(____, key, value)
80
+ oldArray[key] = value
81
+ end,
82
+ SAVE_DATA_MANAGER_DEBUG
83
+ )
76
84
  end
77
85
  function mergeTSTLObject(self, oldObject, newTable, traversalDescription)
78
86
  oldObject:clear()
79
87
  local convertStringKeysToNumbers = newTable[SerializationBrand.OBJECT_WITH_NUMBER_KEYS] ~= nil
80
- for key, value in pairs(newTable) do
81
- do
88
+ iterateTableDeterministically(
89
+ nil,
90
+ newTable,
91
+ function(____, key, value)
82
92
  if isSerializationBrand(nil, key) then
83
- goto __continue12
93
+ return
84
94
  end
85
95
  local keyToUse = key
86
96
  if convertStringKeysToNumbers then
87
97
  local numberKey = tonumber(key)
88
98
  if numberKey == nil then
89
- goto __continue12
99
+ return
90
100
  end
91
101
  keyToUse = numberKey
92
102
  end
93
- if __TS__InstanceOf(oldObject, Map) then
103
+ if isTSTLMap(nil, oldObject) then
94
104
  local valueType = type(value)
95
105
  local valueCopy
96
106
  if valueType == "table" then
@@ -99,22 +109,24 @@ function mergeTSTLObject(self, oldObject, newTable, traversalDescription)
99
109
  valueCopy = value
100
110
  end
101
111
  oldObject:set(keyToUse, valueCopy)
102
- elseif __TS__InstanceOf(oldObject, Set) then
112
+ elseif isTSTLSet(nil, oldObject) then
103
113
  oldObject:add(keyToUse)
104
114
  end
105
- end
106
- ::__continue12::
107
- end
115
+ end,
116
+ SAVE_DATA_MANAGER_DEBUG
117
+ )
108
118
  end
109
119
  function mergeTable(self, oldTable, newTable, traversalDescription)
110
- for key, value in pairs(newTable) do
111
- do
120
+ iterateTableDeterministically(
121
+ nil,
122
+ newTable,
123
+ function(____, key, value)
112
124
  if SAVE_DATA_MANAGER_DEBUG then
113
125
  local valueToPrint = value == "" and "(empty string)" or tostring(value)
114
126
  log((("merge is merging: " .. traversalDescription) .. " --> ") .. valueToPrint)
115
127
  end
116
128
  if isSerializationBrand(nil, key) then
117
- goto __continue21
129
+ return
118
130
  end
119
131
  if isSerializedIsaacAPIClass(nil, value) then
120
132
  if SAVE_DATA_MANAGER_DEBUG then
@@ -122,7 +134,7 @@ function mergeTable(self, oldTable, newTable, traversalDescription)
122
134
  end
123
135
  local deserializedObject = deserializeIsaacAPIClass(nil, value)
124
136
  oldTable[key] = deserializedObject
125
- goto __continue21
137
+ return
126
138
  end
127
139
  local valueType = type(value)
128
140
  if valueType == "table" then
@@ -137,8 +149,8 @@ function mergeTable(self, oldTable, newTable, traversalDescription)
137
149
  else
138
150
  oldTable[key] = value
139
151
  end
140
- end
141
- ::__continue21::
142
- end
152
+ end,
153
+ SAVE_DATA_MANAGER_DEBUG
154
+ )
143
155
  end
144
156
  return ____exports