Skip to content

[OoT] Add support for importing/exporting SkinLimbs - #720

Open
SlimyGooblin wants to merge 6 commits into
Fast-64:mainfrom
SlimyGooblin:main
Open

[OoT] Add support for importing/exporting SkinLimbs#720
SlimyGooblin wants to merge 6 commits into
Fast-64:mainfrom
SlimyGooblin:main

Conversation

@SlimyGooblin

Copy link
Copy Markdown

This PR adds support for importing/exporting to C the limbs and meshes used by Epona and other horses in OoT
There's nothing particularly special about how OoT handles smooth skinning so imports and exports work by just using an armature modifier
Currently the exporter is set up to export any mesh that has multiple weights per vertex in the format used by skinlimbs

To test out the importer you can change Import Skeleton settings to:

  • Skeleton: gEponaSkel
  • Object: object_horse
  • Overlay: ovl_En_Horse

@Dragorn421 Dragorn421 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR! this has been attempted before without success, nice that you got it (I didn't test yet, just glanced at the code a bit)

Comment thread fast64_internal/f3d/f3d_gbi.py
Comment thread fast64_internal/f3d/f3d_gbi.py Outdated
Comment thread fast64_internal/f3d/f3d_parser.py Outdated
Comment thread fast64_internal/f3d/f3d_parser.py Outdated
).freeze()


def saveMeshByFaces(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pls move createVertexGroups back to where it was, to reduce diff noise

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had to move this and FMesh around because I added default arguments using class constructors to some functions
For saveMeshbyFaces that would be: converterOverride: type[TriangleConverter] = TriangleConverter
Would you rather I set the default to None and just do?
converterOverride = converterOverride or TriangleConverter
I can also remove the defaults and add the args to the function calls if that would be better

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah ok I missed that, thanks for the explanation. that's fine then, leave it as the PR has

Comment thread fast64_internal/z64/exporter/skeleton/classes.py Outdated
SlimyGooblin and others added 2 commits August 8, 2026 10:07
Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

@Dragorn421 Dragorn421 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UX note: I think it would be better to add an entry to the skeleton import/export "Mode" that spells "Skin (horses)" in order to import/export cpu-skinned skeletons.

Currently the switch between skin and standard limbs is made based on having multi-assigned vertices (cf ootDetermineLimbType), but that would probably be surprising to a user who expects the much more common (possibly flex) skeletons. Also the skin skeletons should be avoided as they seem more expensive, so it should be an opt-in rather than an automatic choice

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you move this file into fast64_internal/z64/skeleton/importer/ ?

Comment on lines +1 to +2
# import bpy
# import math

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# import bpy
# import math

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants