smrpgpatchbuilder 7.1.3__tar.gz → 7.1.7__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 (253) hide show
  1. {smrpgpatchbuilder-7.1.3/src/smrpgpatchbuilder.egg-info → smrpgpatchbuilder-7.1.7}/PKG-INFO +1 -1
  2. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/pyproject.toml +1 -1
  3. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/formatter.py +50 -0
  4. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/graphics/classes.py +11 -1
  5. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7/src/smrpgpatchbuilder.egg-info}/PKG-INFO +1 -1
  6. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/dialogs/test_formatter.py +72 -0
  7. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/LICENSE +0 -0
  8. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/MANIFEST.in +0 -0
  9. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/README.md +0 -0
  10. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/setup.cfg +0 -0
  11. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/__init__.py +0 -0
  12. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/__init__.py +0 -0
  13. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/allies/__init__.py +0 -0
  14. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/allies/ally.py +0 -0
  15. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/allies/ally_collection.py +0 -0
  16. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/__init__.py +0 -0
  17. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/__init__.py +0 -0
  18. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/battle_targets.py +0 -0
  19. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/bonus_messages.py +0 -0
  20. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/flash_colours.py +0 -0
  21. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/layer_priority_type.py +0 -0
  22. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/mask_effects.py +0 -0
  23. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/message_type.py +0 -0
  24. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/origins.py +0 -0
  25. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/pause_until.py +0 -0
  26. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/shift_type.py +0 -0
  27. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/__init__.py +0 -0
  28. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/classes.py +0 -0
  29. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/wave_effect.py +0 -0
  30. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/__init__.py +0 -0
  31. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/commands.py +0 -0
  32. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/__init__.py +0 -0
  33. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/classes.py +0 -0
  34. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/__init__.py +0 -0
  35. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/monster_entrances.py +0 -0
  36. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/types.py +0 -0
  37. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/__init__.py +0 -0
  38. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/battle_dialog_collection.py +0 -0
  39. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/enums.py +0 -0
  40. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/__init__.py +0 -0
  41. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/classes.py +0 -0
  42. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/ids/__init__.py +0 -0
  43. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/ids/misc.py +0 -0
  44. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/music.py +0 -0
  45. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/types/__init__.py +0 -0
  46. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/battles/types/classes.py +0 -0
  47. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/characters/__init__.py +0 -0
  48. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/characters/classes.py +0 -0
  49. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/characters/constants.py +0 -0
  50. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/characters/enums.py +0 -0
  51. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/__init__.py +0 -0
  52. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/classes.py +0 -0
  53. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/ids/__init__.py +0 -0
  54. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/ids/dialog_bank_ids.py +0 -0
  55. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/ids/misc.py +0 -0
  56. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/__init__.py +0 -0
  57. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/classes.py +0 -0
  58. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/dialogs/utils.py +0 -0
  59. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/enemies/__init__.py +0 -0
  60. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/enemies/classes.py +0 -0
  61. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/enemies/constants.py +0 -0
  62. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/enemies/enums.py +0 -0
  63. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/enemy_attacks/__init__.py +0 -0
  64. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/enemy_attacks/classes.py +0 -0
  65. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/enemy_attacks/constants.py +0 -0
  66. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/graphics/__init__.py +0 -0
  67. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/items/__init__.py +0 -0
  68. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/items/classes.py +0 -0
  69. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/items/constants.py +0 -0
  70. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/items/encoding.py +0 -0
  71. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/items/enums.py +0 -0
  72. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/levels/classes.py +0 -0
  73. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/levels/room_collection.py +0 -0
  74. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/minecart/__init__.py +0 -0
  75. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/minecart/_vanilla_block.py +0 -0
  76. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/minecart/classes.py +0 -0
  77. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/minecart/constants.py +0 -0
  78. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/minecart/lz3.py +0 -0
  79. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/__init__.py +0 -0
  80. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/__init__.py +0 -0
  81. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/command_types.py +0 -0
  82. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/targets.py +0 -0
  83. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/__init__.py +0 -0
  84. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/classes.py +0 -0
  85. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/__init__.py +0 -0
  86. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/commands.py +0 -0
  87. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/__init__.py +0 -0
  88. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/classes.py +0 -0
  89. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/__init__.py +0 -0
  90. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/misc.py +0 -0
  91. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/monster_scripts/types.py +0 -0
  92. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/numbers/__init__.py +0 -0
  93. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/numbers/classes.py +0 -0
  94. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/__init__.py +0 -0
  95. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/__init__.py +0 -0
  96. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/__init__.py +0 -0
  97. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/sequence_speeds.py +0 -0
  98. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/__init__.py +0 -0
  99. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/classes.py +0 -0
  100. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/vram_priority.py +0 -0
  101. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/classes.py +0 -0
  102. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/__init__.py +0 -0
  103. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/commands.py +0 -0
  104. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/__init__.py +0 -0
  105. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/classes.py +0 -0
  106. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/__init__.py +0 -0
  107. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/misc.py +0 -0
  108. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/__init__.py +0 -0
  109. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/area_objects.py +0 -0
  110. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/colours.py +0 -0
  111. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/controller_inputs.py +0 -0
  112. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/coords.py +0 -0
  113. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/directions.py +0 -0
  114. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/intro_title_text.py +0 -0
  115. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/layers.py +0 -0
  116. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_rows.py +0 -0
  117. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_types.py +0 -0
  118. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/scenes.py +0 -0
  119. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/tutorials.py +0 -0
  120. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/__init__.py +0 -0
  121. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/area_object.py +0 -0
  122. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/battlefield.py +0 -0
  123. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/byte_var.py +0 -0
  124. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/colour.py +0 -0
  125. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/controller_input.py +0 -0
  126. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/coord.py +0 -0
  127. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/direction.py +0 -0
  128. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/flag.py +0 -0
  129. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/intro_title_text.py +0 -0
  130. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/layer.py +0 -0
  131. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/packet.py +0 -0
  132. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_row.py +0 -0
  133. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_type.py +0 -0
  134. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/party_character.py +0 -0
  135. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/scene.py +0 -0
  136. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/short_var.py +0 -0
  137. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/tutorial.py +0 -0
  138. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/__init__.py +0 -0
  139. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/classes.py +0 -0
  140. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/__init__.py +0 -0
  141. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/commands.py +0 -0
  142. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/__init__.py +0 -0
  143. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/classes.py +0 -0
  144. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/__init__.py +0 -0
  145. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/misc.py +0 -0
  146. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/__init__.py +0 -0
  147. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/misc.py +0 -0
  148. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/scripts_common/__init__.py +0 -0
  149. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/scripts_common/classes.py +0 -0
  150. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/shops/__init__.py +0 -0
  151. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/shops/classes.py +0 -0
  152. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/__init__.py +0 -0
  153. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/arguments/__init__.py +0 -0
  154. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/arguments/damage_modifiers.py +0 -0
  155. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/arguments/timing_properties.py +0 -0
  156. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/__init__.py +0 -0
  157. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/classes.py +0 -0
  158. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/classes.py +0 -0
  159. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/enums.py +0 -0
  160. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/ids/__init__.py +0 -0
  161. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/spells/ids/misc.py +0 -0
  162. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/__init__.py +0 -0
  163. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/ally_palettes.py +0 -0
  164. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/collection.py +0 -0
  165. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/disassembler.py +0 -0
  166. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/exceptions.py +0 -0
  167. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/ids/__init__.py +0 -0
  168. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/ids/event_palettes.py +0 -0
  169. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/ids/misc.py +0 -0
  170. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/ids/sprite_palettes.py +0 -0
  171. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/palette.py +0 -0
  172. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/sprites/sprite.py +0 -0
  173. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/world_map_locations/__init__.py +0 -0
  174. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/datatypes/world_map_locations/classes.py +0 -0
  175. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/manage.py +0 -0
  176. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/allyassembler.py +0 -0
  177. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/allydisassembler.py +0 -0
  178. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/animationassembler.py +0 -0
  179. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/animationdisassembler.py +0 -0
  180. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/battleassembler.py +0 -0
  181. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/battledialogassembler.py +0 -0
  182. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/battledialogdisassembler.py +0 -0
  183. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/battledisassembler.py +0 -0
  184. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/bowser_tile_rearranger.py +0 -0
  185. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/comboassembler.py +0 -0
  186. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/combodisassembler.py +0 -0
  187. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/dialogassembler.py +0 -0
  188. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/dialogdisassembler.py +0 -0
  189. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/enemyassembler.py +0 -0
  190. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/enemyattackassembler.py +0 -0
  191. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/enemyattackdisassembler.py +0 -0
  192. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/enemydisassembler.py +0 -0
  193. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/eventassembler.py +0 -0
  194. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/eventconverter.py +0 -0
  195. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/eventidentifieraudit.py +0 -0
  196. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/eventpalettedisassembler.py +0 -0
  197. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/generatesample.py +0 -0
  198. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/graphicsassembler.py +0 -0
  199. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/graphicsdisassembler.py +0 -0
  200. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/input_file_parser.py +0 -0
  201. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/itemassembler.py +0 -0
  202. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/itemdisassembler.py +0 -0
  203. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/legacy/__init__.py +0 -0
  204. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/legacy/docstrings.py +0 -0
  205. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/legacy/eventdisassembler.py +0 -0
  206. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/legacy/eventtables.py +0 -0
  207. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/legacy/objectsequenceassembler.py +0 -0
  208. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencedisassembler.py +0 -0
  209. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencetables.py +0 -0
  210. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/make_seed.py +0 -0
  211. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/move_spell_gfx.py +0 -0
  212. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/npcmodelassembler.py +0 -0
  213. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/npcmodeldisassembler.py +0 -0
  214. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/objectassembler.py +0 -0
  215. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/objectdisassembler.py +0 -0
  216. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/packassembler.py +0 -0
  217. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/packdisassembler.py +0 -0
  218. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/packetassembler.py +0 -0
  219. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/packetdisassembler.py +0 -0
  220. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/palettebytes.py +0 -0
  221. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/partitionanalyzer.py +0 -0
  222. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/roomassembler.py +0 -0
  223. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/roomconverter.py +0 -0
  224. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/roomdisassembler.py +0 -0
  225. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/shopassembler.py +0 -0
  226. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/shopdisassembler.py +0 -0
  227. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/space_reassigner.py +0 -0
  228. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/spellassembler.py +0 -0
  229. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/spelldisassembler.py +0 -0
  230. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/spritepalettedisassembler.py +0 -0
  231. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/unused_gfx_finder.py +0 -0
  232. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover old.py +0 -0
  233. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover.py +0 -0
  234. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/variableparser.py +0 -0
  235. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/worldmaplocationassembler.py +0 -0
  236. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/commands/worldmaplocationdisassembler.py +0 -0
  237. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/management/django/settings.py +0 -0
  238. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/utils/disassembler_common.py +0 -0
  239. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/utils/npcs.py +0 -0
  240. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/utils/number.py +0 -0
  241. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder/utils/strings.py +0 -0
  242. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder.egg-info/SOURCES.txt +0 -0
  243. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder.egg-info/dependency_links.txt +0 -0
  244. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder.egg-info/requires.txt +0 -0
  245. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/smrpgpatchbuilder.egg-info/top_level.txt +0 -0
  246. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/animations/test_animationscripts.py +0 -0
  247. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/dialogs/__init__.py +0 -0
  248. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/levels/__init__.py +0 -0
  249. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/levels/test_room_collection.py +0 -0
  250. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/minecart/test_minecart.py +0 -0
  251. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/monsters/test_ai.py +0 -0
  252. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/overworld/test_actionscripts.py +0 -0
  253. {smrpgpatchbuilder-7.1.3 → smrpgpatchbuilder-7.1.7}/src/tests/overworld/test_eventscripts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smrpgpatchbuilder
3
- Version: 7.1.3
3
+ Version: 7.1.7
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 = "7.1.3"
7
+ version = "7.1.7"
8
8
  authors = [
9
9
  { name="pidgezero_one", email="s.kischak@gmail.com" },
10
10
  ]
@@ -110,6 +110,42 @@ def _build_control_token_list() -> list[str]:
110
110
  _CONTROL_TOKENS = _build_control_token_list()
111
111
 
112
112
 
113
+ def _byte_glyph_width(byte: int, widths: tuple[int, ...] = VANILLA_DIALOG_FONT_WIDTHS) -> int:
114
+ """Rendered width (raw + 1px spacing) of a single compressed dialog byte.
115
+
116
+ The game renders the *compressed* byte stream, so a character's on-screen
117
+ width is that of its glyph byte -- e.g. ':' is stored as 0x8E and drawn with
118
+ glyph 0x8E's width, not ASCII 0x3A's. Bytes below 0x20 are control codes and
119
+ have no width (mirrors Lazy Shell's ``l >= 0x20 && l <= 0x9F`` guard).
120
+ """
121
+ if 0x20 <= byte <= 0x20 + len(widths) - 1:
122
+ return widths[byte - 0x20] + 1
123
+ return 0
124
+
125
+
126
+ def _build_glyph_tokens() -> list[tuple[str, int]]:
127
+ """Compression-table substrings that render as one drawable glyph, paired
128
+ with that glyph's byte value.
129
+
130
+ These are the source-string spellings (curly quotes, ``♥``, ``♪``, bullets,
131
+ and remapped punctuation like ``:`` ``~`` ``×``) whose glyph byte differs
132
+ from their unicode codepoint. Sorted longest-first so greedy matching picks
133
+ e.g. the single ``••`` glyph (0x2B) over two ``•`` (0x2A). Control/variable
134
+ entries (byte < 0x20, or multi-byte like ``[0x7000]``) are excluded -- those
135
+ are handled as control/variable tokens elsewhere. Width is computed at
136
+ tokenize time so a caller-supplied ``widths`` table is honored.
137
+ """
138
+ glyphs = []
139
+ for key, val in COMPRESSION_TABLE:
140
+ if len(val) == 1 and 0x20 <= val[0] <= 0x9F:
141
+ glyphs.append((key, val[0]))
142
+ glyphs.sort(key=lambda kv: -len(kv[0]))
143
+ return glyphs
144
+
145
+
146
+ _GLYPH_TOKENS = _build_glyph_tokens()
147
+
148
+
113
149
  def _tokenize(text: str, widths: tuple[int, ...] = VANILLA_DIALOG_FONT_WIDTHS) -> list[Token]:
