smrpgpatchbuilder 6.2.6__tar.gz → 6.2.9__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 (247) hide show
  1. {smrpgpatchbuilder-6.2.6/src/smrpgpatchbuilder.egg-info → smrpgpatchbuilder-6.2.9}/PKG-INFO +1 -1
  2. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/pyproject.toml +1 -1
  3. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/levels/room_collection.py +6 -0
  4. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/ids/sprite_palettes.py +2 -2
  5. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9/src/smrpgpatchbuilder.egg-info}/PKG-INFO +1 -1
  6. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder.egg-info/SOURCES.txt +2 -0
  7. smrpgpatchbuilder-6.2.9/src/tests/levels/__init__.py +0 -0
  8. smrpgpatchbuilder-6.2.9/src/tests/levels/test_room_collection.py +87 -0
  9. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/LICENSE +0 -0
  10. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/MANIFEST.in +0 -0
  11. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/README.md +0 -0
  12. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/setup.cfg +0 -0
  13. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/__init__.py +0 -0
  14. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/__init__.py +0 -0
  15. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/allies/__init__.py +0 -0
  16. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/allies/ally.py +0 -0
  17. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/allies/ally_collection.py +0 -0
  18. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/__init__.py +0 -0
  19. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/__init__.py +0 -0
  20. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/battle_targets.py +0 -0
  21. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/bonus_messages.py +0 -0
  22. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/flash_colours.py +0 -0
  23. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/layer_priority_type.py +0 -0
  24. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/mask_effects.py +0 -0
  25. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/message_type.py +0 -0
  26. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/origins.py +0 -0
  27. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/pause_until.py +0 -0
  28. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/shift_type.py +0 -0
  29. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/__init__.py +0 -0
  30. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/classes.py +0 -0
  31. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/wave_effect.py +0 -0
  32. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/__init__.py +0 -0
  33. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/commands.py +0 -0
  34. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/__init__.py +0 -0
  35. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/classes.py +0 -0
  36. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/__init__.py +0 -0
  37. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/monster_entrances.py +0 -0
  38. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/types.py +0 -0
  39. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/__init__.py +0 -0
  40. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/battle_dialog_collection.py +0 -0
  41. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/enums.py +0 -0
  42. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/__init__.py +0 -0
  43. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/classes.py +0 -0
  44. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/ids/__init__.py +0 -0
  45. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/ids/misc.py +0 -0
  46. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/music.py +0 -0
  47. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/types/__init__.py +0 -0
  48. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/battles/types/classes.py +0 -0
  49. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/characters/__init__.py +0 -0
  50. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/characters/classes.py +0 -0
  51. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/characters/constants.py +0 -0
  52. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/characters/enums.py +0 -0
  53. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/__init__.py +0 -0
  54. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/classes.py +0 -0
  55. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/formatter.py +0 -0
  56. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/ids/__init__.py +0 -0
  57. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/ids/dialog_bank_ids.py +0 -0
  58. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/ids/misc.py +0 -0
  59. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/__init__.py +0 -0
  60. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/classes.py +0 -0
  61. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/dialogs/utils.py +0 -0
  62. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/enemies/__init__.py +0 -0
  63. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/enemies/classes.py +0 -0
  64. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/enemies/constants.py +0 -0
  65. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/enemies/enums.py +0 -0
  66. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/enemy_attacks/__init__.py +0 -0
  67. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/enemy_attacks/classes.py +0 -0
  68. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/enemy_attacks/constants.py +0 -0
  69. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/graphics/__init__.py +0 -0
  70. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/graphics/classes.py +0 -0
  71. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/items/__init__.py +0 -0
  72. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/items/classes.py +0 -0
  73. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/items/constants.py +0 -0
  74. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/items/encoding.py +0 -0
  75. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/items/enums.py +0 -0
  76. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/levels/classes.py +0 -0
  77. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/__init__.py +0 -0
  78. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/__init__.py +0 -0
  79. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/command_types.py +0 -0
  80. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/targets.py +0 -0
  81. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/__init__.py +0 -0
  82. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/classes.py +0 -0
  83. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/__init__.py +0 -0
  84. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/commands.py +0 -0
  85. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/__init__.py +0 -0
  86. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/classes.py +0 -0
  87. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/__init__.py +0 -0
  88. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/misc.py +0 -0
  89. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/monster_scripts/types.py +0 -0
  90. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/numbers/__init__.py +0 -0
  91. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/numbers/classes.py +0 -0
  92. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/__init__.py +0 -0
  93. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/__init__.py +0 -0
  94. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/__init__.py +0 -0
  95. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/sequence_speeds.py +0 -0
  96. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/__init__.py +0 -0
  97. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/classes.py +0 -0
  98. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/vram_priority.py +0 -0
  99. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/classes.py +0 -0
  100. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/__init__.py +0 -0
  101. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/commands.py +0 -0
  102. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/__init__.py +0 -0
  103. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/classes.py +0 -0
  104. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/__init__.py +0 -0
  105. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/misc.py +0 -0
  106. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/__init__.py +0 -0
  107. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/area_objects.py +0 -0
  108. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/colours.py +0 -0
  109. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/controller_inputs.py +0 -0
  110. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/coords.py +0 -0
  111. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/directions.py +0 -0
  112. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/intro_title_text.py +0 -0
  113. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/layers.py +0 -0
  114. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_rows.py +0 -0
  115. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_types.py +0 -0
  116. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/scenes.py +0 -0
  117. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/tutorials.py +0 -0
  118. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/__init__.py +0 -0
  119. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/area_object.py +0 -0
  120. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/battlefield.py +0 -0
  121. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/byte_var.py +0 -0
  122. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/colour.py +0 -0
  123. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/controller_input.py +0 -0
  124. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/coord.py +0 -0
  125. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/direction.py +0 -0
  126. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/flag.py +0 -0
  127. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/intro_title_text.py +0 -0
  128. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/layer.py +0 -0
  129. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/packet.py +0 -0
  130. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_row.py +0 -0
  131. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_type.py +0 -0
  132. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/party_character.py +0 -0
  133. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/scene.py +0 -0
  134. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/short_var.py +0 -0
  135. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/tutorial.py +0 -0
  136. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/__init__.py +0 -0
  137. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/classes.py +0 -0
  138. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/__init__.py +0 -0
  139. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/commands.py +0 -0
  140. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/__init__.py +0 -0
  141. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/classes.py +0 -0
  142. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/__init__.py +0 -0
  143. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/misc.py +0 -0
  144. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/__init__.py +0 -0
  145. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/misc.py +0 -0
  146. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/scripts_common/__init__.py +0 -0
  147. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/scripts_common/classes.py +0 -0
  148. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/shops/__init__.py +0 -0
  149. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/shops/classes.py +0 -0
  150. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/__init__.py +0 -0
  151. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/arguments/__init__.py +0 -0
  152. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/arguments/damage_modifiers.py +0 -0
  153. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/arguments/timing_properties.py +0 -0
  154. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/__init__.py +0 -0
  155. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/classes.py +0 -0
  156. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/classes.py +0 -0
  157. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/enums.py +0 -0
  158. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/ids/__init__.py +0 -0
  159. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/spells/ids/misc.py +0 -0
  160. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/__init__.py +0 -0
  161. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/ally_palettes.py +0 -0
  162. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/collection.py +0 -0
  163. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/disassembler.py +0 -0
  164. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/exceptions.py +0 -0
  165. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/ids/__init__.py +0 -0
  166. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/ids/event_palettes.py +0 -0
  167. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/ids/misc.py +0 -0
  168. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/palette.py +0 -0
  169. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/sprites/sprite.py +0 -0
  170. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/world_map_locations/__init__.py +0 -0
  171. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/datatypes/world_map_locations/classes.py +0 -0
  172. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/manage.py +0 -0
  173. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/allyassembler.py +0 -0
  174. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/allydisassembler.py +0 -0
  175. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/animationassembler.py +0 -0
  176. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/animationdisassembler.py +0 -0
  177. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/battleassembler.py +0 -0
  178. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/battledialogassembler.py +0 -0
  179. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/battledialogdisassembler.py +0 -0
  180. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/battledisassembler.py +0 -0
  181. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/bowser_tile_rearranger.py +0 -0
  182. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/comboassembler.py +0 -0
  183. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/combodisassembler.py +0 -0
  184. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/dialogassembler.py +0 -0
  185. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/dialogdisassembler.py +0 -0
  186. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/enemyassembler.py +0 -0
  187. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/enemyattackassembler.py +0 -0
  188. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/enemyattackdisassembler.py +0 -0
  189. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/enemydisassembler.py +0 -0
  190. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/eventassembler.py +0 -0
  191. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/eventconverter.py +0 -0
  192. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/eventidentifieraudit.py +0 -0
  193. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/eventpalettedisassembler.py +0 -0
  194. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/generatesample.py +0 -0
  195. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/graphicsassembler.py +0 -0
  196. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/graphicsdisassembler.py +0 -0
  197. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/input_file_parser.py +0 -0
  198. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/itemassembler.py +0 -0
  199. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/itemdisassembler.py +0 -0
  200. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/legacy/__init__.py +0 -0
  201. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/legacy/docstrings.py +0 -0
  202. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/legacy/eventdisassembler.py +0 -0
  203. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/legacy/eventtables.py +0 -0
  204. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/legacy/objectsequenceassembler.py +0 -0
  205. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencedisassembler.py +0 -0
  206. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencetables.py +0 -0
  207. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/make_seed.py +0 -0
  208. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/move_spell_gfx.py +0 -0
  209. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/npcmodelassembler.py +0 -0
  210. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/npcmodeldisassembler.py +0 -0
  211. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/objectassembler.py +0 -0
  212. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/objectdisassembler.py +0 -0
  213. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/packassembler.py +0 -0
  214. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/packdisassembler.py +0 -0
  215. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/packetassembler.py +0 -0
  216. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/packetdisassembler.py +0 -0
  217. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/palettebytes.py +0 -0
  218. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/partitionanalyzer.py +0 -0
  219. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/roomassembler.py +0 -0
  220. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/roomconverter.py +0 -0
  221. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/roomdisassembler.py +0 -0
  222. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/shopassembler.py +0 -0
  223. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/shopdisassembler.py +0 -0
  224. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/space_reassigner.py +0 -0
  225. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/spellassembler.py +0 -0
  226. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/spelldisassembler.py +0 -0
  227. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/spritepalettedisassembler.py +0 -0
  228. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/unused_gfx_finder.py +0 -0
  229. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover old.py +0 -0
  230. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover.py +0 -0
  231. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/variableparser.py +0 -0
  232. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/worldmaplocationassembler.py +0 -0
  233. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/commands/worldmaplocationdisassembler.py +0 -0
  234. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/management/django/settings.py +0 -0
  235. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/utils/disassembler_common.py +0 -0
  236. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/utils/npcs.py +0 -0
  237. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/utils/number.py +0 -0
  238. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder/utils/strings.py +0 -0
  239. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder.egg-info/dependency_links.txt +0 -0
  240. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder.egg-info/requires.txt +0 -0
  241. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/smrpgpatchbuilder.egg-info/top_level.txt +0 -0
  242. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/tests/animations/test_animationscripts.py +0 -0
  243. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/tests/dialogs/__init__.py +0 -0
  244. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/tests/dialogs/test_formatter.py +0 -0
  245. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/tests/monsters/test_ai.py +0 -0
  246. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/tests/overworld/test_actionscripts.py +0 -0
  247. {smrpgpatchbuilder-6.2.6 → smrpgpatchbuilder-6.2.9}/src/tests/overworld/test_eventscripts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smrpgpatchbuilder
3
- Version: 6.2.6
3
+ Version: 6.2.9
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 = "6.2.6"
7
+ version = "6.2.9"
8
8
  authors = [
9
9
  { name="pidgezero_one", email="s.kischak@gmail.com" },
10
10
  ]
@@ -224,6 +224,12 @@ class RoomCollection:
224
224
  else:
225
225
  unique_npcs[0] = self._force_first_npc
226
226
  reserved_indices.add(0)
227
+ # Index 0 is now occupied. If no force_id NPCs bumped min_table_size,
228
+ # it stays 0 and the allocator below (which seeds next_index_after_forced
229
+ # and available_indices from min_table_size) would hand out index 0 again,
230
+ # overwriting force_first_npc. Reserve at least one slot for it.
231
+ if min_table_size == 0:
232
+ min_table_size = 1
227
233
 
228
234
  # Track which signatures have been placed via force_id
229
235
  sig_to_forced_index: dict[tuple, int] = {}
@@ -62,8 +62,8 @@ SPAL045 = 45
62
62
  SPAL046 = 46
63
63
  SPAL047 = 47
64
64
  SPAL048 = 48
65
- SPAL049_WATER_FIRE_CRYSTAL_3D = 49
66
- SPAL050_WIND_EARTH_CRYSTAL_3D = 50
65
+ SPAL049 = 49
66
+ SPAL050 = 50
67
67
  SPAL051 = 51
