smrpgpatchbuilder 4.1.2__tar.gz → 4.1.4__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 (245) hide show
  1. {smrpgpatchbuilder-4.1.2/src/smrpgpatchbuilder.egg-info → smrpgpatchbuilder-4.1.4}/PKG-INFO +1 -1
  2. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/pyproject.toml +1 -1
  3. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/graphics/classes.py +46 -3
  4. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4/src/smrpgpatchbuilder.egg-info}/PKG-INFO +1 -1
  5. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/LICENSE +0 -0
  6. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/MANIFEST.in +0 -0
  7. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/README.md +0 -0
  8. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/setup.cfg +0 -0
  9. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/__init__.py +0 -0
  10. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/__init__.py +0 -0
  11. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/allies/__init__.py +0 -0
  12. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/allies/ally.py +0 -0
  13. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/allies/ally_collection.py +0 -0
  14. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/__init__.py +0 -0
  15. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/__init__.py +0 -0
  16. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/battle_targets.py +0 -0
  17. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/bonus_messages.py +0 -0
  18. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/flash_colours.py +0 -0
  19. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/layer_priority_type.py +0 -0
  20. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/mask_effects.py +0 -0
  21. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/message_type.py +0 -0
  22. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/origins.py +0 -0
  23. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/pause_until.py +0 -0
  24. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/shift_type.py +0 -0
  25. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/__init__.py +0 -0
  26. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/classes.py +0 -0
  27. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/wave_effect.py +0 -0
  28. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/__init__.py +0 -0
  29. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/commands.py +0 -0
  30. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/__init__.py +0 -0
  31. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/classes.py +0 -0
  32. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/__init__.py +0 -0
  33. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/monster_entrances.py +0 -0
  34. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/types.py +0 -0
  35. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/__init__.py +0 -0
  36. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/battle_dialog_collection.py +0 -0
  37. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/enums.py +0 -0
  38. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/__init__.py +0 -0
  39. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/classes.py +0 -0
  40. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/ids/__init__.py +0 -0
  41. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/ids/misc.py +0 -0
  42. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/music.py +0 -0
  43. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/types/__init__.py +0 -0
  44. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/battles/types/classes.py +0 -0
  45. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/characters/__init__.py +0 -0
  46. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/characters/classes.py +0 -0
  47. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/characters/constants.py +0 -0
  48. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/characters/enums.py +0 -0
  49. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/__init__.py +0 -0
  50. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/classes.py +0 -0
  51. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/formatter.py +0 -0
  52. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/ids/__init__.py +0 -0
  53. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/ids/dialog_bank_ids.py +0 -0
  54. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/ids/misc.py +0 -0
  55. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/__init__.py +0 -0
  56. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/classes.py +0 -0
  57. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/dialogs/utils.py +0 -0
  58. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/enemies/__init__.py +0 -0
  59. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/enemies/classes.py +0 -0
  60. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/enemies/constants.py +0 -0
  61. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/enemies/enums.py +0 -0
  62. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/enemy_attacks/__init__.py +0 -0
  63. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/enemy_attacks/classes.py +0 -0
  64. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/enemy_attacks/constants.py +0 -0
  65. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/graphics/__init__.py +0 -0
  66. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/items/__init__.py +0 -0
  67. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/items/classes.py +0 -0
  68. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/items/constants.py +0 -0
  69. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/items/encoding.py +0 -0
  70. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/items/enums.py +0 -0
  71. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/levels/classes.py +0 -0
  72. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/levels/room_collection.py +0 -0
  73. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/__init__.py +0 -0
  74. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/__init__.py +0 -0
  75. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/command_types.py +0 -0
  76. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/targets.py +0 -0
  77. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/__init__.py +0 -0
  78. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/classes.py +0 -0
  79. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/__init__.py +0 -0
  80. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/commands.py +0 -0
  81. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/__init__.py +0 -0
  82. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/classes.py +0 -0
  83. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/__init__.py +0 -0
  84. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/misc.py +0 -0
  85. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/monster_scripts/types.py +0 -0
  86. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/numbers/__init__.py +0 -0
  87. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/numbers/classes.py +0 -0
  88. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/__init__.py +0 -0
  89. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/__init__.py +0 -0
  90. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/__init__.py +0 -0
  91. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/sequence_speeds.py +0 -0
  92. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/__init__.py +0 -0
  93. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/classes.py +0 -0
  94. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/vram_priority.py +0 -0
  95. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/classes.py +0 -0
  96. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/__init__.py +0 -0
  97. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/commands.py +0 -0
  98. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/__init__.py +0 -0
  99. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/classes.py +0 -0
  100. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/__init__.py +0 -0
  101. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/misc.py +0 -0
  102. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/__init__.py +0 -0
  103. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/area_objects.py +0 -0
  104. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/colours.py +0 -0
  105. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/controller_inputs.py +0 -0
  106. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/coords.py +0 -0
  107. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/directions.py +0 -0
  108. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/intro_title_text.py +0 -0
  109. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/layers.py +0 -0
  110. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_rows.py +0 -0
  111. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_types.py +0 -0
  112. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/scenes.py +0 -0
  113. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/tutorials.py +0 -0
  114. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/__init__.py +0 -0
  115. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/area_object.py +0 -0
  116. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/battlefield.py +0 -0
  117. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/byte_var.py +0 -0
  118. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/colour.py +0 -0
  119. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/controller_input.py +0 -0
  120. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/coord.py +0 -0
  121. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/direction.py +0 -0
  122. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/flag.py +0 -0
  123. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/intro_title_text.py +0 -0
  124. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/layer.py +0 -0
  125. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/packet.py +0 -0
  126. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_row.py +0 -0
  127. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_type.py +0 -0
  128. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/party_character.py +0 -0
  129. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/scene.py +0 -0
  130. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/short_var.py +0 -0
  131. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/tutorial.py +0 -0
  132. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/__init__.py +0 -0
  133. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/classes.py +0 -0
  134. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/__init__.py +0 -0
  135. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/commands.py +0 -0
  136. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/__init__.py +0 -0
  137. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/classes.py +0 -0
  138. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/__init__.py +0 -0
  139. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/misc.py +0 -0
  140. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/__init__.py +0 -0
  141. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/misc.py +0 -0
  142. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/scripts_common/__init__.py +0 -0
  143. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/scripts_common/classes.py +0 -0
  144. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/shops/__init__.py +0 -0
  145. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/shops/classes.py +0 -0
  146. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/__init__.py +0 -0
  147. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/arguments/__init__.py +0 -0
  148. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/arguments/damage_modifiers.py +0 -0
  149. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/arguments/timing_properties.py +0 -0
  150. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/__init__.py +0 -0
  151. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/classes.py +0 -0
  152. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/classes.py +0 -0
  153. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/enums.py +0 -0
  154. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/ids/__init__.py +0 -0
  155. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/spells/ids/misc.py +0 -0
  156. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/__init__.py +0 -0
  157. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/ally_palettes.py +0 -0
  158. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/collection.py +0 -0
  159. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/disassembler.py +0 -0
  160. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/exceptions.py +0 -0
  161. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/ids/__init__.py +0 -0
  162. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/ids/event_palettes.py +0 -0
  163. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/ids/misc.py +0 -0
  164. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/ids/sprite_palettes.py +0 -0
  165. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/palette.py +0 -0
  166. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/sprites/sprite.py +0 -0
  167. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/world_map_locations/__init__.py +0 -0
  168. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/datatypes/world_map_locations/classes.py +0 -0
  169. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/manage.py +0 -0
  170. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/allyassembler.py +0 -0
  171. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/allydisassembler.py +0 -0
  172. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/animationassembler.py +0 -0
  173. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/animationdisassembler.py +0 -0
  174. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/battleassembler.py +0 -0
  175. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/battledialogassembler.py +0 -0
  176. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/battledialogdisassembler.py +0 -0
  177. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/battledisassembler.py +0 -0
  178. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/bowser_tile_rearranger.py +0 -0
  179. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/comboassembler.py +0 -0
  180. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/combodisassembler.py +0 -0
  181. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/dialogassembler.py +0 -0
  182. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/dialogdisassembler.py +0 -0
  183. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/enemyassembler.py +0 -0
  184. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/enemyattackassembler.py +0 -0
  185. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/enemyattackdisassembler.py +0 -0
  186. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/enemydisassembler.py +0 -0
  187. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/eventassembler.py +0 -0
  188. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/eventconverter.py +0 -0
  189. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/eventidentifieraudit.py +0 -0
  190. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/eventpalettedisassembler.py +0 -0
  191. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/generatesample.py +0 -0
  192. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/graphicsassembler.py +0 -0
  193. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/graphicsdisassembler.py +0 -0
  194. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/input_file_parser.py +0 -0
  195. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/itemassembler.py +0 -0
  196. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/itemdisassembler.py +0 -0
  197. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/legacy/__init__.py +0 -0
  198. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/legacy/docstrings.py +0 -0
  199. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/legacy/eventdisassembler.py +0 -0
  200. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/legacy/eventtables.py +0 -0
  201. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/legacy/objectsequenceassembler.py +0 -0
  202. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencedisassembler.py +0 -0
  203. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencetables.py +0 -0
  204. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/make_seed.py +0 -0
  205. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/move_spell_gfx.py +0 -0
  206. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/npcmodelassembler.py +0 -0
  207. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/npcmodeldisassembler.py +0 -0
  208. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/objectassembler.py +0 -0
  209. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/objectdisassembler.py +0 -0
  210. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/packassembler.py +0 -0
  211. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/packdisassembler.py +0 -0
  212. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/packetassembler.py +0 -0
  213. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/packetdisassembler.py +0 -0
  214. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/palettebytes.py +0 -0
  215. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/partitionanalyzer.py +0 -0
  216. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/roomassembler.py +0 -0
  217. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/roomconverter.py +0 -0
  218. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/roomdisassembler.py +0 -0
  219. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/shopassembler.py +0 -0
  220. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/shopdisassembler.py +0 -0
  221. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/space_reassigner.py +0 -0
  222. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/spellassembler.py +0 -0
  223. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/spelldisassembler.py +0 -0
  224. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/spritepalettedisassembler.py +0 -0
  225. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/unused_gfx_finder.py +0 -0
  226. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover old.py +0 -0
  227. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover.py +0 -0
  228. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/variableparser.py +0 -0
  229. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/worldmaplocationassembler.py +0 -0
  230. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/commands/worldmaplocationdisassembler.py +0 -0
  231. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/management/django/settings.py +0 -0
  232. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/utils/disassembler_common.py +0 -0
  233. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/utils/npcs.py +0 -0
  234. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/utils/number.py +0 -0
  235. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder/utils/strings.py +0 -0
  236. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder.egg-info/SOURCES.txt +0 -0
  237. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder.egg-info/dependency_links.txt +0 -0
  238. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder.egg-info/requires.txt +0 -0
  239. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/smrpgpatchbuilder.egg-info/top_level.txt +0 -0
  240. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/tests/animations/test_animationscripts.py +0 -0
  241. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/tests/dialogs/__init__.py +0 -0
  242. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/tests/dialogs/test_formatter.py +0 -0
  243. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/tests/monsters/test_ai.py +0 -0
  244. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/tests/overworld/test_actionscripts.py +0 -0
  245. {smrpgpatchbuilder-4.1.2 → smrpgpatchbuilder-4.1.4}/src/tests/overworld/test_eventscripts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smrpgpatchbuilder
3
- Version: 4.1.2
3
+ Version: 4.1.4
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 = "4.1.2"
7
+ version = "4.1.4"
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) -> 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([])
@@ -900,6 +900,36 @@ class SpriteCollection:
900
900
  wip_sprite.relative_offset = 0
901
901
  wip_sprites.append(wip_sprite)
902
902
 
903
+ # Force specified sprite groups to share the same tile group
904
+ # (and thus the same image) for SNES engine compatibility
905
+ if shared_image_groups is not None:
906
+ print(f"[SHARED_IMAGE] shared_image_groups={shared_image_groups}")
907
+ for forced_group in shared_image_groups:
908
+ # Collect all unique subtiles from sprites in this forced group
909
+ all_subtiles: list[tuple[int, ...]] = []
910
+ for sprite_idx in forced_group:
911
+ print(f"[SHARED_IMAGE] sprite {sprite_idx}: {len(wip_sprites[sprite_idx].tiles)} unique subtiles, tile_group={wip_sprites[sprite_idx].tile_group}")
912
+ for subtile in wip_sprites[sprite_idx].tiles:
913
+ if subtile not in all_subtiles:
914
+ all_subtiles.append(subtile)
915
+ print(f"[SHARED_IMAGE] combined group {forced_group}: {len(all_subtiles)} unique subtiles total")
916
+
917
+ # Create a new unified tile group
918
+ new_group_id = random_tile_id()
919
+ while new_group_id in tile_groups:
920
+ new_group_id = random_tile_id()
921
+ tile_groups[new_group_id] = TileGroup(
922
+ tiles=all_subtiles, used_by=list(forced_group), extra=[]
923
+ )
924
+
925
+ # Remove forced sprites from their old groups, assign to new
926
+ for sprite_idx in forced_group:
927
+ old_group_id = wip_sprites[sprite_idx].tile_group
928
+ if sprite_idx in tile_groups[old_group_id].used_by:
929
+ tile_groups[old_group_id].used_by.remove(sprite_idx)
930
+ wip_sprites[sprite_idx].tile_group = new_group_id
931
+ print(f"[SHARED_IMAGE] sprite {sprite_idx} moved to group {new_group_id}")
932
+
903
933
  # within each tile group, determine which sprites actually use which tiles
904
934
  for k in tile_groups:
905
935
  # group tiles together by proximity
@@ -929,9 +959,18 @@ class SpriteCollection:
929
959
  complete_images: list[ImagePack] = []
930
960
  complete_animations: list[AnimationPack] = []
931
961
 
962
+ # Build set of sprite indices that have forced image sharing
963
+ # (these keep relative_offset = 0 to ensure same graphics_pointer)
964
+ forced_sprite_indices: set[int] = set()
965
+ if shared_image_groups is not None:
966
+ for group in shared_image_groups:
967
+ forced_sprite_indices.update(group)
968
+
932
969
  # find sprites which are going to cause problems because os ubtile deltas > 512
933
970
  # and duplicate tiles where necessary
934
971
  for sprite_index, sprite in enumerate(wip_sprites):
972
+ if sprite_index in forced_sprite_indices:
973
+ continue # Keep relative_offset = 0 for shared image groups
935
974
  tile_key = sprite.tile_group
936
975
  available_tiles = tile_groups[tile_key].tiles
937
976
  if len(sprite.tiles) == 0:
@@ -1046,12 +1085,16 @@ class SpriteCollection:
1046
1085
  offset += ((subtile_subtract) * 0x20)
1047
1086
  # need to change this to accommodate diff offsets in same tile group
