smrpgpatchbuilder 7.1.1__tar.gz → 7.1.5__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.
- {smrpgpatchbuilder-7.1.1/src/smrpgpatchbuilder.egg-info → smrpgpatchbuilder-7.1.5}/PKG-INFO +1 -1
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/pyproject.toml +1 -1
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/formatter.py +50 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/items/classes.py +1 -1
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5/src/smrpgpatchbuilder.egg-info}/PKG-INFO +1 -1
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/dialogs/test_formatter.py +72 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/LICENSE +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/MANIFEST.in +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/README.md +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/setup.cfg +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/allies/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/allies/ally.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/allies/ally_collection.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/battle_targets.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/bonus_messages.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/flash_colours.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/layer_priority_type.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/mask_effects.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/message_type.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/origins.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/pause_until.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/shift_type.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/arguments/wave_effect.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/commands.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/commands/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/ids/monster_entrances.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battle_animation_scripts/types.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/battle_dialog_collection.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/enums.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/formations_packs/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/music.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/characters/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/characters/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/characters/constants.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/characters/enums.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/ids/dialog_bank_ids.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/ids/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/utils.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemies/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemies/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemies/constants.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemies/enums.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemy_attacks/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemy_attacks/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemy_attacks/constants.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/graphics/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/graphics/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/items/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/items/constants.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/items/encoding.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/items/enums.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/levels/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/levels/room_collection.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/minecart/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/minecart/_vanilla_block.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/minecart/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/minecart/constants.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/minecart/lz3.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/command_types.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/targets.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/arguments/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/commands.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/commands/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/monster_scripts/types.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/numbers/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/numbers/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/sequence_speeds.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/arguments/vram_priority.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/commands.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/commands/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/action_scripts/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/area_objects.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/colours.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/controller_inputs.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/coords.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/directions.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/intro_title_text.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/layers.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_rows.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/palette_types.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/scenes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/tutorials.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/area_object.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/battlefield.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/byte_var.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/colour.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/controller_input.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/coord.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/direction.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/flag.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/intro_title_text.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/layer.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/packet.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_row.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/palette_type.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/party_character.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/scene.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/short_var.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/arguments/types/tutorial.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/commands.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/commands/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/event_scripts/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/overworld_scripts/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/scripts_common/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/scripts_common/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/shops/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/shops/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/arguments/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/arguments/damage_modifiers.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/arguments/timing_properties.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/arguments/types/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/enums.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/ally_palettes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/collection.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/disassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/exceptions.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/ids/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/ids/event_palettes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/ids/misc.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/ids/sprite_palettes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/palette.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/sprites/sprite.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/world_map_locations/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/world_map_locations/classes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/manage.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/allyassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/allydisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/animationassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/animationdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/battleassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/battledialogassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/battledialogdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/battledisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/bowser_tile_rearranger.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/comboassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/combodisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/dialogassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/dialogdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/enemyassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/enemyattackassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/enemyattackdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/enemydisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/eventassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/eventconverter.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/eventidentifieraudit.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/eventpalettedisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/generatesample.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/graphicsassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/graphicsdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/input_file_parser.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/itemassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/itemdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/legacy/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/legacy/docstrings.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/legacy/eventdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/legacy/eventtables.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/legacy/objectsequenceassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencedisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/legacy/objectsequencetables.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/make_seed.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/move_spell_gfx.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/npcmodelassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/npcmodeldisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/objectassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/objectdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/packassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/packdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/packetassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/packetdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/palettebytes.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/partitionanalyzer.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/roomassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/roomconverter.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/roomdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/shopassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/shopdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/space_reassigner.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/spellassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/spelldisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/spritepalettedisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/unused_gfx_finder.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover old.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/unused_gfx_remover.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/variableparser.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/worldmaplocationassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/commands/worldmaplocationdisassembler.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/management/django/settings.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/utils/disassembler_common.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/utils/npcs.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/utils/number.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/utils/strings.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder.egg-info/SOURCES.txt +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder.egg-info/dependency_links.txt +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder.egg-info/requires.txt +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder.egg-info/top_level.txt +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/animations/test_animationscripts.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/dialogs/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/levels/__init__.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/levels/test_room_collection.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/minecart/test_minecart.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/monsters/test_ai.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/overworld/test_actionscripts.py +0 -0
- {smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/tests/overworld/test_eventscripts.py +0 -0
|
@@ -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 == " ":
|
|
@@ -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))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/allies/ally.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/enums.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/battles/music.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/dialogs/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/enemies/enums.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/items/enums.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/minecart/lz3.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/shops/classes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{smrpgpatchbuilder-7.1.1 → smrpgpatchbuilder-7.1.5}/src/smrpgpatchbuilder/datatypes/spells/enums.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|