68
68
  SPAL052 = 52
69
69
  SPAL053 = 53
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smrpgpatchbuilder
3
- Version: 6.2.6
3
+ Version: 6.2.9
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
@@ -238,6 +238,8 @@ src/smrpgpatchbuilder/utils/strings.py
238
238
  src/tests/animations/test_animationscripts.py
239
239
  src/tests/dialogs/__init__.py
240
240
  src/tests/dialogs/test_formatter.py
241
+ src/tests/levels/__init__.py
242
+ src/tests/levels/test_room_collection.py
241
243
  src/tests/monsters/test_ai.py
242
244
  src/tests/overworld/test_actionscripts.py
243
245
  src/tests/overworld/test_eventscripts.py
File without changes
@@ -0,0 +1,87 @@
1
+ """Tests for RoomCollection NPC table construction."""
2
+
3
+ from smrpgpatchbuilder.datatypes.levels.classes import (
4
+ NPC,
5
+ Room,
6
+ RegularNPC,
7
+ RegularClone,
8
+ )
9
+ from smrpgpatchbuilder.datatypes.levels.room_collection import RoomCollection
10
+
11
+
12
+ FORCE_FIRST_SPRITE = 799
13
+ EMPTY_SPRITE = 1023
14
+ ROOM_NPC_SPRITE = 100
15
+ CLONE_NPC_SPRITE = 101
16
+
17
+
18
+ def _build_rooms(populated_room: Room | None) -> list[Room | None]:
19
+ """Build a 512-length room list with one optionally-populated room.
20
+
21
+ Room 511 must be None per RoomCollection's constructor assertion.
22
+ """
23
+ rooms: list[Room | None] = [None] * 512
24
+ if populated_room is not None:
25
+ rooms[0] = populated_room
26
+ return rooms
27
+
28
+
29
+ def _collection(rooms: list[Room | None]) -> RoomCollection:
30
+ return RoomCollection(
31
+ rooms,
32
+ force_first_npc=NPC(sprite_id=FORCE_FIRST_SPRITE),
33
+ empty_npc=NPC(sprite_id=EMPTY_SPRITE),
34
+ )
35
+
36
+
37
+ def test_force_first_npc_survives_with_no_force_id_npcs():
38
+ """force_first_npc must stay at index 0 even when no room NPC has a force_id.
39
+
40
+ Regression: min_table_size stayed 0 when nothing had a force_id, so the
41
+ allocator seeded next_index_after_forced at 0 and overwrote force_first_npc
42
+ with the first standalone NPC.
43
+ """
44
+ room = Room(objects=[RegularNPC(npc=NPC(sprite_id=ROOM_NPC_SPRITE))])
45
+ collection = _collection(_build_rooms(room))
46
+
47
+ clone_groups = collection._collect_clone_group_requirements()
48
+ npc_table, _ = collection._build_sequential_placement(clone_groups)
49
+
50
+ assert npc_table[0].sprite_id == FORCE_FIRST_SPRITE
51
+ # The standalone room NPC must be placed after index 0, not on top of it.
52
+ assert ROOM_NPC_SPRITE in [npc.sprite_id for npc in npc_table[1:]]
53
+
54
+
55
+ def test_force_first_npc_survives_with_clone_group():
56
+ """A clone group must not be allocated starting at index 0 over force_first_npc.
57
+
58
+ Clone groups use get_contiguous_indices, which (without the fix) would also
59
+ start at index 0 because next_index_after_forced was seeded from a
60
+ min_table_size of 0.
61
+ """
62
+ room = Room(
63
+ objects=[
64
+ RegularNPC(npc=NPC(sprite_id=ROOM_NPC_SPRITE)),
65
+ RegularClone(npc=NPC(sprite_id=CLONE_NPC_SPRITE)),
66
+ ]
67
+ )
68
+ collection = _collection(_build_rooms(room))
69
+
70
+ clone_groups = collection._collect_clone_group_requirements()
71
+ npc_table, _ = collection._build_sequential_placement(clone_groups)
72
+
73
+ assert npc_table[0].sprite_id == FORCE_FIRST_SPRITE
74
+ placed = [npc.sprite_id for npc in npc_table[1:]]
75
+ assert ROOM_NPC_SPRITE in placed
76
+ assert CLONE_NPC_SPRITE in placed
77
+
78
+
79
+ def test_force_first_npc_survives_with_empty_rooms():
80
+ """force_first_npc must still occupy index 0 when no room has any NPC."""
81
+ collection = _collection(_build_rooms(None))
82
+
83
+ clone_groups = collection._collect_clone_group_requirements()
84
+ npc_table, _ = collection._build_sequential_placement(clone_groups)
85
+
86
+ assert len(npc_table) == 1
87
+ assert npc_table[0].sprite_id == FORCE_FIRST_SPRITE