Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support ZAPD bone enums for skeleton import #396

Merged

Commits on Jul 28, 2024

  1. Ignore IntelliJ editor data

    m000z0rz committed Jul 28, 2024
    Configuration menu
    Copy the full SHA
    3ff17a0 View commit details
    Browse the repository at this point in the history
  2. [OoT] Add skeleton import test scripts

    In preparation for fixing skeleton imports from the MM decomp, make a
    script for testing skeleton imports.
    
    Running `python3 scripts/make_all_skeletons.py <decomp path> <output
    folder>` will attempt to import all skeletons from every file in the
    decomp that appears to contain a skeleton, and report on how many
    files raised exceptions during the import. The generated .blend files
    are stored in the output folder. Including a third argument of ` will
    attempt to import all animations for files that contain a single
    skeleton as well.
    
    Running this on the mm decomp at commit
    803ff1fb1593cdc0c62d14882973af04dc0f988e (from 2024-07-13) results in
    only 3/174 (1.7%) of files with skeletons importing them without exceptions.
    m000z0rz committed Jul 28, 2024
    Configuration menu
    Copy the full SHA
    e0f8a28 View commit details
    Browse the repository at this point in the history
  3. [OoT] Strip comments in limb list

    The MM decomp specifies `EnumName` values for limbs in the asset XML,
    which generates an enum naming bone indicies. These enum values are
    also generated in comments in the limb list:
    
      void* gDekuButlerSkelLimbs[] = {
        &gDekuButlerRootLimb, /* DEKU_BUTLER_LIMB_ROOT */
    
    Fast64's current limb list parsing does not expect comments here,
    which causes the limb list parse to fail.
    
    Add a function to strip comments of this style, and strip them before
    parsing limb list entires.
    m000z0rz committed Jul 28, 2024
    Configuration menu
    Copy the full SHA
    4e5c406 View commit details
    Browse the repository at this point in the history
  4. [OoT] Identify and parse enums when importing skeletnos

    The MM decomp defines EnumNames for limbs in asset XML, which causes
    ZAPD to generate limb definitions that use these enum values for the
    next child and next sibling (with an offset of 1).
    
      StandardLimb gDekuButlerRootLimb = {
        { 0, 2775, 0 }, DEKU_BUTLER_LIMB_PELVIS - 1, LIMB_DONE,
    
    ootGetLimb currently only supports int values, hex values, or
    LIMB_DONE here.
    
    In preparation for supporting limb enum values of this form, add the
    object's header file to skeletonData and parse all enums found during
    skeleton import. The next patch in this series will use the parsed
    enums to handle limb definitions of this form.
    m000z0rz committed Jul 28, 2024
    Configuration menu
    Copy the full SHA
    07acb99 View commit details
    Browse the repository at this point in the history
  5. [OoT] Support limb enums for limb nextChild / nextSibling

    Use the parsed enums to support next child and next sibling
    definitions of the form `<limb enum value> - 1`.
    
    With this change and the others from this patch series,
    `make_all_skeletons.py` goes from just 3/174 (1.1%) of MM decomp files
    with successful skeleton imports to 169/174 (97.1%).
    m000z0rz committed Jul 28, 2024
    Configuration menu
    Copy the full SHA
    764c9b6 View commit details
    Browse the repository at this point in the history