ff9mapkit 1.0.0b5__tar.gz → 1.0.0b6__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.
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/PKG-INFO +1 -1
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/__init__.py +1 -1
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/jobs.py +7 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/builddoc.py +41 -4
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/importdoc.py +6 -2
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit.egg-info/PKG-INFO +1 -1
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/pyproject.toml +1 -1
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_setup.py +9 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/LICENSE +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/README.md +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/__main__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_animdb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_animdb_all.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_fieldtable.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_fieldtext.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_held_poses.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_itemdb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_modeldb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_narrowmap_data.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_npcparams.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_regen_animdb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_regen_animdb_all.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_regen_fieldtable.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_regen_fieldtext.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_regen_modeldb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_regen_npcparams.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_regen_scenedb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/_scenedb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/abilities.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/animations.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/archetypes.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/areatitle.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/abilityfeatures.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/actiondelta.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/aiauthor.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/ailint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/aipatch.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/battleai.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/battlecsv.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/battlepatch.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/build.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/camera_codec.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/camera_data.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/characterdelta.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/event_data.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/extract.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/fbx.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/reskin.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/scene_codec.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/scene_data.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/scenelint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/seqasm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/seqauthor.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/seqcodec.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/seqdis.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle/seqpatch.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/battle_bgm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/binutils.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/build.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/campaign.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/catalog.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/chain.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/cli.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/config.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/areatitle.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/ate.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/camera.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/chest.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/choice.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/conductor.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/cutscene.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/encounter.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/entry_settle.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/equipment.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/event.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/gateway.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/inventory.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/itemdata.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/itemtext.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/jump.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/ladder.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/movement.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/music.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/npc.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/object.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/onentry.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/party.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/pathfind.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/platform.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/player.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/prop.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/region.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/reinit.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/savepoint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/shop.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/sps_trigger.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/startup.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/synthesis.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/text.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/textcarry.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/verbatim.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/content/walkmesh_hotfix.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/_regen_provenance.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/blank.es.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/blank.fr.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/blank.gr.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/blank.it.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/blank.jp.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/blank.uk.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/blank.us.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/manifest.json +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/provenance/region_template.patch +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/reference_arcs.toml +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/data/region_catalog.toml +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/deploystack.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/dialogue.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/_exprtable.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/_membertable.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/_optables.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/_regen_optables.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/cmdasm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/disasm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/edit.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/exprasm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/model.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eb/opcodes.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eblint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/app.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/battle_forms.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/breadcrumb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/dialogs.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/feedback.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/forms.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/graphview.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/model.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/picker.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/editor/theme.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/eventscan.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/extract.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/flags.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/forkreport.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/hub.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/idgated.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/infohub.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/items.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/itemstats.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/journey.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/keyitems.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/logic_add.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/logic_edit.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/logic_map.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/memoria.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/pack.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/playerswap.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/prop_archetypes.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/provision.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/refarc.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/save.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/save_items.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/arena.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/bgart.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/bgi.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/bgs.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/bgx.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/cam.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/guide.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/paint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/scene/placeholder.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sjbinary.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/author.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/catalog.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/codec.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/edit.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/lint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/render.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/templates.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/sps/texture.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/walkmesh_hotfixes.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/__init__.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/battledoc.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/forms_qt.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/mapview.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/palette.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/savedoc.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/shell.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/style.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit/workspace/tuningdialog.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit.egg-info/SOURCES.txt +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit.egg-info/dependency_links.txt +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit.egg-info/entry_points.txt +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit.egg-info/requires.txt +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/ff9mapkit.egg-info/top_level.txt +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/setup.cfg +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_abilities.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_abilityfeatures.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_actiondelta.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_ai_phase_insert.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_ai_phase_insert_adversary.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_aiauthor.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_ailint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_aipatch.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_animations.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_archetypes.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_areatitle.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_arming.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_ate.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battle.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battle_bgm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battle_forms.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battle_scene_codec.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battle_seq.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battleai.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battlecsv.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_battlepatch.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_bgart.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_bgs.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_build.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_cameras.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_campaign.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_capstone.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_carry_text_lint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_catalog.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_chain.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_characterdelta.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_choice.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_cli_entry.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_cmdasm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_cmdasm_relocate.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_content.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_deploy_campaign.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_deploystack.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_dialogue.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_eb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_eblint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_app.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_breadcrumb.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_feedback.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_forms.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_integration.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_jobs.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_model.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_editor_theme.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_entry_settle.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_eventscan.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_export.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_exprasm.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_extract_area.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_find_field.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_flags.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_forkreport.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_gateway_advance.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_graphview.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_hub_gen.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_idgated.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_import_borrow.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_infohub.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_itemdata.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_items.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_itemstats.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_itemtext.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_journey.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_journey_merge.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_jump.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_ladder.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_lint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_logic_add.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_logic_edit.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_logic_map.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_movement.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_npc_model.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_npc_verbatim.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_npcparams.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_object_graft.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_occlusion.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_on_entry.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_pack.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_paint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_party.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_platform.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_player_graft.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_playerswap.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_prop_archetypes.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_provision.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_refarc.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_repaint_native.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_reskin.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_save.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_save_items.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_savepoint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_scene.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_scenelint.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_scroll.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_shared_text_block.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_shop.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_showcase.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_sjbinary.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_spawn.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_sps.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_startstate.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_startup.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_synthesis.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_text.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_textcarry.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_verbatim.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_walkmesh_hotfix.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_workspace_style.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_world_hub.py +0 -0
- {ff9mapkit-1.0.0b5 → ff9mapkit-1.0.0b6}/tests/test_yaw_movement.py +0 -0
|
@@ -15,4 +15,4 @@ Public surface is organized as:
|
|
|
15
15
|
ff9mapkit.battle — the battle.toml -> custom battle-background (BBG) builder (fork/edit/build a 3D battle map)
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
-
__version__ = "1.0.
|
|
18
|
+
__version__ = "1.0.0b6" # keep in lockstep with [project] version in pyproject.toml
|
|
@@ -80,6 +80,13 @@ def detect_deploy_target(repo_root):
|
|
|
80
80
|
return mod, fid
|
|
81
81
|
|
|
82
82
|
|
|
83
|
+
def has_deploy_tools(repo_root) -> bool:
|
|
84
|
+
"""True if the deploy SCRIPTS (``tools/deploy_field.py`` etc.) are present -- i.e. this is a repo checkout,
|
|
85
|
+
not an installed wheel (the wheel ships no ``tools/``). The Workspace uses it to hide the dev-only deploy
|
|
86
|
+
paths (test-slot / campaign / journey / battle / reverts) for an installed copy."""
|
|
87
|
+
return (Path(repo_root) / "tools" / "deploy_field.py").is_file()
|
|
88
|
+
|
|
89
|
+
|
|
83
90
|
def detect_deployed_fields(mod_folder):
|
|
84
91
|
"""``[(id, name), ...]`` of the FieldScene lines in the worktree mod folder's DictionaryPatch -- the
|
|
85
92
|
fields whose encounter a battle-mint can repoint (the valid 'trigger field' choices)."""
|
|
@@ -32,6 +32,10 @@ class BuildDoc(QWidget):
|
|
|
32
32
|
self.pal = pal
|
|
33
33
|
self.repo = Path(repo_root)
|
|
34
34
|
self.kit = self.repo / "ff9mapkit" # `-m ff9mapkit build` cwd (local pkg shadows)
|
|
35
|
+
self.kit_cwd = self.kit if self.kit.is_dir() else None # None -> run_job falls back to KIT (always valid)
|
|
36
|
+
# A repo checkout has the deploy scripts at <repo>/tools/; an installed copy (pip/uv/.exe) does NOT,
|
|
37
|
+
# so the test-slot / campaign / journey DEPLOYS (+ the F6 loop) are unavailable there. `build` works either way.
|
|
38
|
+
self.has_tools = jobs.has_deploy_tools(self.repo)
|
|
35
39
|
self._run = run
|
|
36
40
|
self._problems = problems
|
|
37
41
|
self.kind = "field"
|
|
@@ -102,7 +106,7 @@ class BuildDoc(QWidget):
|
|
|
102
106
|
tid = self.worktree_id or 4003
|
|
103
107
|
self.rb_test = QRadioButton(f"Test slot {tid} — quick + reversible; play via F6 → Warp"
|
|
104
108
|
+ (" (or New Game → hut door)" if tid == 4003 else ""))
|
|
105
|
-
self.rb_test.setChecked(
|
|
109
|
+
self.rb_test.setChecked(self.has_tools) # installed copy: no F6 dev engine -> default to Install to game
|
|
106
110
|
self.rb_game = QRadioButton(f"Install to game (shipping mod folder): {self.game_mod}"
|
|
107
111
|
if self.game_mod else "Install to game — (game install not found)")
|
|
108
112
|
if not self.game_mod:
|
|
@@ -126,6 +130,10 @@ class BuildDoc(QWidget):
|
|
|
126
130
|
self.dest.setWordWrap(True)
|
|
127
131
|
self.dest.setStyleSheet(f"color:{self.pal['accent']};")
|
|
128
132
|
gv.addWidget(self.dest)
|
|
133
|
+
if not self.has_tools: # installed: no test-slot/F6 -> default to Install to game / Build only
|
|
134
|
+
self.rb_test.setEnabled(False)
|
|
135
|
+
self.rb_test.setText(self.rb_test.text() + " (dev repo only)")
|
|
136
|
+
(self.rb_game if self.game_mod else self.rb_other).setChecked(True) # safe now: self.dest exists
|
|
129
137
|
self.field_box = box
|
|
130
138
|
return box
|
|
131
139
|
|
|
@@ -375,6 +383,21 @@ class BuildDoc(QWidget):
|
|
|
375
383
|
def _info(self, title, text):
|
|
376
384
|
QMessageBox.information(self, title, text)
|
|
377
385
|
|
|
386
|
+
def _require_tools(self, what):
|
|
387
|
+
"""Installed (non-repo) copies don't ship the deploy SCRIPTS (tools/). Show a clear, actionable
|
|
388
|
+
message instead of a cryptic 'no such file' and return False; True when the repo tools are present."""
|
|
389
|
+
if self.has_tools:
|
|
390
|
+
return True
|
|
391
|
+
self._warn(
|
|
392
|
+
f"{what} needs the source repo",
|
|
393
|
+
f"'{what}' runs ff9mapkit's development deploy scripts (the repo's tools/), which aren't part of "
|
|
394
|
+
"an installed copy.\n\n"
|
|
395
|
+
"To get a custom field into your game from an installed ff9mapkit:\n"
|
|
396
|
+
" - use Build to -> 'Install to game' (it writes the mod into your FF9 folder; Memoria detects\n"
|
|
397
|
+
" it automatically), then reach it via a [[gateway]] from an early field or by wiring New Game.\n\n"
|
|
398
|
+
"(The test-slot + F6 loop and reversible campaign/journey deploys are a dev-repo workflow.)")
|
|
399
|
+
return False
|
|
400
|
+
|
|
378
401
|
def _picked(self):
|
|
379
402
|
f = self.path.text().strip().strip('"')
|
|
380
403
|
if not f or not Path(f).is_file():
|
|
@@ -463,6 +486,8 @@ class BuildDoc(QWidget):
|
|
|
463
486
|
|
|
464
487
|
def _go_field(self, field):
|
|
465
488
|
if self.rb_test.isChecked():
|
|
489
|
+
if not self._require_tools("Deploy to test slot"):
|
|
490
|
+
return
|
|
466
491
|
tid = self.worktree_id or 4003
|
|
467
492
|
reach = ("New Game → walk to the hut door (or F6 → Warp)" if tid == 4003
|
|
468
493
|
else f"F6 → Warp to field {tid}")
|
|
@@ -477,20 +502,22 @@ class BuildDoc(QWidget):
|
|
|
477
502
|
if self._confirm("Install to game",
|
|
478
503
|
f"Build this field into the game mod folder?\n\n{self.game_mod}\n\n"
|
|
479
504
|
"Writes the field at its real id (may overwrite a field with the same id)."):
|
|
480
|
-
self._stream(jobs.build_argv(field, str(self.game_mod)), cwd=self.
|
|
505
|
+
self._stream(jobs.build_argv(field, str(self.game_mod)), cwd=self.kit_cwd,
|
|
481
506
|
subject="Install to game", ok_headline=f"Built into {self.game_mod}")
|
|
482
507
|
else:
|
|
483
508
|
out = self.other.text().strip()
|
|
484
509
|
if not out:
|
|
485
510
|
return self._warn("No folder", "Pick an output folder.")
|
|
486
|
-
self._stream(jobs.build_argv(field, out), cwd=self.
|
|
511
|
+
self._stream(jobs.build_argv(field, out), cwd=self.kit_cwd, subject="Build",
|
|
487
512
|
ok_headline=f"Built into {out}")
|
|
488
513
|
|
|
489
514
|
def _go_campaign(self, path):
|
|
490
515
|
if self.rb_camp_build.isChecked():
|
|
491
|
-
self._stream(jobs.build_campaign_argv(path), cwd=self.
|
|
516
|
+
self._stream(jobs.build_campaign_argv(path), cwd=self.kit_cwd, subject="Build campaign",
|
|
492
517
|
ok_headline=f"Built campaign {self.plan.name}")
|
|
493
518
|
return
|
|
519
|
+
if not self._require_tools("Deploy campaign"):
|
|
520
|
+
return
|
|
494
521
|
wire = self.wire_newgame.isChecked()
|
|
495
522
|
route = ("It also wires New Game to enter the chain (experimental)." if wire
|
|
496
523
|
else "Reach each screen in-game via F6 → Warp.")
|
|
@@ -505,6 +532,8 @@ class BuildDoc(QWidget):
|
|
|
505
532
|
ok_next=f"Relaunch once (new DictionaryPatch), then F6 → Warp → {entry} to walk the chain.")
|
|
506
533
|
|
|
507
534
|
def _go_journey(self, path):
|
|
535
|
+
if not self._require_tools("Deploy journey"):
|
|
536
|
+
return
|
|
508
537
|
if self.rb_jour_preview.isChecked(): # dry-run: print the playbook, no game writes -> no confirm
|
|
509
538
|
self._stream(jobs.deploy_journey_argv(self.repo, path), cwd=self.repo,
|
|
510
539
|
subject="Journey deploy playbook (dry-run)",
|
|
@@ -550,6 +579,8 @@ class BuildDoc(QWidget):
|
|
|
550
579
|
ok_next=stackmsg)
|
|
551
580
|
|
|
552
581
|
def _go_battle(self, battle):
|
|
582
|
+
if not self._require_tools("Deploy battle map"):
|
|
583
|
+
return
|
|
553
584
|
trig = self.trigger.text().strip()
|
|
554
585
|
if trig and not trig.isdigit():
|
|
555
586
|
return self._warn("Bad trigger field", "Trigger field must be a field id number (or blank).")
|
|
@@ -566,6 +597,8 @@ class BuildDoc(QWidget):
|
|
|
566
597
|
|
|
567
598
|
# ------------------------------------------------------------------ New Game entry (hub-less)
|
|
568
599
|
def on_set_newgame(self):
|
|
600
|
+
if not self._require_tools("Set New Game entry"):
|
|
601
|
+
return
|
|
569
602
|
fid = self.newgame_id.text().strip()
|
|
570
603
|
if not fid.isdigit():
|
|
571
604
|
return self._warn("Bad field id", "Enter the numeric field id New Game should land on "
|
|
@@ -580,6 +613,8 @@ class BuildDoc(QWidget):
|
|
|
580
613
|
ok_next="Relaunch the game, then New Game. Undo with 'Revert New Game'.")
|
|
581
614
|
|
|
582
615
|
def on_revert_newgame(self):
|
|
616
|
+
if not self._require_tools("Revert New Game"):
|
|
617
|
+
return
|
|
583
618
|
argv = jobs.revert_newgame_argv(self.repo) # most-recent New-Game revert (from-stock OR retarget)
|
|
584
619
|
if argv is None or not Path(argv[-1]).exists():
|
|
585
620
|
return self._info("Nothing to revert", "No New-Game change to undo yet.")
|
|
@@ -590,6 +625,8 @@ class BuildDoc(QWidget):
|
|
|
590
625
|
|
|
591
626
|
# ------------------------------------------------------------------ Revert
|
|
592
627
|
def on_revert(self):
|
|
628
|
+
if not self._require_tools("Revert"):
|
|
629
|
+
return
|
|
593
630
|
if self.kind == "battle":
|
|
594
631
|
argv, what = jobs.revert_battle_argv(self.repo), "battle"
|
|
595
632
|
elif self.kind == "campaign":
|
|
@@ -30,6 +30,10 @@ class ImportDoc(QWidget):
|
|
|
30
30
|
super().__init__()
|
|
31
31
|
self.pal = pal
|
|
32
32
|
self.kit = Path(kit_root) # `-m ff9mapkit` cwd (this worktree's package)
|
|
33
|
+
# Default output base: the repo parent for a checkout; an installed copy's package dir is inside a
|
|
34
|
+
# venv, so write forked projects to a discoverable user folder instead (not buried in site-packages).
|
|
35
|
+
self.proj_base = (self.kit.parent if (self.kit / "pyproject.toml").is_file()
|
|
36
|
+
else Path.home() / "Dream World IX")
|
|
33
37
|
self._run = run
|
|
34
38
|
self._on_forked = on_forked # called with the output DIR on a clean fork -> shell opens it
|
|
35
39
|
# The tab body SCROLLS: this view stacks five tall group boxes, so a short window would otherwise
|
|
@@ -152,7 +156,7 @@ class ImportDoc(QWidget):
|
|
|
152
156
|
|
|
153
157
|
out = QHBoxLayout()
|
|
154
158
|
out.addWidget(QLabel("Write to:"))
|
|
155
|
-
self.out = QLineEdit(str(self.
|
|
159
|
+
self.out = QLineEdit(str(self.proj_base / "imported"))
|
|
156
160
|
browse = QPushButton("Browse…")
|
|
157
161
|
browse.clicked.connect(self.browse_out)
|
|
158
162
|
out.addWidget(self.out, 1)
|
|
@@ -269,7 +273,7 @@ class ImportDoc(QWidget):
|
|
|
269
273
|
v.addWidget(swap_hint)
|
|
270
274
|
out = QHBoxLayout()
|
|
271
275
|
out.addWidget(QLabel("Write campaign to:"))
|
|
272
|
-
self.rg_out = QLineEdit(str(self.
|
|
276
|
+
self.rg_out = QLineEdit(str(self.proj_base / "campaign"))
|
|
273
277
|
rbrowse = QPushButton("Browse…")
|
|
274
278
|
rbrowse.clicked.connect(self.browse_region_out)
|
|
275
279
|
out.addWidget(self.rg_out, 1)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ff9mapkit"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.0b6"
|
|
8
8
|
description = "Author novel custom field maps for Final Fantasy IX (Memoria engine) from a declarative TOML project file."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11" # tomllib is stdlib from 3.11
|
|
@@ -173,3 +173,12 @@ def test_parse_vdf_new_schema():
|
|
|
173
173
|
def test_parse_vdf_old_schema():
|
|
174
174
|
text = '"LibraryFolders"\n{\n "1" "E:\\\\Games\\\\Steam"\n "2" "F:\\\\Steam"\n}\n'
|
|
175
175
|
assert config._parse_vdf_library_paths(text) == [r"E:\Games\Steam", r"F:\Steam"]
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
# ---- installed vs repo: the GUI deploy-tools gate (PySide6-free; the Qt shell is covered by --smoke) ----
|
|
179
|
+
def test_has_deploy_tools(tmp_path):
|
|
180
|
+
from ff9mapkit.editor import jobs
|
|
181
|
+
assert jobs.has_deploy_tools(tmp_path) is False # installed-like: no tools/ in the wheel
|
|
182
|
+
(tmp_path / "tools").mkdir()
|
|
183
|
+
(tmp_path / "tools" / "deploy_field.py").write_text("", encoding="utf-8")
|
|
184
|
+
assert jobs.has_deploy_tools(tmp_path) is True # repo checkout
|
|
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
|
|
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
|
|
File without changes
|