114
150
  """Parse a dialog string into a sequence of tokens."""
115
151
  tokens = []
@@ -165,6 +201,20 @@ def _tokenize(text: str, widths: tuple[int, ...] = VANILLA_DIALOG_FONT_WIDTHS) -
165
201
  if matched:
166
202
  continue
167
203
 
204
+ # 2c. Match a compression-table glyph substring (curly quotes, ♥, ♪,
205
+ # bullets, remapped punctuation like ':' -> 0x8E). These render as one
206
+ # glyph whose width comes from the *byte*, not the unicode codepoint,
207
+ # so measuring ord(char) would give the wrong width (often 0).
208
+ glyph_matched = False
209
+ for sub, byte in _GLYPH_TOKENS:
210
+ if text[cursor:cursor + len(sub)] == sub:
211
+ tokens.append(Token(text=sub, width_px=_byte_glyph_width(byte, widths)))
212
+ cursor += len(sub)
213
+ glyph_matched = True
214
+ break
215
+ if glyph_matched:
216
+ continue
217
+
168
218
  # 3. Literal character
169
219
  ch = text[cursor]
170
220
  if ch == " ":
@@ -1010,7 +1010,17 @@ class SpriteCollection:
1010
1010
  confirm_tile = False
1011
1011
  continue
1012
1012
  conf_i += 1
1013
- if confirm_tile:
1013
+ # offset 0 means this tile hasn't
1014
+ # been emitted yet (it sits later in
1015
+ # the current mold). Real tile
1016
+ # offsets are always >= 0x0C, so 0
1017
+ # is unambiguously "unassigned".
1018
+ # Pointing a clone at 0 aims it at
1019
+ # the animation header and renders a
1020
+ # phantom blank tile.
1021
+ if confirm_tile and (
1022
+ compare_tile.offset != 0
1023
+ ):
1014
1024
  found_clone = True
1015
1025
  found_offset = (
1016
1026
  compare_tile.offset
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smrpgpatchbuilder
3
- Version: 7.1.3
3
+ Version: 7.1.7
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
@@ -271,3 +271,75 @@ class TestCalculateTextWidth:
271
271
  def test_variable_token(self):
272
272
  # [0x7000] should be 16px
273
273
  assert calculate_text_width("[0x7000]") == 16
274
+
275
+
276
+ class TestSpecialCharWidths:
277
+ """Width must come from the *compressed glyph byte*, not the unicode
278
+ codepoint. The game renders the compressed byte stream, so e.g. ':' is
279
+ drawn with glyph 0x8E, and a heart with glyph 0x24 -- see COMPRESSION_TABLE.
280
+ Before the fix these all measured 0px (out-of-range unicode) or the wrong
281
+ ascii slot."""
282
+
283
+ def test_curly_quotes(self):
284
+ # left/right double quotes -> bytes 0x22 / 0x23 (raw 6 -> 7)
285
+ assert calculate_text_width("“") == 7
286
+ assert calculate_text_width("”") == 7
287
+
288
+ def test_curly_apostrophes(self):
289
+ # left/right single quotes -> bytes 0x26 / 0x27 (raw 4 -> 5)
290
+ assert calculate_text_width("‘") == 5
291
+ assert calculate_text_width("’") == 5
292
+
293
+ def test_heart_and_note(self):
294
+ # heart -> 0x24 (raw 8 -> 9), eighth note -> 0x25 (raw 8 -> 9)
295
+ assert calculate_text_width("♥") == 9
296
+ assert calculate_text_width("♪") == 9
297
+
298
+ def test_bullets_greedy(self):
299
+ # single bullet -> 0x2A (raw 6 -> 7); double bullet -> 0x2B (raw 8 -> 9)
300
+ # Greedy longest-match must pick the single 0x2B glyph, not two 0x2A.
301
+ assert calculate_text_width("•") == 7
302
+ assert calculate_text_width("••") == 9
303
+
304
+ def test_remapped_punctuation(self):
305
+ # ':' stored as 0x8E (raw 7 -> 8), NOT ascii 0x3A (raw 8 -> 9)
306
+ assert calculate_text_width(":") == 8
307
+ assert calculate_text_width(";") == 8 # 0x8F raw 7 -> 8
308
+ assert calculate_text_width("<") == 9 # 0x90 raw 8 -> 9
309
+ assert calculate_text_width(">") == 9 # 0x91 raw 8 -> 9
310
+ assert calculate_text_width("#") == 10 # 0x93 raw 9 -> 10
311
+ assert calculate_text_width("&") == 9 # 0x9C raw 8 -> 9
312
+
313
+ def test_tilde(self):
314
+ # '~' stored as 0x3A (raw 8 -> 9), NOT ascii 0x7E
315
+ assert calculate_text_width("~") == 9
316
+
317
+ def test_multiplication_sign(self):
318
+ # multiplication sign -> 0x95 (raw 9 -> 10); unicode is out-of-range (was 0)
319
+ assert calculate_text_width("×") == 10
320
+
321
+ def test_middle_dots_greedy(self):
322
+ # three middle dots -> single glyph 0x92 (raw 9 -> 10)
323
+ assert calculate_text_width("···") == 10
324
+
325
+ def test_tokenizes_special_into_word(self):
326
+ # A special glyph is part of its surrounding word (not a break), so the
327
+ # whole word's width is counted for wrap decisions.
328
+ tokens = _tokenize("a♥b")
329
+ assert [t.text for t in tokens] == ["a", "♥", "b"]
330
+ assert tokens[1].width_px == 9
331
+
332
+
333
+ class TestSpecialCharWrapping:
334
+ """Regression: special chars measured as 0px let lines overflow, so the
335
+ game wrapped a word on its own right before the formatter's \\n."""
336
+
337
+ def test_line_with_specials_does_not_overflow(self):
338
+ # start_x = 17, wrap boundary = 240 -> a completed line's content width
339
+ # must stay below 240 - 17 = 223px.
340
+ raw = ("The “Super” Star ♥ gives you power ♪ "
341
+ "for a while okay friend")
342
+ formatted = format_dialog(raw)
343
+ for line in formatted.split("\n"):
344
+ assert calculate_text_width(line) < 223, (
345
+ repr(line), calculate_text_width(line))