Announcement

Collapse
No announcement yet.

Quick XX - SB3U macro tools (version 0.7.1 released)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Quick XX - SB3U macro tools (version 0.7.1 released)

    Quick XX 0.7.1 has been released!

    Overview

    Quick XX is based on Alamar's SB3Utility.
    It is a macro solution to xx building. It automates various functionality to save yourself from having to do it yourself.
    The advantages of using a macro are both time and overall less effort required, so you can do more useful things with your time rather than clicking buttons.

    The motivation behind this project is this:
    "I have 200 textures, 200 materials, and 200 frames. How am I supposed to create an xx out of that?"

    Since this is a package of macro tools, it does not know anything about the files themselves or how SB3U works.
    If anyone can create a proper stand-alone xx tool that supports yuusha and possibly other games, that would be great. I believe such a tool exists, but it is very old.

    Downloads

    Main program

    Quick XX v0.7.1

    QuickRename v0.2 - details here (included with Quick XX as of 0.6.3

    Other

    ImageMagick convert - Command-line photo editor. Required to create textures automatically.

    0.3 Source code - 0.3 source code.
    Quick XX v0.2 - left here because it definitely works.

    Remember, you can only have one xx open at a time.
    And you must click on each tab before you try to run each function.

    Compatibility

    Should work with most versions since class names generally do not change.
    Since this simply automates SB3U functions, it is compatible with all formats supported by SB3U.

    Notes

    All operations are done on the very first xx tab that is open. I haven't found a way to get the currently selected tab yet.
    Last edited by xTsukihime; 06-27-2011, 09:24 AM.
    Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

    3D Tools Sanae 3D | Noesis XX Plugin

    Characters: Esk (Eskmate)

  • #2
    old. QuickTex, QuickMat, and QuickFrame have all been combined with Quick XX.
    Last edited by xTsukihime; 06-25-2011, 01:42 PM.
    Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

    3D Tools Sanae 3D | Noesis XX Plugin

    Characters: Esk (Eskmate)

    Comment


    • #3
      It seems that I've overlooked a very subtle case when assign materials.

      1. when you rename a material, it doesn't get sorted when you hit apply.
      2. When you hit copy-->new, the material is first sorted and then the copy is then created.
      3. But the copy is also sorted!

      Whenever I want to move to the next material, I send the "down" key. I assume that the newly created copy is the next immediate material that I have to work with.
      This isn't always the case.

      The new copy always has the string "_copy0" appended to it. I only have to care about _copy0 because there will most likely be no additional copies (I always rename it at each iteration)

      The problem occurs when the base name is something like: "base_axe" and then further down the road I create a new material called "base"
      This is what happens

      Code:
      base_axe <--- already exists
      base <-- newly created
      Code:
      base  <-- sorted
      base_axe
      Code:
      base <-- sorted
      base_axe
      base_copy0 <-- newly created material, auto-sorted
      Now it could even be as messy as this

      Code:
      base
      base_axe1
      base_axe2
      base_axe3
      base_bones1
      base_bones2
      base_copy0
      When I'm at base, I would hit down, and then it would run into base_axe.
      This is the only time when the problem will occur...when the base name is followed by an underscore and then followed by anything lexicographically smaller than "copy0" >.>

      Since the only things I have to work with are down keys and stuff, I wouldn't even be able to do a simple while looping string comparison and just skip all these bad entries...

      EDIT: oh wait, alamar has conveniently placed the material name in the textbox at the top whenever it's highlighted, so I could grab this value and do a string comparison.
      Problem solved.
      Last edited by xTsukihime; 04-17-2011, 06:12 PM.
      Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

      3D Tools Sanae 3D | Noesis XX Plugin

      Characters: Esk (Eskmate)

      Comment


      • #4
        An issue I am having is "waiting for previous command to finish"
        Ie: if I'm sending a long line of text, it would definitely take more time to process than a 2-letter word.

        This becomes a problem when your computer is not very fast. I tuned the macro based on my own system (which isn't the fastest either, but there are slower computers...), so either I would have to set a very long delay between commands (ie: more time required to finish), or I just leave the fine-tuning up to you lol.

        Hopefully there is a way to process the next command only after the previous has finished. I will consider return values next.

        Another thing to note: Note every texture is used. You might have 50 textures in your folder but only 30 of them are used.
        My texture assignment does not account for these extra textures. You must make sure that you have EXACTLY what you need.

        And yet even more issues: if you are interrupted by something (ie: pop-up, friend messaging you, etc.) it'll most likely screw things up. Have not found a way to deal with it. Disable all signals? I don't think the OS would let me. So I will have to figure out a way to "safely" handle interrupts.
        Last edited by xTsukihime; 04-17-2011, 09:16 PM.
        Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

        3D Tools Sanae 3D | Noesis XX Plugin

        Characters: Esk (Eskmate)

        Comment


        • #5
          Quick XX 0.1 has been released.
          I have successfully imported several AG2 maps that have over 200+ textures and frames within 5 minutes without a problem.
          I've increased the delay somewhat so that slower computers should also be able to run it without much issue.

          Until someone makes a real XX tool that simply takes say a directory and bundles it together (hence, much faster), this will be the next best alternative.
          If you have better methods, do share.
          Attached Files
          Last edited by xTsukihime; 04-18-2011, 09:49 AM.
          Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

          3D Tools Sanae 3D | Noesis XX Plugin

          Characters: Esk (Eskmate)

          Comment


          • #6
            Quick XX 0.2 has been released.
            I have completely changed most of the functions, cut out a lot of code, and replaced old crappy ugly unaesthetic code (the ones I used while learning the code) with nice new better ones.

            It is still currently 4 separate scripts, and you have to run them in the correct order:

            1: MQOparser
            2: QuickTex
            3: QuickMat
            4: QuickFrame

            Because of dependencies.
            Keyboard strokes have been removed because those are unpredictable.

            Currently tuned to a fairly fast computer, so if some of the materials or frames are being skipped, that's because your computer is too slow. Or you are doing something that is taking up all the resources. In any case, once I figure out how to best allow you to set delays, you will then be able to fine-tune it yourself.

            Again, remember that this is just a macro.
            I'm slowly figuring out how to automate most of the tasks, but there are still several things that you have to do on your own before my scripts can run properly.
            Last edited by xTsukihime; 04-18-2011, 06:13 PM.
            Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

            3D Tools Sanae 3D | Noesis XX Plugin

            Characters: Esk (Eskmate)

            Comment


            • #7
              I was reading the rapelay wiki article and noticed this:

              xx_dep.execan be found on popular Hentai forum HongFire. It works in the same way as IluPak.exe, in that you drop a .xx file (after you unpack it from a .pp file) onto the program, and it creates a folder with the .xx files contents. Once the editing is done, it is slightly different, you drop the directory onto xx_rep.exe instead of onto the xx_dep.exe. Once the .xx file is created, you then pack it into a new .pp file with IluPak.exe.

              xx_rep.exe can be found on popular Hentai forum HongFire. It does the exact opposite of above, it packs an unpacked folder (made from a .xx file dropped into xx_dep.exe) into a new .xx file, to be used in an unpacked .pp folder.
              Hmm, so then we can just use that instead? Because all that is really needed is to convert it into an xx format that SB3U can read, and then one can quickly move it back and forth from game to game using the workspace without having to deal with all this macro business.

              Can anyone confirm that we can create any xx file we want and whether the xx file produced can be used in the manner that I described?

              If someone already made a tool that can automatically add textures, copy materials, rename them, assign textures to them, and create frames, then I don't have to continue with Quick XX because a macro solution is never better than a real tool lol

              Being able to just toss a directory over it and watch it spit out a full xx file in 5 seconds is so much better than this.
              Last edited by xTsukihime; 04-18-2011, 10:26 PM.
              Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

              3D Tools Sanae 3D | Noesis XX Plugin

              Characters: Esk (Eskmate)

              Comment


              • #8
                Originally posted by finale00 View Post
                Being able to just toss a directory over it and watch it spit out a full xx file in 5 seconds is so much better than this.
                xx_dep and xxrep is only able to change existing textures inside a xx file. It does not support anything else: no materials, frames, bones, etc. So no, it is not what you are looking for.
                HF-Modding/Translation Club Member

                Comment


                • #9
                  Updates in the next release:

                  -smart texture adding: does not add textures that already exist in the xx
                  -mass texture deleting: delete all textures in the xx. Just for fun.

                  In development:

                  -Delete unused textures: unused textures just make the file unnecessarily bigger
                  -Texture replacing: replace a texture with a different image.
                  -Texture renaming: just renames textures
                  -Adding additional materials: allows you to correctly add additional materials to an xx. At the moment it will always start at the first material in the list and then start copying and assigning from there. Saves you from having to start from scratch.
                  -MQO parser to parse subscripted objects correctly
                  -More frame functionality, such as setting "merge with existing meshes" if I am dealing with a subscripted object
                  -The GUI

                  Things I am thinking about:

                  -making a back-up of your xx. This will be output in a formatted text file which can be restored if you make a mistake.

                  I am also taking requests, otherwise I'll just play around at my own pace and add whatever I want with no task priority (besides my own task priority list).
                  Last edited by xTsukihime; 04-20-2011, 10:35 AM.
                  Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

                  3D Tools Sanae 3D | Noesis XX Plugin

                  Characters: Esk (Eskmate)

                  Comment


                  • #10
                    v0.3 is out.
                    It seems like there are some bugs which I am not sure how to handle, and they're causing problems with functionality I would like to have.
                    It also seems that compiling the exe also leads to problems sometimes o.O

                    But ya, it should work lol
                    Just make sure you follow the instructions in the readme.
                    Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

                    3D Tools Sanae 3D | Noesis XX Plugin

                    Characters: Esk (Eskmate)

                    Comment


                    • #11
                      v0.4 is now available.

                      Well, I really updated it only because I found new functionality that would be useful to me lol

                      == New functionality ==

                      Autopopulate textures

                      This function automatically assigns a texture name for each material,
                      based on the material name. It will take the material name and add
                      ".png" to it and then write that to matNames.txt (if you recall,
                      QuickMat will use this to assign textures to materials)

                      This is used for 3D objects that have materials defined, but don't
                      have any textures associated with them for whatever reasons. If you
                      are exporting complex objects from other games and find that all 200
                      materials do not have textures assigned properly, and find that the
                      texture names are the same as the material names, you can use this
                      function to set up matNames.txt to assign them for you.

                      It currently assumes you will be using png format, but I may add
                      an option for you to choose what format you want the image to be in
                      the future.

                      But really, I don't see any reason for bmp or tga. Png supports alpha
                      channels just fine. The only difference is that with tga files, SB3U
                      automatically sets the first byte of the unknown16 to "0C" rather than "00"

                      Of course, "0C" still doesn't do too much but it makes it easier for you to
                      go through the hex list and just change them to "4C" and set bye9 to "80"
                      Last edited by xTsukihime; 04-24-2011, 10:01 PM.
                      Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

                      3D Tools Sanae 3D | Noesis XX Plugin

                      Characters: Esk (Eskmate)

                      Comment


                      • #12
                        v0.5 is out.

                        Added additional texture functionality.
                        Previously I simply auto-assigned textures based on material name. This is for materials that use external textures, and the textures are available, but they are not explicitly assigned.

                        Now I auto-create textures based on the material name. Some materials do not use external textures because it's a solid color anyways, but SB3U doesn't support that (I think). So you end up having to create textures on your own, specifying the RGB values given. Now you can just click "create MQO textures" and it will create them all using imagemagick's convert.exe. You will need to download a copy of it and place it in the "tools" folder.

                        I'll probably make a separate stand-alone tool that will allow you to drag and drop multiple MQO's and they will create all the textures and place them in separate folders.

                        If you can think of anything that could and should be automated let me know. If it's something complicated like filling out bone weights or creating bones, I don't understand it wel enough to be able to make something out of it (maybe someone can tell me how it works)
                        Last edited by xTsukihime; 04-25-2011, 10:31 AM.
                        Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

                        3D Tools Sanae 3D | Noesis XX Plugin

                        Characters: Esk (Eskmate)

                        Comment


                        • #13
                          0.6 is out. Only added some small MQO modification functions.
                          Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

                          3D Tools Sanae 3D | Noesis XX Plugin

                          Characters: Esk (Eskmate)

                          Comment


                          • #14
                            Here are some details about the next release.

                            I will be adding more frame functions so that I can import Esk and other characters into Yuusha.

                            Here is the plan:

                            Summary

                            All bones and frames are displayed on the Object Tree as nodes.
                            The bones and the bone frames have identical names, except the bone has "/bone" suffix while the bone frame has "/frame" suffix.
                            I can use macros to traverse this tree and search for nodes and retrieve their names.
                            I would then check the name and replace it if necessary.
                            The frames to replace will be retrieved from a text file.

                            Details

                            The input text file will be formatted as follows

                            Code:
                            originalFrameName1	targetFrameName2
                            originalFrameName2	targetFrameName2
                            originalFrameName3	targetFrameName3
                            Where originalFrameName will be the name that I will search for, and targetFrameName will be the name I replace it with. You must separate the two columns with a tab. Spaces in the names should be ok, but I don't recommend it (use an underscore if you have to)

                            There is (as far as I can see) no way to do this automatically so you will have to write it up yourself.

                            I will impose restrictions on the frame structure.
                            That is, all frames must be rooted at All_Root, no exceptions until further notice. You can structure it however you wish after that.

                            ie:
                            Code:
                            All_Root
                              Child1
                              Child2
                                Child2a
                                Child2b
                              Child3
                                Child3a
                                  Child3b
                            Sample execution as follows.

                            Suppose I want to rename the bone "s01_bone" to "a01_bone".
                            Your text file will be

                            Code:
                            s01_bone	a01_bone
                            And my script will traverse the tree looking for any frame OR bone called "s01_bone" and rename them to "a01_bone"

                            Multiple frame names can be specified, but they must be unique.
                            Run-time complexity will hopefully be constant as I will be using a hashmap to store the key/value pairs so at most it should only take a minute or two. I've already written the script to traverse the tree.

                            Code:
                            All_Root/Frame
                             SCENE_ROOT/Frame
                              a01_N_Zentai_010/Frame
                               a01_N_Skeleton_010/Frame
                                a01_J_Hip_010/Frame
                                 a01_J_Spin_010/Frame
                                  a01_J_Spin_020/Frame
                                   a01_J_MuneL_01/Frame
                                    a01_J_MuneL_02/Frame
                                     a01_J_ChikuL_01/Frame
                                      a01_J_ChikuL_02/Frame
                                     AP_N_muneLT_01/Frame
                                    AP_N_muneL_02Dam/Frame
                                     AP_N_muneL_001/Frame
                                     AP_N_muneLG_001/Frame
                                    AP_N_muneL_02/Frame
                                    AP_N_muneLG_02/Frame
                                    A01_at_muneL/Frame
                                     1 mesh object
                                      Mesh Obj: 15 vertices, 18 faces
                                      No bones
                                   a01_J_MuneR_01/Frame
                                    a01_J_MuneR_02/Frame
                                     a01_J_ChikuR_01/Frame
                                      a01_J_ChikuR_02/Frame
                                     AP_N_muneRT_01/Frame
                                    AP_N_muneR_02Dam/Frame
                                     AP_N_muneR_001/Frame
                                     AP_N_muneRG_001/Frame
                                    AP_N_muneR_02/Frame
                                    AP_N_muneRG_02/Frame
                                    A01_at_muneR/Frame
                                     1 mesh object
                                      Mesh Obj: 15 vertices, 18 faces
                                      No bones
                                   a01_J_KataL_01/Frame
                                    a01_J_ArmL_01/Frame
                                     a01_J_UdeL_01/Frame
                                      a01_J_HandL_01/Frame
                                       a01_J_HandL_02/Frame
                                        a01_J_HitoL_01/Frame
                                         a01_J_HitoL_02/Frame
                                          a01_J_HitoL_03/Frame
                                           a01_J_HitoL_04/Frame
                                        a01_J_NakaL_01/Frame
                                         a01_J_NakaL_02/Frame
                                          a01_J_NakaL_03/Frame
                                           a01_J_NakaL_04/Frame
                                        a01_J_KusuriL_01/Frame
                                         a01_J_KusuriL_02/Frame
                                          a01_J_KusuriL_03/Frame
                                           a01_J_KusuriL_04/Frame
                                        a01_J_KoL_01/Frame
                                         a01_J_KoL_02/Frame
                                          a01_J_KoL_03/Frame
                                           a01_J_KoL_04/Frame
                                        a01_J_OyaL_01/Frame
                                         a01_J_OyaL_02/Frame
                                          a01_J_OyaL_03/Frame
                                           a01_J_OyaL_04/Frame
                                       bukiL/Frame
                                      a01_J_UdeL_02/Frame
                                       a01_J_TekubiL_01/Frame
                                      A01_at_udeL02/Frame
                                       1 mesh object
                                        Mesh Obj: 14 vertices, 12 faces
                                        No bones
                                     a01_J_HijiL_01/Frame
                                     a01_J_ArmL_02/Frame
                                      km_O_sukato_05/Frame
                                     A01_at_udeL01/Frame
                                      1 mesh object
                                       Mesh Obj: 14 vertices, 12 faces
                                       No bones
                                    a01_J_KataL_02/Frame
                                   a01_J_KataR_01/Frame
                                    a01_J_ArmR_01/Frame
                                     a01_J_UdeR_01/Frame
                                      a01_J_HandR_01/Frame
                                       a01_J_HandR_02/Frame
                                        a01_J_HitoR_01/Frame
                                         a01_J_HitoR_02/Frame
                                          a01_J_HitoR_03/Frame
                                           a01_J_HitoR_04/Frame
                                        a01_J_NakaR_01/Frame
                                         a01_J_NakaR_02/Frame
                                          a01_J_NakaR_03/Frame
                                           a01_J_NakaR_04/Frame
                                        a01_J_KusuriR_01/Frame
                                         a01_J_KusuriR_02/Frame
                                          a01_J_KusuriR_03/Frame
                                           a01_J_KusuriR_04/Frame
                                        a01_J_KoR_01/Frame
                                         a01_J_KoR_02/Frame
                                          a01_J_KoR_03/Frame
                                           a01_J_KoR_04/Frame
                                        a01_J_OyaR_01/Frame
                                         a01_J_OyaR_02/Frame
                                          a01_J_OyaR_03/Frame
                                           a01_J_OyaR_04/Frame
                                       bukiR/Frame
                                      a01_J_UdeR_02/Frame
                                       a01_J_TekubiR_01/Frame
                                      A01_at_udeR02/Frame
                                       1 mesh object
                                        Mesh Obj: 14 vertices, 12 faces
                                        No bones
                                     a01_J_HijiR_01/Frame
                                     a01_J_ArmR_02/Frame
                                     A01_at_udeR01/Frame
                                      1 mesh object
                                       Mesh Obj: 14 vertices, 12 faces
                                       No bones
                                    a01_J_KataR_02/Frame
                                   a01_J_Spin_021/Frame
                                    a01_J_Neck_01/Frame
                                     a01_J_Neck_02/Frame
                                      a01_J_Neck_03/Frame
                                      A01_at_atama/Frame
                                       1 mesh object
                                        Mesh Obj: 24 vertices, 12 faces
                                        No bones
                                      A_N_null_02/Frame
                                     A01_at_kubi/Frame
                                      1 mesh object
                                       Mesh Obj: 18 vertices, 20 faces
                                       No bones
                                   AP_N_muneR_01Dam/Frame
                                    AP_N_muneR_000/Frame
                                    AP_N_muneRG_000/Frame
                                   AP_N_muneL_01Dam/Frame
                                    AP_N_muneL_000/Frame
                                    AP_N_muneLG_000/Frame
                                   AP_N_muneR_01/Frame
                                   AP_N_muneL_01/Frame
                                   AP_N_muneRG_01/Frame
                                   AP_N_muneLG_01/Frame
                                   A01_at_mune/Frame
                                    1 mesh object
                                     Mesh Obj: 36 vertices, 42 faces
                                     No bones
                                  A01_at_hara/Frame
                                   1 mesh object
                                    Mesh Obj: 34 vertices, 42 faces
                                    No bones
                                  A_N_null_01/Frame
                                 a01_J_Kosi_010/Frame
                                  a01_J_Kokan_010/Frame
                                   a01_J_Kokan_02/Frame
                                   AP_N_kokan_02/Frame
                                  a01_J_SiriL_010/Frame
                                   a01_J_SiriL_020/Frame
                                   AP_N_siriL_02/Frame
                                  a01_J_SiriR_010/Frame
                                   a01_J_SiriR_020/Frame
                                   AP_N_siriR_02/Frame
                                  a01_J_UplegL_010/Frame
                                   a01_J_UplegL_020/Frame
                                   a01_J_LegL_01/Frame
                                    a01_J_HagiL_01/Frame
                                    a01_J_FootL_01/Frame
                                     a01_J_FootL_02/Frame
                                      a01_J_FootL_03/Frame
                                       a01_J_FootL_04/Frame
                                        a01_J_ToesL_01/Frame
                                         a01_J_ToesL_02/Frame
                                    A01_at_suneL/Frame
                                     1 mesh object
                                      Mesh Obj: 20 vertices, 20 faces
                                      No bones
                                   a01_J_HizaL_01/Frame
                                   asi_N_DamL000/Frame
                                   asi_N_DamL0000/Frame
                                   A01_at_momoL/Frame
                                    1 mesh object
                                     Mesh Obj: 20 vertices, 20 faces
                                     No bones
                                  a01_J_UplegR_010/Frame
                                   a01_J_UplegR_020/Frame
                                   a01_J_LegR_01/Frame
                                    a01_J_HagiR_01/Frame
                                    a01_J_FootR_01/Frame
                                     a01_J_FootR_02/Frame
                                      a01_J_FootR_03/Frame
                                       a01_J_FootR_04/Frame
                                        a01_J_ToesR_01/Frame
                                         a01_J_ToesR_02/Frame
                                    A01_at_suneR/Frame
                                     1 mesh object
                                      Mesh Obj: 20 vertices, 20 faces
                                      No bones
                                   a01_J_HizaR_01/Frame
                                   asi_N_DamR000/Frame
                                   asi_N_DamR0000/Frame
                                   A01_at_momoR/Frame
                                    1 mesh object
                                     Mesh Obj: 20 vertices, 20 faces
                                     No bones
                                  a01_J_UplegDDL_010/Frame
                                  a01_J_UplegDDR_010/Frame
                                  a01_J_onaka_010/Frame
                                  AP_N_siriR_01/Frame
                                  AP_N_siriL_01/Frame
                                  A01_at_kosi/Frame
                                   1 mesh object
                                    Mesh Obj: 43 vertices, 56 faces
                                    No bones
                                  a01_J_sipo_01/Frame
                                   a01_J_sipo_02/Frame
                                    a01_J_sipo_03/Frame
                                     a01_J_sipo_04/Frame
                                      a01_J_sipo_05/Frame
                                       a01_J_sipo_06/Frame
                                        a01_J_sipo_07/Frame
                                  a01_J_ribbon_01/Frame
                                   a01_J_ribbon_R/Frame
                                   a01_J_ribbon_L/Frame
                                   a01_J_ribbon_R1/Frame
                                    a01_J_ribbon_R2/Frame
                                     a01_N_ribbon01/Frame
                                   a01_J_ribbon_L1/Frame
                                    a01_J_ribbon_L2/Frame
                                     a01_N_ribbon02/Frame
                                  a01_J_skirtFC_01/Frame
                                   a01_J_skirtFC_02/Frame
                                    a01_J_skirtFC_03/Frame
                                     a01_N_skirt_FC/Frame
                                  a01_J_skirtFR_01/Frame
                                   a01_J_skirtFR_02/Frame
                                    a01_J_skirtFR_03/Frame
                                     a01_N_skirt_FR/Frame
                                  a01_J_skirtFL_01/Frame
                                   a01_J_skirtFL_02/Frame
                                    a01_J_skirtFL_03/Frame
                                     a01_N_skirt_FL/Frame
                                  a01_J_skirtML_01/Frame
                                   a01_J_skirtML_02/Frame
                                  a01_J_skirtMR_01/Frame
                                   a01_J_skirtMR_02/Frame
                                  a01_J_skirtBL_01/Frame
                                   a01_J_skirtBL_02/Frame
                                    a01_J_skirtBL_03/Frame
                                     a01_N_skirt_BL/Frame
                                  a01_J_skirtBC_01/Frame
                                   a01_J_skirtBC_02/Frame
                                  a01_J_skirtBR_01/Frame
                                   a01_J_skirtBR_02/Frame
                                    a01_J_skirtBR_03/Frame
                                     a01_N_skirt_BR/Frame
                                  A_N_null_00/Frame
                               N_mahouR/Frame
                                N_mahou_akaR/Frame
                                 O_mahou_akaFR/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                 O_mahou_akaUR/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                N_mahou_aoR/Frame
                                 O_mahou_aoFR/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                 O_mahou_aoUR/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                N_mahou_kiR/Frame
                                 O_mahou_kiFR/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                 O_mahou_kiUR/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                               N_mahouL/Frame
                                N_mahou_akaL/Frame
                                 O_mahou_akaFL/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                 O_mahou_akaUL/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                N_mahou_aoL/Frame
                                 O_mahou_aoFL/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                 O_mahou_aoUL/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                N_mahou_kiL/Frame
                                 O_mahou_kiFL/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                                 O_mahou_kiUL/Frame
                                  1 mesh object
                                   Mesh Obj: 4 vertices, 2 faces
                                   No bones
                              P_Null/Frame
                               AP_N_kokanD_01/Frame
                               AP_N_kokanD_02/Frame
                               asi_N_DamRDDD/Frame
                               asi_N_DamRDDD1/Frame
                               asi_N_DamLDDD/Frame
                               asi_N_DamLDDD1/Frame
                              N_sipo/Frame
                               km_O_sipo_01/Frame
                                1 mesh object
                                 Mesh Obj: 39 vertices, 48 faces
                                 15 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_sipo_01/Bone
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_01/Bone
                               km_O_sipo_02/Frame
                                1 mesh object
                                 Mesh Obj: 36 vertices, 44 faces
                                 15 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_sipo_01/Bone
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_02/Bone
                               km_O_sipo_03/Frame
                                1 mesh object
                                 Mesh Obj: 27 vertices, 32 faces
                                 14 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_sipo_01/Bone
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  km_O_sipo_03/Bone
                               km_O_sipo_04/Frame
                                1 mesh object
                                 Mesh Obj: 45 vertices, 64 faces
                                 6 bones
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_04/Bone
                               km_O_sipo_05/Frame
                                1 mesh object
                                 Mesh Obj: 80 vertices, 120 faces
                                 7 bones
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_05/Bone
                               km_O_sipo_06/Frame
                                1 mesh object
                                 Mesh Obj: 131 vertices, 220 faces
                                 15 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_sipo_01/Bone
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_06/Bone
                               km_O_sipo_01U/Frame
                                1 mesh object
                                 Mesh Obj: 39 vertices, 48 faces
                                 15 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_sipo_01/Bone
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_01U/Bone
                               km_O_sipo_02U/Frame
                                1 mesh object
                                 Mesh Obj: 36 vertices, 44 faces
                                 15 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_sipo_01/Bone
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_02U/Bone
                               km_O_sipo_03U/Frame
                                1 mesh object
                                 Mesh Obj: 27 vertices, 32 faces
                                 14 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_sipo_01/Bone
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  km_O_sipo_03U/Bone
                               km_O_sipo_04U/Frame
                                1 mesh object
                                 Mesh Obj: 45 vertices, 64 faces
                                 6 bones
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_04U/Bone
                               km_O_sipo_05U/Frame
                                1 mesh object
                                 Mesh Obj: 80 vertices, 120 faces
                                 7 bones
                                  a01_J_sipo_02/Bone
                                  a01_J_sipo_03/Bone
                                  a01_J_sipo_04/Bone
                                  a01_J_sipo_05/Bone
                                  a01_J_sipo_06/Bone
                                  a01_J_sipo_07/Bone
                                  km_O_sipo_05U/Bone
                              KM_BODY_HUKU/Frame
                               km_O_karada_01/Frame
                                4 mesh objects
                                 Mesh Obj: 402 vertices, 750 faces
                                 Mesh Obj: 2014 vertices, 3244 faces
                                 Mesh Obj: 490 vertices, 740 faces
                                 Mesh Obj: 1771 vertices, 3176 faces
                                 94 bones
                                  a01_J_Hip_010/Bone
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_MuneL_01/Bone
                                  a01_J_MuneL_02/Bone
                                  a01_J_ChikuL_01/Bone
                                  a01_J_ChikuL_02/Bone
                                  a01_J_MuneR_01/Bone
                                  a01_J_MuneR_02/Bone
                                  a01_J_ChikuR_01/Bone
                                  a01_J_ChikuR_02/Bone
                                  a01_J_KataL_01/Bone
                                  a01_J_ArmL_01/Bone
                                  a01_J_UdeL_01/Bone
                                  a01_J_HandL_01/Bone
                                  a01_J_HandL_02/Bone
                                  a01_J_HitoL_01/Bone
                                  a01_J_HitoL_02/Bone
                                  a01_J_HitoL_03/Bone
                                  a01_J_NakaL_01/Bone
                                  a01_J_NakaL_02/Bone
                                  a01_J_NakaL_03/Bone
                                  a01_J_KusuriL_01/Bone
                                  a01_J_KusuriL_02/Bone
                                  a01_J_KusuriL_03/Bone
                                  a01_J_KoL_01/Bone
                                  a01_J_KoL_02/Bone
                                  a01_J_KoL_03/Bone
                                  a01_J_OyaL_01/Bone
                                  a01_J_OyaL_02/Bone
                                  a01_J_OyaL_03/Bone
                                  a01_J_UdeL_02/Bone
                                  a01_J_TekubiL_01/Bone
                                  a01_J_ArmL_02/Bone
                                  a01_J_KataL_02/Bone
                                  a01_J_KataR_01/Bone
                                  a01_J_ArmR_01/Bone
                                  a01_J_UdeR_01/Bone
                                  a01_J_HandR_01/Bone
                                  a01_J_HandR_02/Bone
                                  a01_J_HitoR_01/Bone
                                  a01_J_HitoR_02/Bone
                                  a01_J_HitoR_03/Bone
                                  a01_J_NakaR_01/Bone
                                  a01_J_NakaR_02/Bone
                                  a01_J_NakaR_03/Bone
                                  a01_J_KusuriR_01/Bone
                                  a01_J_KusuriR_02/Bone
                                  a01_J_KusuriR_03/Bone
                                  a01_J_KoR_01/Bone
                                  a01_J_KoR_02/Bone
                                  a01_J_KoR_03/Bone
                                  a01_J_OyaR_01/Bone
                                  a01_J_OyaR_02/Bone
                                  a01_J_OyaR_03/Bone
                                  a01_J_UdeR_02/Bone
                                  a01_J_TekubiR_01/Bone
                                  a01_J_ArmR_02/Bone
                                  a01_J_KataR_02/Bone
                                  a01_J_Spin_021/Bone
                                  a01_J_Neck_01/Bone
                                  a01_J_Neck_02/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_Kokan_02/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriL_020/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_SiriR_020/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_UplegL_020/Bone
                                  a01_J_LegL_01/Bone
                                  a01_J_HagiL_01/Bone
                                  a01_J_FootL_01/Bone
                                  a01_J_FootL_02/Bone
                                  a01_J_FootL_03/Bone
                                  a01_J_FootL_04/Bone
                                  a01_J_ToesL_01/Bone
                                  a01_J_ToesL_02/Bone
                                  a01_J_HizaL_01/Bone
                                  a01_J_UplegR_010/Bone
                                  a01_J_UplegR_020/Bone
                                  a01_J_LegR_01/Bone
                                  a01_J_HagiR_01/Bone
                                  a01_J_FootR_01/Bone
                                  a01_J_FootR_02/Bone
                                  a01_J_FootR_03/Bone
                                  a01_J_FootR_04/Bone
                                  a01_J_ToesR_01/Bone
                                  a01_J_ToesR_02/Bone
                                  a01_J_HizaR_01/Bone
                                  a01_J_UplegDDL_010/Bone
                                  a01_J_UplegDDR_010/Bone
                                  km_O_karada_01/Bone
                               km_O_Smoza_01/Frame
                                2 mesh objects
                                 Mesh Obj: 1446 vertices, 2862 faces
                                 Mesh Obj: 1488 vertices, 2862 faces
                                 7 bones
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_Kokan_02/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_UplegL_020/Bone
                                  a01_J_UplegR_020/Bone
                               km_O_karada_02/Frame
                                2 mesh objects
                                 Mesh Obj: 28 vertices, 30 faces
                                 Mesh Obj: 121 vertices, 230 faces
                                 7 bones
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_Kokan_02/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriL_020/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_SiriR_020/Bone
                               socks/Frame
                                2 mesh objects
                                 Mesh Obj: 454 vertices, 740 faces
                                 Mesh Obj: 454 vertices, 740 faces
                                 17 bones
                                  a01_J_UplegL_010/Bone
                                  a01_J_LegL_01/Bone
                                  a01_J_FootL_01/Bone
                                  a01_J_FootL_02/Bone
                                  a01_J_FootL_03/Bone
                                  a01_J_FootL_04/Bone
                                  a01_J_ToesL_01/Bone
                                  a01_J_ToesL_02/Bone
                                  a01_J_UplegR_010/Bone
                                  a01_J_LegR_01/Bone
                                  a01_J_FootR_01/Bone
                                  a01_J_FootR_02/Bone
                                  a01_J_FootR_03/Bone
                                  a01_J_FootR_04/Bone
                                  a01_J_ToesR_01/Bone
                                  a01_J_ToesR_02/Bone
                                  km_O_karada_01/Bone
                               sleeves/Frame
                                2 mesh objects
                                 Mesh Obj: 1932 vertices, 3300 faces
                                 Mesh Obj: 1932 vertices, 3300 faces
                                 19 bones
                                  a01_J_Spin_020/Bone
                                  a01_J_KataL_01/Bone
                                  a01_J_ArmL_01/Bone
                                  a01_J_UdeL_01/Bone
                                  a01_J_UdeL_02/Bone
                                  a01_J_TekubiL_01/Bone
                                  a01_J_HijiL_01/Bone
                                  a01_J_ArmL_02/Bone
                                  a01_J_KataL_02/Bone
                                  a01_J_KataR_01/Bone
                                  a01_J_ArmR_01/Bone
                                  a01_J_UdeR_01/Bone
                                  a01_J_HandR_01/Bone
                                  a01_J_UdeR_02/Bone
                                  a01_J_TekubiR_01/Bone
                                  a01_J_HijiR_01/Bone
                                  a01_J_ArmR_02/Bone
                                  a01_J_KataR_02/Bone
                                  km_O_karada_01/Bone
                               kimono/Frame
                                1 mesh object
                                 Mesh Obj: 8986 vertices, 14883 faces
                                 39 bones
                                  a01_J_Hip_010/Bone
                                  a01_J_Spin_010/Bone
                                  a01_J_Spin_020/Bone
                                  a01_J_MuneL_01/Bone
                                  a01_J_MuneL_02/Bone
                                  a01_J_ChikuL_01/Bone
                                  a01_J_ChikuL_02/Bone
                                  a01_J_MuneR_01/Bone
                                  a01_J_MuneR_02/Bone
                                  a01_J_ChikuR_01/Bone
                                  a01_J_ChikuR_02/Bone
                                  a01_J_KataL_01/Bone
                                  a01_J_ArmL_01/Bone
                                  a01_J_ArmL_02/Bone
                                  a01_J_KataL_02/Bone
                                  a01_J_KataR_01/Bone
                                  a01_J_ArmR_01/Bone
                                  a01_J_ArmR_02/Bone
                                  a01_J_KataR_02/Bone
                                  a01_J_Spin_021/Bone
                                  a01_J_Neck_01/Bone
                                  a01_J_Neck_02/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_Kokan_02/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriL_020/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_SiriR_020/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_UplegL_020/Bone
                                  a01_J_HizaL_01/Bone
                                  a01_J_UplegR_010/Bone
                                  a01_J_UplegR_020/Bone
                                  a01_J_HizaR_01/Bone
                                  a01_J_UplegDDL_010/Bone
                                  a01_J_UplegDDR_010/Bone
                                  a01_J_onaka_010/Bone
                                  km_O_karada_01/Bone
                               skirt/Frame
                                1 mesh object
                                 Mesh Obj: 1527 vertices, 2403 faces
                                 34 bones
                                  a01_J_Spin_010/Bone
                                  a01_J_Kosi_010/Bone
                                  a01_J_Kokan_010/Bone
                                  a01_J_Kokan_02/Bone
                                  a01_J_SiriL_010/Bone
                                  a01_J_SiriL_020/Bone
                                  a01_J_SiriR_010/Bone
                                  a01_J_SiriR_020/Bone
                                  a01_J_UplegL_010/Bone
                                  a01_J_UplegL_020/Bone
                                  a01_J_LegL_01/Bone
                                  a01_J_HagiL_01/Bone
                                  a01_J_FootL_01/Bone
                                  a01_J_FootL_02/Bone
                                  a01_J_FootL_03/Bone
                                  a01_J_FootL_04/Bone
                                  a01_J_ToesL_01/Bone
                                  a01_J_ToesL_02/Bone
                                  a01_J_HizaL_01/Bone
                                  a01_J_UplegR_010/Bone
                                  a01_J_UplegR_020/Bone
                                  a01_J_LegR_01/Bone
                                  a01_J_HagiR_01/Bone
                                  a01_J_FootR_01/Bone
                                  a01_J_FootR_02/Bone
                                  a01_J_FootR_03/Bone
                                  a01_J_FootR_04/Bone
                                  a01_J_ToesR_01/Bone
                                  a01_J_ToesR_02/Bone
                                  a01_J_HizaR_01/Bone
                                  a01_J_UplegDDL_010/Bone
                                  a01_J_UplegDDR_010/Bone
                                  a01_J_onaka_010/Bone
                                  km_O_karada_01/Bone
                              atari_Null/Frame
                            >Exit code: 0    Time: 1.904
                            If there are any important details that I have missed, or if there is anything useful that you can think of with this kind of information, let me know.
                            Last edited by xTsukihime; 05-09-2011, 11:29 AM.
                            Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

                            3D Tools Sanae 3D | Noesis XX Plugin

                            Characters: Esk (Eskmate)

                            Comment


                            • #15
                              I am imposing additional naming restrictions for frames.

                              Do not include the string ", Method: " in your frame name.
                              I don't expect anyone to do this because it's silly, but I am currently writing scripts to traverse the workspace and I may need to use the frame name.
                              This issue only occurs in the hierarchy name

                              Code:
                              Hierarchy: All_Root, Method: Merge, CopyHex: yes, MatOffset: 0, FormatType: 3
                              And the only way I can think of to extract the frame name is to search for the index of ", Method: " since you can name your frames arbitrary anything with any length and include spaces (so split doesn't work). You can even call it "Method" or "my name, Method: " just to screw around, but if you do screw around don't complain that my tool doesn't work lol

                              For now I am only going to support one frame hierarchy.
                              Last edited by xTsukihime; 05-10-2011, 03:26 PM.
                              Mod Tools: Quick XX | Quick MDL Decompiler | Yuusha Rename | Yuusha Loader | GUI Plst Tool

                              3D Tools Sanae 3D | Noesis XX Plugin

                              Characters: Esk (Eskmate)

                              Comment

                              Working...
                              X