smrpgpatchbuilder 5.0.8__tar.gz → 5.0.10__tar.gz

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 (246) hide show
  1. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/LICENSE +0 -0
  2. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/MANIFEST.in +3 -3
  3. {smrpgpatchbuilder-5.0.8/src/smrpgpatchbuilder.egg-info → smrpgpatchbuilder-5.0.10}/PKG-INFO +1 -1
  4. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/README.md +0 -0
  5. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/pyproject.toml +1 -1
  6. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/__init__.py +0 -0
  7. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/__init__.py +0 -0
  8. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/allies/__init__.py +0 -0
  9. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/allies/ally.py +0 -0
  10. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/allies/ally_collection.py +0 -0
  11. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/__init__.py +0 -0
  12. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/__init__.py +0 -0
  13. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/battle_targets.py +0 -0
  14. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/bonus_messages.py +0 -0
  15. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/flash_colours.py +0 -0
  16. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/layer_priority_type.py +0 -0
  17. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/mask_effects.py +0 -0
  18. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/message_type.py +0 -0
  19. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/origins.py +0 -0
  20. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/pause_until.py +0 -0
  21. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/shift_type.py +0 -0
  22. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/__init__.py +0 -0
  23. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/classes.py +0 -0
  24. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/wave_effect.py +0 -0
  25. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/__init__.py +0 -0
  26. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/__init__.py +0 -0
  27. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/__init__.py +0 -0
  28. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/monster_entrances.py +0 -0
  29. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/types.py +0 -0
  30. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/__init__.py +0 -0
  31. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/enums.py +0 -0
  32. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/__init__.py +0 -0
  33. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/ids/__init__.py +0 -0
  34. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/ids/misc.py +0 -0
  35. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/music.py +0 -0
  36. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/types/__init__.py +0 -0
  37. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/types/classes.py +0 -0
  38. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/characters/__init__.py +0 -0
  39. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/characters/classes.py +0 -0
  40. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/characters/constants.py +0 -0
  41. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/characters/enums.py +0 -0
  42. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/ids/__init__.py +0 -0
  43. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/ids/dialog_bank_ids.py +0 -0
  44. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/ids/misc.py +0 -0
  45. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/__init__.py +0 -0
  46. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/classes.py +0 -0
  47. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/enemies/__init__.py +0 -0
  48. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/enemies/constants.py +0 -0
  49. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/enemies/enums.py +0 -0
  50. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/enemy_attacks/__init__.py +0 -0
  51. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/enemy_attacks/classes.py +0 -0
  52. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/enemy_attacks/constants.py +0 -0
  53. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/graphics/__init__.py +0 -0
  54. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/graphics/classes.py +4 -9
  55. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/items/__init__.py +0 -0
  56. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/items/constants.py +0 -0
  57. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/items/encoding.py +0 -0
  58. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/items/enums.py +0 -0
  59. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/levels/room_collection.py +11 -0
  60. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/__init__.py +0 -0
  61. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/__init__.py +0 -0
  62. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/command_types.py +0 -0
  63. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/targets.py +0 -0
  64. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/__init__.py +0 -0
  65. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/classes.py +0 -0
  66. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/__init__.py +0 -0
  67. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/commands.py +0 -0
  68. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/__init__.py +0 -0
  69. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/classes.py +0 -0
  70. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/__init__.py +0 -0
  71. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/misc.py +0 -0
  72. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/monster_scripts/types.py +0 -0
  73. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/numbers/__init__.py +0 -0
  74. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/numbers/classes.py +0 -0
  75. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/__init__.py +0 -0
  76. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/__init__.py +0 -0
  77. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/__init__.py +0 -0
  78. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/sequence_speeds.py +0 -0
  79. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/__init__.py +0 -0
  80. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/classes.py +0 -0
  81. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/vram_priority.py +0 -0
  82. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/classes.py +0 -0
  83. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/__init__.py +2 -0
  84. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/commands.py +140 -6
  85. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/__init__.py +0 -0
  86. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/classes.py +0 -0
  87. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/__init__.py +0 -0
  88. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/misc.py +0 -0
  89. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/area_objects.py +0 -0
  90. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/colours.py +0 -0
  91. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/controller_inputs.py +0 -0
  92. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/coords.py +0 -0
  93. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/directions.py +0 -0
  94. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/intro_title_text.py +0 -0
  95. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/layers.py +0 -0
  96. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_types.py +0 -0
  97. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/scenes.py +0 -0
  98. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/tutorials.py +0 -0
  99. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/area_object.py +0 -0
  100. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/battlefield.py +0 -0
  101. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/byte_var.py +0 -0
  102. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/colour.py +0 -0
  103. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/controller_input.py +0 -0
  104. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/coord.py +0 -0
  105. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/direction.py +0 -0
  106. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/flag.py +0 -0
  107. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/intro_title_text.py +0 -0
  108. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/layer.py +0 -0
  109. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_type.py +0 -0
  110. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/party_character.py +0 -0
  111. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/scene.py +0 -0
  112. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/short_var.py +0 -0
  113. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/tutorial.py +0 -0
  114. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/__init__.py +0 -0
  115. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/classes.py +0 -0
  116. smrpgpatchbuilder-5.0.10/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/__init__.py +2 -0
  117. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/commands.py +88 -1
  118. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/__init__.py +0 -0
  119. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/classes.py +0 -0
  120. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/__init__.py +0 -0
  121. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/misc.py +0 -0
  122. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/__init__.py +0 -0
  123. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/misc.py +0 -0
  124. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/scripts_common/__init__.py +0 -0
  125. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/scripts_common/classes.py +0 -0
  126. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/shops/__init__.py +0 -0
  127. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/shops/classes.py +0 -0
  128. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/__init__.py +0 -0
  129. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/arguments/__init__.py +0 -0
  130. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/arguments/damage_modifiers.py +0 -0
  131. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/arguments/timing_properties.py +0 -0
  132. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/__init__.py +0 -0
  133. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/classes.py +0 -0
  134. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/enums.py +0 -0
  135. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/ids/__init__.py +0 -0
  136. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/ids/misc.py +0 -0
  137. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/__init__.py +0 -0
  138. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/disassembler.py +0 -0
  139. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/exceptions.py +0 -0
  140. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/ids/__init__.py +0 -0
  141. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/sprite.py +0 -0
  142. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/world_map_locations/__init__.py +0 -0
  143. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/world_map_locations/classes.py +0 -0
  144. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/allyassembler.py +0 -0
  145. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/allydisassembler.py +0 -0
  146. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/animationassembler.py +0 -0
  147. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/battleassembler.py +0 -0
  148. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/battledialogassembler.py +0 -0
  149. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/battledialogdisassembler.py +0 -0
  150. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/battledisassembler.py +0 -0
  151. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/bowser_tile_rearranger.py +0 -0
  152. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/comboassembler.py +0 -0
  153. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/combodisassembler.py +0 -0
  154. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/dialogassembler.py +0 -0
  155. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/dialogdisassembler.py +0 -0
  156. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/enemyassembler.py +0 -0
  157. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/enemyattackassembler.py +0 -0
  158. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/enemyattackdisassembler.py +0 -0
  159. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/enemydisassembler.py +0 -0
  160. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/eventassembler.py +0 -0
  161. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/eventidentifieraudit.py +0 -0
  162. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/generatesample.py +0 -0
  163. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/graphicsassembler.py +0 -0
  164. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/graphicsdisassembler.py +0 -0
  165. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/input_file_parser.py +0 -0
  166. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/itemassembler.py +0 -0
  167. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/itemdisassembler.py +0 -0
  168. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/legacy/__init__.py +0 -0
  169. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/legacy/docstrings.py +0 -0
  170. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/legacy/eventtables.py +0 -0
  171. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/legacy/objectsequenceassembler.py +0 -0
  172. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencedisassembler.py +0 -0
  173. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencetables.py +0 -0
  174. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/make_seed.py +0 -0
  175. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/move_spell_gfx.py +0 -0
  176. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/npcmodelassembler.py +0 -0
  177. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/npcmodeldisassembler.py +0 -0
  178. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/objectassembler.py +0 -0
  179. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/objectdisassembler.py +0 -0
  180. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/packassembler.py +0 -0
  181. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/packdisassembler.py +0 -0
  182. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/packetassembler.py +0 -0
  183. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/packetdisassembler.py +0 -0
  184. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/palettebytes.py +0 -0
  185. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/partitionanalyzer.py +0 -0
  186. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/roomassembler.py +0 -0
  187. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/roomconverter.py +0 -0
  188. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/shopassembler.py +0 -0
  189. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/shopdisassembler.py +0 -0
  190. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/space_reassigner.py +0 -0
  191. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/spellassembler.py +0 -0
  192. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/spelldisassembler.py +0 -0
  193. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/unused_gfx_finder.py +0 -0
  194. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover old.py +0 -0
  195. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover.py +0 -0
  196. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/variableparser.py +0 -0
  197. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/worldmaplocationassembler.py +0 -0
  198. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/worldmaplocationdisassembler.py +0 -0
  199. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/django/settings.py +0 -0
  200. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/utils/disassembler_common.py +0 -0
  201. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/utils/npcs.py +0 -0
  202. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/utils/number.py +0 -0
  203. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/utils/strings.py +0 -0
  204. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10/src/smrpgpatchbuilder.egg-info}/PKG-INFO +1 -1
  205. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder.egg-info/dependency_links.txt +0 -0
  206. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder.egg-info/requires.txt +0 -0
  207. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder.egg-info/top_level.txt +0 -0
  208. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/tests/animations/test_animationscripts.py +0 -0
  209. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/tests/monsters/test_ai.py +0 -0
  210. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/tests/overworld/test_actionscripts.py +0 -0
  211. smrpgpatchbuilder-5.0.8/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/__init__.py +0 -2
  212. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/setup.cfg +0 -0
  213. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/commands.py +0 -0
  214. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/classes.py +0 -0
  215. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/battle_dialog_collection.py +0 -0
  216. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/classes.py +0 -0
  217. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/__init__.py +0 -0
  218. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/classes.py +0 -0
  219. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/formatter.py +0 -0
  220. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/dialogs/utils.py +0 -0
  221. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/enemies/classes.py +0 -0
  222. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/items/classes.py +0 -0
  223. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/levels/classes.py +0 -0
  224. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/__init__.py +0 -0
  225. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_rows.py +0 -0
  226. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/__init__.py +0 -0
  227. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/packet.py +0 -0
  228. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_row.py +0 -0
  229. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/spells/classes.py +0 -0
  230. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/ally_palettes.py +0 -0
  231. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/collection.py +0 -0
  232. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/ids/event_palettes.py +0 -0
  233. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/ids/misc.py +0 -0
  234. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/ids/sprite_palettes.py +0 -0
  235. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/datatypes/sprites/palette.py +0 -0
  236. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/manage.py +0 -0
  237. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/animationdisassembler.py +0 -0
  238. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/eventconverter.py +0 -0
  239. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/eventpalettedisassembler.py +0 -0
  240. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/legacy/eventdisassembler.py +0 -0
  241. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/roomdisassembler.py +0 -0
  242. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder/management/commands/spritepalettedisassembler.py +0 -0
  243. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/smrpgpatchbuilder.egg-info/SOURCES.txt +0 -0
  244. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/tests/dialogs/__init__.py +0 -0
  245. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/tests/dialogs/test_formatter.py +0 -0
  246. {smrpgpatchbuilder-5.0.8 → smrpgpatchbuilder-5.0.10}/src/tests/overworld/test_eventscripts.py +0 -0
@@ -1,3 +1,3 @@
1
- global-exclude __pycache__
2
- global-exclude *.py[cod]
3
- prune src/disassembler_output
1
+ global-exclude __pycache__
2
+ global-exclude *.py[cod]
3
+ prune src/disassembler_output
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smrpgpatchbuilder
3
- Version: 5.0.8
3
+ Version: 5.0.10
4
4
  Summary: Patchable base class support for some SMRPG concepts similar to their definitions in Lazy Shell
5
5
  Author-email: pidgezero_one <s.kischak@gmail.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "smrpgpatchbuilder"
7
- version = "5.0.8"
7
+ version = "5.0.10"
8
8
  authors = [
9
9
  { name="pidgezero_one", email="s.kischak@gmail.com" },
10
10
  ]
@@ -739,7 +739,7 @@ class SpriteCollection:
739
739
 
740
740
  return bytearray(sprite_data), bytearray(image_data), bytearray(animation_pointers), anim_tile_ranges, output_tile_ranges
741
741
 
742
- def assemble_from_tables(self, sprites: list[CompleteSprite], insert_whitespace=False, shared_image_groups: list[list[int]] | None = None, no_clone_sprites: list[int] | None = None) -> tuple[bytearray, bytearray, bytearray, list[tuple[int, bytearray]], list[tuple[int, bytearray]]]:
742
+ def assemble_from_tables(self, sprites: list[CompleteSprite], insert_whitespace=False, shared_image_groups: list[list[int]] | None = None) -> tuple[bytearray, bytearray, bytearray, list[tuple[int, bytearray]], list[tuple[int, bytearray]]]:
743
743
  # CRITICAL: Reset all banks before assembling to prevent data from previous runs
744
744
  for bank in self.uncompressed_tile_banks:
745
745
  bank.tiles = bytearray([])
@@ -1150,12 +1150,7 @@ class SpriteCollection:
1150
1150
  this_mold = copy.deepcopy(m)
1151
1151
 
1152
1152
  # create clones and use in mold
1153
- # Skip clone optimization for sprites that need vanilla-compatible
1154
- # animation layout (e.g., Smithy sprites used in battle events)
1155
- skip_clones = no_clone_sprites is not None and sprite_index in no_clone_sprites
1156
- if skip_clones and mold_index == 0:
1157
- print(f"[GFX] Skipping clone optimization for sprite {sprite_index}")
1158
- if not this_mold.gridplane and not skip_clones:
1153
+ if not this_mold.gridplane:
1159
1154
  clones = find_clones(these_tiles, molds, sprite_index, mold_index)
1160
1155
  these_tiles = clones
1161
1156
  this_mold.tiles = these_tiles
@@ -1212,8 +1207,8 @@ class SpriteCollection:
1212
1207
 
1213
1208
  return self.assemble_from_tables_(complete_sprites, complete_images, complete_animations, output_tile_ranges)
1214
1209
 
1215
- def render(self, whitespace: bool = False, shared_image_groups: list[list[int]] | None = None, no_clone_sprites: list[int] | None = None) -> list[tuple[int, bytearray]]:
1216
- sprite_data, image_data, animation_pointers, animation_data, tiles = self.assemble_from_tables(self.sprites, whitespace, shared_image_groups, no_clone_sprites)
1210
+ def render(self, whitespace: bool = False, shared_image_groups: list[list[int]] | None = None) -> list[tuple[int, bytearray]]:
1211
+ sprite_data, image_data, animation_pointers, animation_data, tiles = self.assemble_from_tables(self.sprites, whitespace, shared_image_groups)
1217
1212
 