1048
1087
  palette_ptr = PALETTE_OFFSET + sprite.sprite_data.palette_id * 30
1088
+ if sprite_index in forced_sprite_indices:
1089
+ print(f"[SHARED_IMAGE] sprite {sprite_index}: tile_group={tile_key}, relative_offset={sprite.relative_offset}, offset=0x{offset:06X}, palette_ptr=0x{palette_ptr:06X}, palette_id={sprite.sprite_data.palette_id}, subtile_subtract={subtile_subtract}, available_tiles={len(available_tiles)}")
1049
1090
  image_index_to_use = len(complete_images)
1050
1091
  for image_index, image in enumerate(complete_images):
1051
1092
  if image.graphics_pointer == offset and image.palette_pointer == palette_ptr:
1052
1093
  image_index_to_use = image_index
1053
1094
  if image_index_to_use == len(complete_images):
1054
1095
  complete_images.append(ImagePack(image_index_to_use, offset, palette_ptr))
1096
+ if sprite_index in forced_sprite_indices:
1097
+ print(f"[SHARED_IMAGE] sprite {sprite_index}: assigned image {image_index_to_use}")
1055
1098
 
1056
1099
  # get animation #, or create new
1057
1100
  animation_num_to_use = len(complete_animations)
@@ -1121,8 +1164,8 @@ class SpriteCollection:
1121
1164
 
1122
1165
  return self.assemble_from_tables_(complete_sprites, complete_images, complete_animations, output_tile_ranges)
1123
1166
 
1124
- def render(self, whitespace: bool = False) -> list[tuple[int, bytearray]]:
1125
- sprite_data, image_data, animation_pointers, animation_data, tiles = self.assemble_from_tables(self.sprites, whitespace)
1167
+ def render(self, whitespace: bool = False, shared_image_groups: list[list[int]] | None = None) -> list[tuple[int, bytearray]]:
1168
+ sprite_data, image_data, animation_pointers, animation_data, tiles = self.assemble_from_tables(self.sprites, whitespace, shared_image_groups)
1126
1169
 
1127
1170
  # Zero out all sprite data ranges before writing to prevent leftover data
1128
1171
  zero_ranges = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smrpgpatchbuilder
3
- Version: 4.1.2
3
+ Version: 4.1.4
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