fivefury 0.2.3__tar.gz → 0.2.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.
- {fivefury-0.2.3/fivefury.egg-info → fivefury-0.2.5}/PKG-INFO +125 -9
- fivefury-0.2.3/PKG-INFO → fivefury-0.2.5/README.md +976 -870
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/__init__.py +297 -21
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/assets/yft.py +3 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/bounds/geometry.py +5 -23
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/bounds/model.py +157 -6
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/assets.py +87 -71
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/core.py +3 -2
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/io.py +9 -2
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/scan.py +1 -1
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/views.py +36 -26
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/dlc/model.py +2 -2
- fivefury-0.2.5/fivefury/dlc/xml.py +51 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/gamefile.py +11 -8
- fivefury-0.2.5/fivefury/gtxd.py +227 -0
- fivefury-0.2.5/fivefury/meta/backed.py +57 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/meta/defs.py +29 -1
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/pso/__init__.py +2 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/pso/codec.py +7 -1
- fivefury-0.2.5/fivefury/rbf.py +197 -0
- fivefury-0.2.5/fivefury/vector.py +150 -0
- {fivefury-0.2.3/fivefury/dlc → fivefury-0.2.5/fivefury}/xml.py +107 -17
- fivefury-0.2.5/fivefury/ydd/__init__.py +26 -0
- fivefury-0.2.5/fivefury/ydd/rigging.py +223 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/__init__.py +12 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/prepare.py +10 -32
- fivefury-0.2.5/fivefury/ydr/rigging.py +263 -0
- fivefury-0.2.5/fivefury/yed/__init__.py +37 -0
- fivefury-0.2.5/fivefury/yed/audit.py +97 -0
- fivefury-0.2.5/fivefury/yed/constants.py +17 -0
- fivefury-0.2.5/fivefury/yed/enums.py +77 -0
- fivefury-0.2.5/fivefury/yed/instructions.py +310 -0
- fivefury-0.2.5/fivefury/yed/model.py +618 -0
- fivefury-0.2.5/fivefury/yed/ped.py +72 -0
- fivefury-0.2.5/fivefury/yed/reader.py +200 -0
- fivefury-0.2.5/fivefury/yed/writer.py +192 -0
- fivefury-0.2.5/fivefury/yft/__init__.py +91 -0
- fivefury-0.2.5/fivefury/yft/constants.py +47 -0
- fivefury-0.2.5/fivefury/yft/corpus.py +66 -0
- fivefury-0.2.5/fivefury/yft/drawable_reader.py +48 -0
- fivefury-0.2.5/fivefury/yft/drawables.py +26 -0
- fivefury-0.2.5/fivefury/yft/fields_reader.py +84 -0
- fivefury-0.2.5/fivefury/yft/fragment.py +309 -0
- fivefury-0.2.5/fivefury/yft/io_helpers.py +91 -0
- fivefury-0.2.5/fivefury/yft/model.py +66 -0
- fivefury-0.2.5/fivefury/yft/physics.py +805 -0
- fivefury-0.2.5/fivefury/yft/physics_authoring.py +259 -0
- fivefury-0.2.5/fivefury/yft/physics_reader.py +680 -0
- fivefury-0.2.5/fivefury/yft/physics_writer.py +407 -0
- fivefury-0.2.5/fivefury/yft/pointers.py +66 -0
- fivefury-0.2.5/fivefury/yft/reader.py +175 -0
- fivefury-0.2.5/fivefury/yft/stats.py +20 -0
- fivefury-0.2.5/fivefury/yft/validation.py +331 -0
- fivefury-0.2.5/fivefury/yft/writer.py +406 -0
- fivefury-0.2.5/fivefury/ymap/__init__.py +131 -0
- fivefury-0.2.5/fivefury/ymap/base.py +92 -0
- fivefury-0.2.5/fivefury/ymap/blocks.py +15 -0
- fivefury-0.2.5/fivefury/ymap/cargens.py +126 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ymap/defs.py +4 -7
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ymap/entities.py +1 -1
- fivefury-0.2.3/fivefury/extensions/defs.py → fivefury-0.2.5/fivefury/ymap/extension_defs.py +130 -81
- fivefury-0.2.3/fivefury/extensions/__init__.py → fivefury-0.2.5/fivefury/ymap/extensions.py +163 -61
- fivefury-0.2.5/fivefury/ymap/grass.py +265 -0
- fivefury-0.2.5/fivefury/ymap/io.py +23 -0
- fivefury-0.2.5/fivefury/ymap/lights.py +318 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ymap/model.py +33 -112
- fivefury-0.2.5/fivefury/ymap/occluders.py +273 -0
- fivefury-0.2.5/fivefury/ymap/packing.py +38 -0
- fivefury-0.2.5/fivefury/ymap/surfaces.py +54 -0
- fivefury-0.2.5/fivefury/ymap/timecycle.py +113 -0
- fivefury-0.2.5/fivefury/ymap/utils.py +71 -0
- fivefury-0.2.5/fivefury/ymf/__init__.py +47 -0
- fivefury-0.2.5/fivefury/ymf/builder.py +284 -0
- fivefury-0.2.5/fivefury/ymf/enums.py +45 -0
- fivefury-0.2.5/fivefury/ymf/model.py +440 -0
- fivefury-0.2.5/fivefury/ymf/pso.py +269 -0
- fivefury-0.2.5/fivefury/ymf/resource.py +114 -0
- fivefury-0.2.5/fivefury/ymf/schema.py +119 -0
- fivefury-0.2.5/fivefury/ymf/utils.py +60 -0
- fivefury-0.2.5/fivefury/ymt/__init__.py +328 -0
- fivefury-0.2.5/fivefury/ymt/ped_metadata.py +131 -0
- fivefury-0.2.5/fivefury/ymt/ped_variation.py +227 -0
- fivefury-0.2.5/fivefury/ymt/scenario.py +139 -0
- fivefury-0.2.5/fivefury/ymt/streaming.py +133 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynd/__init__.py +20 -0
- fivefury-0.2.5/fivefury/ynd/heightmaps.py +240 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynd/model.py +109 -3
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytyp/__init__.py +55 -9
- fivefury-0.2.5/fivefury/ytyp/archetypes.py +16 -0
- fivefury-0.2.5/fivefury/ytyp/asset_types.py +20 -0
- fivefury-0.2.3/fivefury/ytyp/archetypes.py → fivefury-0.2.5/fivefury/ytyp/base_archetype.py +4 -55
- fivefury-0.2.5/fivefury/ytyp/extension_defs.py +433 -0
- fivefury-0.2.5/fivefury/ytyp/extensions.py +496 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytyp/helpers.py +2 -1
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytyp/lod.py +2 -7
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytyp/mlo.py +1 -1
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytyp/model.py +8 -6
- fivefury-0.2.5/fivefury/ytyp/timed_archetype.py +52 -0
- fivefury-0.2.3/README.md → fivefury-0.2.5/fivefury.egg-info/PKG-INFO +986 -860
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury.egg-info/SOURCES.txt +68 -2
- {fivefury-0.2.3 → fivefury-0.2.5}/pyproject.toml +1 -1
- fivefury-0.2.5/tests/test_gtxd.py +252 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_meta_rpf_contracts.py +141 -47
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_pso.py +6 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ybn.py +25 -0
- fivefury-0.2.5/tests/test_ydr_rigging.py +70 -0
- fivefury-0.2.5/tests/test_yed.py +233 -0
- fivefury-0.2.5/tests/test_yft.py +412 -0
- fivefury-0.2.5/tests/test_ymf.py +175 -0
- fivefury-0.2.5/tests/test_ymt_ped_variation.py +103 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ynd.py +48 -0
- fivefury-0.2.3/fivefury/ydd/__init__.py +0 -12
- fivefury-0.2.3/fivefury/ymap/__init__.py +0 -76
- fivefury-0.2.3/fivefury/ymap/blocks.py +0 -338
- fivefury-0.2.3/fivefury/ymap/surfaces.py +0 -854
- fivefury-0.2.3/fivefury/ymf/__init__.py +0 -24
- fivefury-0.2.3/fivefury/ymt/__init__.py +0 -24
- {fivefury-0.2.3 → fivefury-0.2.5}/MANIFEST.in +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/_native.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/assets/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/assets/base.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/assets/ydd.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/assets/ydr.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/assets/ypt.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/awc/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/awc/audio.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/awc/constants.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/awc/conversion.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/awc/crypto.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/awc/io.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/awc/structures.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/binary.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/bounds/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/bounds/materials.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/bounds/reader.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/bounds/writer.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/kinds.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cache/paths.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/colors.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/common.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/crypto/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/crypto/backends.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/crypto/keys.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/analysis.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/dsl.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/events.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/flags.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/lights.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/names.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/payloads.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/pso.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/base.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/bindings.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/core.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/event_api.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/io.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/shared.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/subtitles.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/timeline.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/scene/validation.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/schema.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/write.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/cut/xml.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/data/lut.dat +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/data/magic.dat +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/data/ng.dat +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/dlc/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/dlc/enums.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/dlc/highlevel.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/game_target.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/gxt2.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/hashing.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/meta/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/meta/builder.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/meta/read.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/meta/resource.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/meta/utils.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/metahash.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/pso/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/pso/reader.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/pso/schema.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/pso/writer.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rel/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rel/enums.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rel/io.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rel/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/resolver.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/resource.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/resource_textures.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rpf/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rpf/convert.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rpf/entries.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/rpf/utils.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/texture.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ybn/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/cutscene.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/reader.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/sequence_channels.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/sequence_codec.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/sequence_tracks.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/sequences.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ycd/write.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydd/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydd/reader.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydd/writer.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/Shaders.xml +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/ShadersGen9Conversion.xml +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/_helpers.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/assimp.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/build_types.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/builder.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/collision.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/defs.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/gen9.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/gen9_shader_enums.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/gen9_shader_info.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/materials.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/read_joints.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/read_lights.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/read_materials.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/read_skeleton.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/reader.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/shader_enums.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/shader_info.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/shaders.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_buffers.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_drawable.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_geometry.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_joints.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_lights.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_materials.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_models.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ydr/write_skeleton.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ymap/enums.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynd/network.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynd/reader.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynd/regions.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynd/writer.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynv/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynv/assimp.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynv/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynv/reader.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ynv/writer.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytd/__init__.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytd/defs.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytd/model.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytyp/defs.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury/ytyp/flags.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury.egg-info/dependency_links.txt +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury.egg-info/requires.txt +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/fivefury.egg-info/top_level.txt +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/bounds_algorithms.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/bounds_algorithms.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/bounds_python.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/bounds_python.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/bounds_types.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/crypto_magic.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/crypto_magic.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_bindings.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_bindings.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_bounds.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_crypto.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_index.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_module.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_resource.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/py_rpf.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/resource_layout.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/resource_layout.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_archive.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_archive.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_crypto.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_index.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_index.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_read.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_scan.cpp +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/native/rpf_scan.h +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/setup.cfg +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/setup.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_awc.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_cut.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_cut_dsl.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_cut_no_template.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_cut_ycd.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_dlc.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_gxt2.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_hashing.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_high_level_api_consistency.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_rel.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ycd.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ycd_cutscene_builder.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ydd.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ydr.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ydr_builder.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ydr_shaders.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ymt_ymf.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ynv.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ynv_assimp.py +0 -0
- {fivefury-0.2.3 → fivefury-0.2.5}/tests/test_ytyp_flags.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fivefury
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Python library for GTA V asset workflows including YMAP, YTYP, RPF, YTD and GameFileCache utilities.
|
|
5
5
|
Author: Codex
|
|
6
6
|
License-Expression: MIT
|
|
@@ -59,14 +59,14 @@ Support levels:
|
|
|
59
59
|
|
|
60
60
|
| Format | Scope |
|
|
61
61
|
| --- | --- |
|
|
62
|
-
| `YDR` | Drawable resources: materials, shaders, samplers, numeric parameters, drawable models, LODs, render masks, lights, embedded textures, embedded bounds, skeletons, skinning, rigid bone bindings, shader inspection, and skeleton hash recalculation. |
|
|
63
|
-
| `YDD` | Drawable dictionaries with multiple embedded drawables
|
|
62
|
+
| `YDR` | Drawable resources: materials, shaders, samplers, numeric parameters, drawable models, LODs, render masks, lights, embedded textures, embedded bounds, skeletons, skinning, radial weight generation, rigid bone bindings, shader inspection, and skeleton hash recalculation. |
|
|
63
|
+
| `YDD` | Drawable dictionaries with multiple embedded drawables, high-level creation from named `YDR` drawables, and external-skeleton radial rigging helpers for ped components. |
|
|
64
64
|
| `YBN` | Bounds/collisions: primitive bounds, composite bounds, geometry bounds, BVH bounds, octants, material names, material colors, and generated collision chunks from triangle meshes. |
|
|
65
65
|
| `YCD` | Clip dictionaries: parsed metadata, sequence rebuilds, known track types, UV clip bindings, object animation metadata, skeletal tracks, root motion, camera tracks, and facial samples. |
|
|
66
66
|
| `YMAP` | Map metadata: entities, car generators, timecycle modifiers, occluders, content flags, entity flags, LOD lights, distant lights, and typed metadata. |
|
|
67
67
|
| `YTYP` | Archetypes: base/time/MLO archetypes, extensions, rooms, portals, entity sets, typed asset metadata, flags, LOD distances, physics dictionaries, and cutscene prop helpers. |
|
|
68
68
|
| `YTD` | Texture dictionaries: read/write, resource texture payload preservation, cache extraction, and embedded-asset helpers. |
|
|
69
|
-
| `YND` | Path node resources: nodes, links, typed flags/enums, area helpers, automatic area ID calculation, and
|
|
69
|
+
| `YND` | Path node resources: nodes, links, typed flags/enums, area helpers, automatic area ID calculation, network partitioning, and game-aligned junction heightmap generation. |
|
|
70
70
|
| `YNV` | Navmesh resources: sectors, polys, points, portals, typed metadata, validation, and basic Assimp/OBJ partitioning. |
|
|
71
71
|
| `CUT` | Cutscene files: cameras, tracks, events, props, peds, vehicles, lights, high-level scene conversion, `.cuts` script authoring, and `.cut` to `.cuts` export. |
|
|
72
72
|
| `GXT2` | Hashed UTF-8 text tables with binary read/write, CodeWalker-style text import/export, mapping-style helpers, and `GameFileCache` loading. |
|
|
@@ -77,18 +77,20 @@ Support levels:
|
|
|
77
77
|
|
|
78
78
|
| Format | Current behavior |
|
|
79
79
|
| --- | --- |
|
|
80
|
-
| `YFT` |
|
|
80
|
+
| `YFT` | Fragment reading/writing for common, damaged, extra and cloth drawables, including geometry, materials, LOD meshes, bounding sphere metadata, fragment flags, physics LODs, physics groups, physics children, child entity drawables, per-child breaking/inertia data, damping constants, damping archetypes, articulated body metadata, link attachments, group and child event references, editable composite bounds, mass/inertia helpers, glass/cloth/vehicle semantic queries, corpus scanning, validation, declarative physics helpers, geometry summaries and embedded texture dictionaries. |
|
|
81
81
|
| `YPT` | Resource texture dictionaries can be discovered/extracted from particle dictionaries, but full particle authoring is not implemented. |
|
|
82
82
|
| `AWC` | Audio wave containers can be read/written structurally, opened through `GameFileCache`, exported back to WAV for PCM/ADPCM streams, and built from mono or multichannel 16-bit PCM inputs decoded through `miniaudio` (`.wav`, `.mp3`, `.ogg`, `.flac`). Playback metadata lives in `.rel` banks. |
|
|
83
83
|
| `REL` | Audio metadata banks can be read/written structurally, opened through `GameFileCache`, and round-tripped with unknown entries preserved. `dat10.rel` modular synth presets/synths, `dat16.rel` curves, `dat22.rel` categories, and common `dat54.rel` sound graph entries have typed models, including simple AWC-backed sounds, wrappers, sequential/multitrack/streaming child lists, randomized variations, modular synth sounds, automation/MIDI sounds, note maps, variable-curve and conditional routing, directional/kinetic routing, variable blocks, math operations, parameter transforms, fluctuators, external streams, sound sets, sound-set lists, and sound-hash lists. Other REL item families currently stay as raw entries. |
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
84
|
+
| `YED` | Expression dictionaries can be detected, opened through `GameFileCache`, inspected for expressions/tracks/streams/springs/instruction opcodes, edited safely for spring-list cloning, built from scratch for spring dictionaries, and validated before writing. |
|
|
85
|
+
| `YMT` | Generic META-backed read/write plus ped-variation helpers for component enumeration, drawable file stems, and cloth ownership flags. |
|
|
86
|
+
| `YMF`, `YWR`, `YVR` | Recognized/indexed by `GameFileCache` and RPF tooling, but no complete dedicated high-level reader/writer is exposed. |
|
|
87
|
+
| `GTXD` metadata | XML read/write for parent texture dictionary relationships, cache texture lookup, and parent-chain resolution. It is metadata rather than a standalone binary asset format like `.gxt2`. |
|
|
86
88
|
|
|
87
89
|
### Not Implemented Yet
|
|
88
90
|
|
|
89
91
|
| Format family | Notes |
|
|
90
92
|
| --- | --- |
|
|
91
|
-
| `
|
|
93
|
+
| `YFD`, `YPDB`, `MRF` | Known game file types, currently no dedicated high-level support. |
|
|
92
94
|
| Heightmap and watermap resources | Recognized as game concepts, but no complete public reader/writer yet. |
|
|
93
95
|
| Vehicle/ped audio REL specializations | REL files can be loaded structurally, but specialized semantic authoring beyond the initial synth/curve/category/sound subset is not currently exposed. |
|
|
94
96
|
|
|
@@ -402,9 +404,44 @@ FiveFury exposes:
|
|
|
402
404
|
- editable material shaders, samplers, and numeric parameters
|
|
403
405
|
- embedded texture helpers through `add_embedded_texture(...)` and `remove_embedded_texture(...)`
|
|
404
406
|
- embedded collision helpers through `set_bound(...)` and `clear_bound()`
|
|
405
|
-
- skeleton helpers for bones, skinning, rigid bone bindings, and explicit skeleton hash recalculation
|
|
407
|
+
- skeleton helpers for bones, skinning, radial weight generation, rigid bone bindings, and explicit skeleton hash recalculation
|
|
406
408
|
- `build()` / `validate()` helpers for authoring flows
|
|
407
409
|
|
|
410
|
+
### Generate radial skin weights
|
|
411
|
+
|
|
412
|
+
```python
|
|
413
|
+
from fivefury import RadialBoneRigRule, read_ydd, rig_ydd_to_bones_radially
|
|
414
|
+
|
|
415
|
+
body = read_ydd("tdev_xyuls^lowr_000_u.ydd")
|
|
416
|
+
skeleton_source = read_ydd("tdev_xyuls^head_000_u.ydd")
|
|
417
|
+
|
|
418
|
+
report = rig_ydd_to_bones_radially(
|
|
419
|
+
body,
|
|
420
|
+
[
|
|
421
|
+
RadialBoneRigRule("SM_R_BackSkirtRoll", radius=0.16, strength=0.65),
|
|
422
|
+
RadialBoneRigRule("SM_L_BackSkirtRoll", radius=0.16, strength=0.65),
|
|
423
|
+
],
|
|
424
|
+
skeleton_source=skeleton_source,
|
|
425
|
+
)
|
|
426
|
+
|
|
427
|
+
print(report.vertices)
|
|
428
|
+
body.save("tdev_xyuls^lowr_000_u_rigged.ydd")
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
For body folders where `head_000_u.ydd` carries the skeleton and `uppr/lowr` carry the meshes, use the convenience pass:
|
|
432
|
+
|
|
433
|
+
```python
|
|
434
|
+
from fivefury import rig_body_folder_jiggle_bones
|
|
435
|
+
|
|
436
|
+
report = rig_body_folder_jiggle_bones(
|
|
437
|
+
r"C:\mods\body",
|
|
438
|
+
output_folder=r"C:\mods\body_rigged",
|
|
439
|
+
)
|
|
440
|
+
print(report.saved_files)
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
The helper preserves existing skinning and reuses ped-component palettes that already store external skeleton indices. It only adds or adjusts vertex influences around the requested jiggle bones; it does not generate cloth simulation data by itself.
|
|
444
|
+
|
|
408
445
|
### Skin a YDR model declaratively
|
|
409
446
|
|
|
410
447
|
```python
|
|
@@ -661,6 +698,25 @@ for ynd in YndNetwork.from_nodes([node_a, node_b]).build_ynds():
|
|
|
661
698
|
|
|
662
699
|
`YndNetwork` computes each node's `area_id` from its world position, assigns local node IDs per area, and resolves links by `target_key`. Use `Ynd.from_nodes(...)` directly when you already know all nodes belong to one area.
|
|
663
700
|
|
|
701
|
+
### Generate a junction heightmap
|
|
702
|
+
|
|
703
|
+
```python
|
|
704
|
+
from fivefury import YndNode
|
|
705
|
+
|
|
706
|
+
node = YndNode(position=(0.0, 0.0, 0.0))
|
|
707
|
+
node.ensure_junction_heightmap(
|
|
708
|
+
triangles=[
|
|
709
|
+
((-1.0, -1.0, 0.0), (1.0, -1.0, 0.25), (-1.0, 1.0, 0.25)),
|
|
710
|
+
((1.0, -1.0, 0.25), (1.0, 1.0, 0.5), (-1.0, 1.0, 0.25)),
|
|
711
|
+
],
|
|
712
|
+
bounds=((-1.0, -1.0), (1.0, 1.0)),
|
|
713
|
+
dim_x=2,
|
|
714
|
+
dim_y=2,
|
|
715
|
+
)
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
YND junction heightmaps follow the runtime layout used by GTA V virtual junctions: `position` stores the minimum X/Y sample origin, samples are row-major, the default grid spacing is `2.0` world units, and byte values decode as `min_z + byte * ((max_z - min_z) / 256.0)`.
|
|
719
|
+
|
|
664
720
|
## YNV
|
|
665
721
|
|
|
666
722
|
### Read and validate a YNV
|
|
@@ -706,6 +762,66 @@ print(paths[0].name)
|
|
|
706
762
|
|
|
707
763
|
This is intentionally a basic geometry partitioner, not a full navgen pipeline. It does not yet generate advanced navigation semantics such as cover, climb/drop adjacencies, portals, or point placement.
|
|
708
764
|
|
|
765
|
+
## YED
|
|
766
|
+
|
|
767
|
+
`YED` files are expression dictionaries used by peds through expression set metadata. FiveFury exposes expressions, typed tracks, streams, semantic instruction operands, variables, and spring blocks:
|
|
768
|
+
|
|
769
|
+
```python
|
|
770
|
+
from fivefury import YedTrackFormat, read_yed
|
|
771
|
+
|
|
772
|
+
yed = read_yed("ambient.yed")
|
|
773
|
+
breasts = yed.require_expression("breasts")
|
|
774
|
+
|
|
775
|
+
print(breasts.spring_bone_ids)
|
|
776
|
+
print([track.format for track in breasts.tracks])
|
|
777
|
+
for stream in breasts.streams:
|
|
778
|
+
for instruction in stream.instructions:
|
|
779
|
+
print(instruction.name, instruction.operands)
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
Small spring dictionaries can be built declaratively:
|
|
783
|
+
|
|
784
|
+
```python
|
|
785
|
+
from fivefury import YedTrackFormat, create_yed, save_yed
|
|
786
|
+
|
|
787
|
+
yed = create_yed("breasts")
|
|
788
|
+
expr = yed.require_expression("breasts")
|
|
789
|
+
expr.ensure_spring(0xFC8E)
|
|
790
|
+
expr.ensure_spring(0x885F)
|
|
791
|
+
expr.ensure_track(0xFC8E, format=YedTrackFormat.VECTOR3)
|
|
792
|
+
|
|
793
|
+
yed.validate()
|
|
794
|
+
save_yed(yed, "ambient_custom.yed")
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
Existing spring descriptions can be cloned when a custom skeleton keeps the same physics shape but adds new bone tags:
|
|
798
|
+
|
|
799
|
+
```python
|
|
800
|
+
yed.clone_breast_springs_to_glutes(
|
|
801
|
+
left_breast=0xFC8E,
|
|
802
|
+
right_breast=0x885F,
|
|
803
|
+
left_glute=0x40B2,
|
|
804
|
+
right_glute=0xC141,
|
|
805
|
+
)
|
|
806
|
+
```
|
|
807
|
+
|
|
808
|
+
Complex expression streams are currently preserved and decoded at opcode level. Full semantic editing of every stream instruction is intentionally more conservative because those bytecode operands need to stay 1:1 with the game VM.
|
|
809
|
+
Streams can also be authored with semantic instructions for the supported VM layouts:
|
|
810
|
+
|
|
811
|
+
```python
|
|
812
|
+
from fivefury import YedInstruction, YedInstructionType, YedStream
|
|
813
|
+
|
|
814
|
+
expr = yed.ensure_expression("face")
|
|
815
|
+
expr.streams.append(YedStream.raw_stream("main", depth=2, data3=b""))
|
|
816
|
+
expr.streams[0].instructions = [
|
|
817
|
+
YedInstruction(YedInstructionType.PUSH_FLOAT, operands={"value": 1.0}),
|
|
818
|
+
YedInstruction(YedInstructionType.PUSH_VECTOR, operands={"value": (1.0, 0.0, 0.0, 0.0)}),
|
|
819
|
+
YedInstruction(YedInstructionType.END),
|
|
820
|
+
]
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
The supported semantic layouts currently cover empty stack/vector ops, float/vector constants, bone track ops, variables, jumps, springs, look-at, and blend op payloads. Unknown or malformed bytecode is still preserved from existing files, but validation reports it before semantic rebuilds.
|
|
824
|
+
|
|
709
825
|
## GameFileCache
|
|
710
826
|
|
|
711
827
|
### Scan a Game Installation
|