1218
1213
  # Zero out all sprite data ranges before writing to prevent leftover data
1219
1214
  zero_ranges = []
@@ -865,6 +865,17 @@ class RoomCollection:
865
865
  action_offset = obj.action_script - base_action_script
866
866
  event_offset = obj.event_script - base_event_script
867
867
 
868
+ if event_offset < 0 or event_offset > 7:
869
+ raise ValueError(
870
+ f"Room {room_idx} object {obj_idx} (RegularClone):\n"
871
+ f" event_script offset {event_offset} out of range [0, 7]\n"
872
+ f" Clone event_script: {obj.event_script}\n"
873
+ f" Parent event_script: {parent.event_script}\n"
874
+ f" Base event_script: {base_event_script}\n"
875
+ f" A clone's event_script must be within 7 of the base "
876
+ f"(min of parent + sibling clones); the encoding only has 3 bits."
877
+ )
878
+
868
879
  data[0] = (
869
880
  ((event_offset & 0x07) << 5)
870
881
  | ((action_offset & 0x03) << 3)
@@ -78,7 +78,9 @@ from .commands import (
78
78
  A_SetSequenceSpeed,
79
79
  A_SetWalkingSpeed,
80
80
  A_SetAllSpeeds,
81
+ A_ToggleSubroutineSlots,
81
82
  A_EmbeddedAnimationRoutine,
83
+ A_SetSubroutineXTargets,
82
84
  A_MaximizeSequenceSpeed,
83
85
  A_MaximizeSequenceSpeed86,
84
86
  A_FixedFCoordOn,
@@ -379,11 +379,11 @@ _valid_unknowncmd_queue_opcodes = [
379
379
  1,
380
380
  1,
381
381
  1,
382
- 2, # 20
382
+ 0, # 20 (handled by A_ToggleSubroutineSlots)
383
383
  0,
384
384
  0,
385
385
  2,
386
- 5,
386
+ 0, # 24 (handled by A_SetSubroutineXTargets)
387
387
  5,
388
388
  0,
389
389
  0,
@@ -4047,8 +4047,78 @@ class A_SetAllSpeeds(_SetAnimationSpeed, UsableActionScriptCommand):
4047
4047
  super().__init__(speed, sequence=True, walking=True, identifier=identifier)
4048
4048
 
4049
4049
 
4050
+ class A_ToggleSubroutineSlots(UsableActionScriptCommand, ActionScriptCommand):
4051
+ """Toggle the active state of the NPC's three sub-routine slots ($26,X / $27,X /
4052
+ $28,X) according to a 3-bit mask. Bit 0 controls slot $26, bit 1 controls slot $27,
4053
+ bit 2 controls slot $28. For each slot: if the corresponding bit is set and the slot
4054
+ is currently inactive, the engine allocates a new sub-routine record (via $C0:E87E);
4055
+ if the bit is clear and the slot is currently active, the engine deallocates the
4056
+ existing record (via $C0:E8FE). Slots whose state already matches the mask are left
4057
+ alone.
4058
+
4059
+ Sub-routines spawned this way drive per-NPC motion or animation independently of the
4060
+ main action script. Pair with `A_SetSubroutineXTargets` (opcode 0x24) to give them
4061
+ targets, or `A_EmbeddedAnimationRoutine` (opcode 0x26/0x27/0x28) to spawn a fully
4062
+ parameterised routine.
4063
+
4064
+ ## Lazy Shell command
4065
+ (not documented in Lazy Shell)
4066
+
4067
+ ## Opcode
4068
+ `0x20`
4069
+
4070
+ ## Size
4071
+ 2 bytes
4072
+
4073
+ Args:
4074
+ mask (int): 3-bit mask (bits 0-2). 1 = slot should be active; 0 = slot should be
4075
+ inactive. Bit 0 = slot $26, bit 1 = slot $27, bit 2 = slot $28.
4076
+ identifier (str | None): Give this command a label if you want another command to jump to it.
4077
+ """
4078
+
4079
+ _opcode = 0x20
4080
+ _size: int = 2
4081
+ _mask: UInt8
4082
+
4083
+ @property
4084
+ def mask(self) -> UInt8:
4085
+ """3-bit slot-active mask. Bit 0 = $26, bit 1 = $27, bit 2 = $28."""
4086
+ return self._mask
4087
+
4088
+ def set_mask(self, mask: int) -> None:
4089
+ """Set the 3-bit slot-active mask."""
4090
+ if mask & ~0x07:
4091
+ raise InvalidCommandArgumentException(
4092
+ f"A_ToggleSubroutineSlots mask 0x{mask:02X} has bits set outside the low 3 bits"
4093
+ )
4094
+ self._mask = UInt8(mask)
4095
+
4096
+ def __init__(self, mask: int, identifier: str | None = None) -> None:
4097
+ super().__init__(identifier)
4098
+ self.set_mask(mask)
4099
+
4100
+ def render(self, *args) -> bytearray:
4101
+ return super().render(self.mask)
4102
+
4103
+
4050
4104
  class A_EmbeddedAnimationRoutine(UsableActionScriptCommand, ActionScriptCommand):
4051
- """(unknown)
4105
+ """Spawn a fully-parameterised sub-routine into one of the NPC's three sub-routine
4106
+ slots ($26,X / $27,X / $28,X). The opcode byte selects the slot: 0x26 → slot $26,
4107
+ 0x27 → slot $27, 0x28 → slot $28. Any sub-routine already in that slot is cleared
4108
+ first (via $C0:E9DC).
4109
+
4110
+ The 14 payload bytes are copied into the NPC's per-slot scratch region:
4111
+ [1..2] X coord (16-bit)
4112
+ [3..4] Y coord (16-bit)
4113
+ [5] sprite sequence index
4114
+ [6] sprite control bits
4115
+ [7..8] Z coord (16-bit)
4116
+ [9..10] motion bits
4117
+ [11..12] face direction
4118
+ [13..14] (unidentified pair, written to $0C,X)
4119
+ [15] high 2 bits → upper bits of $1E,X; low 3 bits → $1F,X
4120
+
4121
+ See $C0:D211 for the handler.
4052
4122
 
4053
4123
  ## Lazy Shell command
4054
4124
  `Embedded animation routine ($26)...`
@@ -4073,11 +4143,11 @@ class A_EmbeddedAnimationRoutine(UsableActionScriptCommand, ActionScriptCommand)
4073
4143
 
4074
4144
  @property
4075
4145
  def args(self) -> bytearray:
4076
- """(unknown)"""
4146
+ """The full 16-byte payload (opcode + 14 data bytes + flag-byte)."""
4077
4147
  return self._args
4078
4148
 
4079
4149
  def set_args(self, args: bytearray) -> None:
4080
- """(unknown)"""
4150
+ """Set the full 16-byte payload (opcode + 14 data bytes + flag-byte)."""
4081
4151
  assert len(args) == 16
4082
4152
  assert args[0] in [0x26, 0x27, 0x28]
4083
4153
  self._args = args
@@ -4090,6 +4160,65 @@ class A_EmbeddedAnimationRoutine(UsableActionScriptCommand, ActionScriptCommand)
4090
4160
  return super().render(self.args)
4091
4161
 
4092
4162
 
4163
+ class A_SetSubroutineXTargets(UsableActionScriptCommand, ActionScriptCommand):
4164
+ """Set destination X-coordinates for whichever of the NPC's first two sub-routine
4165
+ slots ($26,X and $27,X) are currently active. For each active slot, the existing
4166
+ sub-routine state is reset (via $C0:E9DC) and the corresponding 16-bit X target is
4167
+ written into the NPC's $00,X (X coord); $02,X (Y coord low) and $1E,X (state flags)
4168
+ are zeroed. Slot $28,X is **not** touched by this opcode.
4169
+
4170
+ Pair with `A_ToggleSubroutineSlots` (opcode 0x20) to first activate the slots whose
4171
+ targets you intend to set.
4172
+
4173
+ ## Lazy Shell command
4174
+ (not documented in Lazy Shell)
4175
+
4176
+ ## Opcode
4177
+ `0x24`
4178
+
4179
+ ## Size
4180
+ 5 bytes
4181
+
4182
+ Args:
4183
+ slot_26_x (int): 16-bit destination X coord written into slot $26,X if active.
4184
+ slot_27_x (int): 16-bit destination X coord written into slot $27,X if active.
4185
+ identifier (str | None): Give this command a label if you want another command to jump to it.
4186
+ """
4187
+
4188
+ _opcode = 0x24
4189
+ _size: int = 5
4190
+ _slot_26_x: UInt16
4191
+ _slot_27_x: UInt16
4192
+
4193
+ @property
4194
+ def slot_26_x(self) -> UInt16:
4195
+ """16-bit X target for slot $26,X (consumed only if slot is active)."""
4196
+ return self._slot_26_x
4197
+
4198
+ def set_slot_26_x(self, slot_26_x: int) -> None:
4199
+ """Set the 16-bit X target for slot $26,X."""
4200
+ self._slot_26_x = UInt16(slot_26_x)
4201
+
4202
+ @property
4203
+ def slot_27_x(self) -> UInt16:
4204
+ """16-bit X target for slot $27,X (consumed only if slot is active)."""
4205
+ return self._slot_27_x
4206
+
4207
+ def set_slot_27_x(self, slot_27_x: int) -> None:
4208
+ """Set the 16-bit X target for slot $27,X."""
4209
+ self._slot_27_x = UInt16(slot_27_x)
4210
+
4211
+ def __init__(
4212
+ self, slot_26_x: int, slot_27_x: int, identifier: str | None = None
4213
+ ) -> None:
4214
+ super().__init__(identifier)
4215
+ self.set_slot_26_x(slot_26_x)
4216
+ self.set_slot_27_x(slot_27_x)
4217
+
4218
+ def render(self, *args) -> bytearray:
4219
+ return super().render(self.slot_26_x, self.slot_27_x)
4220
+
4221
+
4093
4222
  class A_MaximizeSequenceSpeed(UsableActionScriptCommand, ActionScriptCommandNoArgs):
4094
4223
  """Set the NPC's sequence speed to its highest value. Not known if this actually works.
4095
4224
 
@@ -7024,7 +7153,12 @@ class A_IncPaletteRow(UsableActionScriptCommand, ActionScriptCommandNoArgs):
7024
7153
 
7025
7154
 
7026
7155
  class A_BPL262728(UsableActionScriptCommand, ActionScriptCommandNoArgs):
7027
- """(ASM instruction, effect unknown)
7156
+ """Kill all three of the NPC's currently-active sub-routines (slots $26,X / $27,X /
7157
+ $28,X) and zero the slot bytes. Implemented at $C0:D18F as `JSR $C0:E8E2`; the
7158
+ `BPL` references in the LazyShell-derived class name come from the helper at
7159
+ $C0:E8E2 which iterates the three slots and uses BPL to skip slots whose bit 7 is
7160
+ already clear. Inverse pairing for `A_ToggleSubroutineSlots` (opcode 0x20) when you
7161
+ want to clear all slots in one command.
7028
7162
 
7029
7163
  ## Lazy Shell command
7030
7164
  (not documented in Lazy Shell)
@@ -0,0 +1,2 @@
1
+ from .types import *
2
+ from .commands import ActionQueueAsync, ActionQueueSync, Add7000ToCurrentFP, Add7000ToMaxFP, AddCoins, AddConstToVar, AddFrogCoins, AddToInventory, AddVarTo7000, AppendDialogAt7000ToCurrentDialog, ApplySolidityModToLevel, ApplyTileModToLevel, CharacterJoinsParty, CharacterLeavesParty, CircleMaskExpandFromScreenCenter, CircleMaskShrinkToObject, CircleMaskShrinkToScreenCenter, Clear0158Bit7Offset, Clear7016To7018AndIsolate701AHighByteIf7018Bit0Set, ClearBit, ClearMem704XAt7000Bit, CloseDialog, Compare7000ToVar, CompareVarToConst, CopyVarToVar, CreatePacketAt7010, CreatePacketAt7010WithEvent, CreatePacketAtObjectCoords, DarkenLayersExceptPaletteRows, DeactivateSoundChannels, Dec, Dec7000FromCoins, Dec7000FromCurrentFP, Dec7000FromCurrentHP, Dec7000FromFrogCoins, DecVarFrom7000, DisableObjectTrigger, DisableObjectTriggerInSpecificLevel, DisableTriggerOfObjectAt70A8InCurrentLevel, DisplayIntroTitleText, EnableControls, EnableControlsUntilReturn, EnableObjectTrigger, EnableObjectTriggerInSpecificLevel, EnableTriggerOfObjectAt70A8InCurrentLevel, EndLoop, EnterArea, EquipItemToCharacter, ExitToWorldMap, ExorCrashesIntoKeep, FadeInFromBlack, FadeInFromColour, FadeInMusic, FadeOutMusic, FadeOutMusicFDA3, FadeOutMusicToVolume, FadeOutSoundToVolume, FadeOutToBlack, FadeOutToColour, FreezeAllNPCsUntilReturn, FreezeCamera, GenerateRandomNumFromRangeVar, If0210Bits012ClearDoNotJump, Inc, IncEXPByPacket, IncreaseMusicPitchBy, InitiateBattleMask, Jmp, JmpIf316DIs3, JmpIf7000AllBitsClear, JmpIf7000AnyBitsSet, JmpIfAudioMemoryEquals, JmpIfAudioMemoryIsAtLeast, JmpIfBitClear, JmpIfBitSet, JmpIfComparisonResultIsGreaterOrEqual, JmpIfComparisonResultIsLesser, JmpIfDialogOptionBOrCSelected, JmpIfDialogOptionBSelected, JmpIfLoadedMemoryIs0, JmpIfLoadedMemoryIsAboveOrEqual0, JmpIfLoadedMemoryIsBelow0, JmpIfLoadedMemoryIsNot0, JmpIfMarioInAir, JmpIfMarioOnAnObjectOrNot, JmpIfMarioOnObject, JmpIfMem704XAt7000BitClear, JmpIfMem704XAt7000BitSet, JmpIfObjectActionScriptIsRunning, JmpIfObjectInAir, JmpIfObjectInCurrentLevel, JmpIfObjectInSpecificLevel, JmpIfObjectIsUnderwater, JmpIfObjectNotInSpecificLevel, JmpIfObjectTriggerDisabledInSpecificLevel, JmpIfObjectTriggerEnabledInSpecificLevel, JmpIfObjectsAreLessThanXYStepsApart, JmpIfObjectsAreLessThanXYStepsApartSameZCoord, JmpIfRandom1of2, JmpIfRandom2of3, JmpIfVarEqualsConst, JmpIfVarNotEqualsConst, JmpToEvent, JmpToStartOfThisScript, JmpToStartOfThisScriptFA, JmpToSubroutine, LearnSpell, MarioGlows, MarioStopsGlowing, Mem7000AndConst, Mem7000AndVar, Mem7000OrConst, Mem7000OrVar, Mem7000XorConst, Mem7000XorVar, Move70107015To7016701B, Move7016701BTo70107015, MoveScriptToBackgroundThread1, MoveScriptToBackgroundThread2, MoveScriptToMainThread, MultiplyAndAddMem3148StoreToOffset7fB000PlusOutputX2, NonEmbeddedActionQueue, OpenSaveMenu, OpenShop, PaletteSet, PaletteSetMorphs, Pause, PauseActionScript, PauseScriptIfMenuOpen, PauseScriptResumeOnNextDialogPageA, PauseScriptResumeOnNextDialogPageB, PauseScriptUntilEffectDone, PixelateLayers, PlayMusic, PlayMusicAtCurrentVolume, PlayMusicAtDefaultVolume, PlaySound, PlaySoundBalance, PlaySoundBalanceFD9D, PrioritySet, ReactivateObject70A8TriggerIfMarioOnTopOfIt, ReadFromAddress, ReduceMusicPitchBy, RememberLastObject, RemoveObjectAt70A8FromCurrentLevel, RemoveObjectFromCurrentLevel, RemoveObjectFromSpecificLevel, RemoveOneOfItemFromInventory, ResetAndChooseGame, ResetCoords, ResetGame, ResetPrioritySet, RestoreAllFP, RestoreAllHP, ResumeActionScript, ResumeBackgroundEvent, Return, ReturnAll, ReturnFD, RunBackgroundEvent, RunBackgroundEventWithPause, RunBackgroundEventWithPauseReturnOnExit, RunDialog, RunDialogForDuration, RunEndingCredits, RunEventAsSubroutine, RunEventAtReturn, RunEventSequence, RunLevelupBonusSequence, RunMenuOrEventSequence, RunMenuTutorial, RunMolevilleMountainIntroSequence, RunMolevilleMountainSequence, RunStarPieceSequence, ScreenFlashesWithColour, Set0158Bit3Offset, Set0158Bit7Offset, Set7000To7FMemVar, Set7000ToCurrentLevel, Set7000ToIDOfMemberInSlot, Set7000ToMinecartTimer, Set7000ToObjectCoord, Set7000ToPartySize, Set7000ToPressedButton, Set7000ToTappedButton, Set70107015ToObjectXYZ, Set7016701BToObjectXYZ, SetAsyncActionScript, SetBit, SetEXPPacketTo7000, SetMem704XAt7000Bit, SetObjectMemoryToVar, SetSyncActionScript, SetTempAsyncActionScript, SetTempSyncActionScript, SetVarToConst, SetVarToRandom, SlowDownMusic, SlowDownMusicTempoBy, SpeedUpMusicTempoBy, SpeedUpMusicToDefault, StarMaskExpandFromScreenCenter, StarMaskShrinkToScreenCenter, StartAsyncEmbeddedActionScript, StartBattleAtBattlefield, StartBattleWithPackAt700E, StartLoopNFrames, StartLoopNTimes, StartSyncEmbeddedActionScript, StopAllBackgroundEvents, StopBackgroundEvent, StopEmbeddedActionScript, StopMusic, StopMusicFD9F, StopMusicFDA0, StopMusicFDA1, StopMusicFDA2, StopMusicFDA6, StopSound, Store00To0248, Store00To0334, Store01To0248, Store01To0335, Store02To0248, Store70A7ToEquipsInventory, StoreBytesTo0335And0556, StoreCharacterEquipmentTo7000, StoreCoinCountTo7000, StoreCurrentFPTo7000, StoreEmptyItemInventorySlotCountTo7000, StoreFFTo0335, StoreFrogCoinCountTo7000, StoreItemAmountTo7000, StoreItemAt70A7QuantityTo7000, StoreSetBits, SummonObjectAt70A8ToCurrentLevel, SummonObjectToCurrentLevel, SummonObjectToCurrentLevelAtMariosCoords, SummonObjectToSpecificLevel, SwapVars, TintLayers, UnfreezeAllNPCs, UnfreezeCamera, UnknownCommand, UnsyncActionScript, UnsyncDialog, VarShiftLeft, Xor3105With01