Jump to content

vagonumero13 tools (REDELBE, rdbtool, g1mtools, doa6decsave) Update 17 Aug: REDELBE 3.0


Recommended Posts

1 minute ago, xghostxprotocolx said:

ok. ive check and it says true. also ive just noticed it in the fight mode. earlier i didnt notice it cause i thought you were referring to wardrobe area. it shows slot: KAS_COS_004 Mod: Vanilla.

It is in fight mode when you have to press the F key (or the controller buttons). Those won't work in wardrove.

Link to comment

thanks for the help..  i think i noticed it working now. my bad. the nude mod is in specific slot which i have yet to unlock (previously this was enable_random_costume_mods = true i change this to false and now i see the nude mode at the assigned slot.). is it possible to change the slots by just changing the file name? and is there anyway to unlock all the char without purchasing? or i am suppose to slowly grind and get those player points?

Link to comment
7 hours ago, xghostxprotocolx said:

thanks for the help..  i think i noticed it working now. my bad. the nude mod is in specific slot which i have yet to unlock (previously this was enable_random_costume_mods = true i change this to false and now i see the nude mode at the assigned slot.). is it possible to change the slots by just changing the file name? and is there anyway to unlock all the char without purchasing? or i am suppose to slowly grind and get those player points?

There may be cheat engine scripts to unlock them, not sure. You could also try getting someone save, although they will have first to decrypt it in their program with doa6decsave, and then you would have to encrypt it in your computer with same program.

Link to comment
6 hours ago, mrc19503 said:

Can you share the source code of SRSxtool? I want to switch audios within an srsa/srst file and repack it.

There you have.

The meaningful files are SrsaFile.cpp/h and SrstFile.cpp/h, you can pretty much ignore anything else.

 

Have in mind that since I was only interested in extracting the files at the time, and I wanted to get the thing done fast, the code there is not really suitable at all for insert.

There are parts missing from that KOVS thing and the 0x70CBCCC5 header. You may need to find the meaning of remaining fields to create a repacker for these formats.

I planned to remake these parsers from scratch whenever I wanted to add write support, because that would be easy than fixing these ones.

srsxtool_src.rar

Link to comment
23 hours ago, vagonumero13 said:

g1mtools updated to version 0.9.

 

Changelog:

- Added preliminar version of g1a2fbx.

 

---------

 

You need both a g1m and a g1a file for g1a2fbx.

If you start the program without dragging any file, it will ask you to drag each of them.

Otherwise if you drag one of them at startup, it will only ask you for the other file.

 

The fbx will be saved with same file name as the g1a, but with .fbx extension.

The program is still buggy. Besides of the problems of the g1m part, there is some problem somewhere in the animations conversion. Maybe some problem in the rotation conversion to the format required by fbxsdk (euler, degrees), or maybe due to the interpolation parameters not being adequate. Whatever it is, you may some time see a leg or something else doing weird things : )

 

Due to the interpolation not getting the proper parameters, the animation in fbx may differ from the one in game (I mean, besides the bug above).

Hopefully I will improve  the program with time, and with time there will be a fbx2g1a too.

 

The program has only been tested with body animations. Camera animations won't work at all, and face animations... who knows what can happen there.

That was fast, great job ! Had some stuff this week-end and translating those casts too python were less trivial than I thought so my script hasn't been updated yet.

Great to see that our research was confirmed though, this is awesome cause that means we'll probably have access to many animations from games such as Hyrule Warriors, Dissidia NT etc.

Thanks again for your help in the research, we wouldn't have been able to figure everything out without you !

 

DOA doesn't use skeletal animation for faces ? They use morph targets ?

Link to comment
33 minutes ago, Joschuka said:

That was fast, great job ! Had some stuff this week-end and translating those casts too python were less trivial than I thought so my script hasn't been updated yet.

Great to see that our research was confirmed though, this is awesome cause that means we'll probably have access to many animations from games such as Hyrule Warriors, Dissidia NT etc.

Thanks again for your help in the research, we wouldn't have been able to figure everything out without you !

 

DOA doesn't use skeletal animation for faces ? They use morph targets ?

 

Face animations actually work in the program, but I think there is some issue in the g1m part of the program with faces...

 

And then there is still those camera animations that use the old G1A format, not G2A, I haven't looked those in detail, but the header of G1A is different, and float data is also different in those, they seem to use normal unpacked float numbers. I'd really like to have one of these that isn't a camera animation, it would allow for easier reverse of the format, because if we assume that camera animations use a single bone with ID 0 or 1, it is going to be difficult to guess which thing is the bone ID.  But afaik, there is no old .g1a in DOA6 that isn't camera. I guess I will have to search in other games.

Link to comment
1 hour ago, vagonumero13 said:

 

Face animations actually work in the program, but I think there is some issue in the g1m part of the program with faces...

 

And then there is still those camera animations that use the old G1A format, not G2A, I haven't looked those in detail, but the header of G1A is different, and float data is also different in those, they seem to use normal unpacked float numbers. I'd really like to have one of these that isn't a camera animation, it would allow for easier reverse of the format, because if we assume that camera animations use a single bone with ID 0 or 1, it is going to be difficult to guess which thing is the bone ID.  But afaik, there is no old .g1a in DOA6 that isn't camera. I guess I will have to search in other games.

Atelier Ryza has normal old G1A files for general motion, which is weird because it's G1M format is newer. I'll upload some when I get back to my computer.

Attached are 2 animations and it's skeleton model.

MOB00A_MODEL.g1m MOB00A_00000.g1a MOB00A_00011.g1a

Link to comment
2 hours ago, healingbrew said:

Atelier Ryza has normal old G1A files for general motion, which is weird because it's G1M format is newer. I'll upload some when I get back to my computer.

Attached are 2 animations and it's skeleton model.

MOB00A_MODEL.g1m 2.38 kB · 0 downloads MOB00A_00000.g1a 27.36 kB · 0 downloads MOB00A_00011.g1a 19.77 kB · 0 downloads

Thanks!

Link to comment

Hmm what do you actually call BONE_ID vago ? Is that the actual bone index, the one after a division by 3 like for the blend indices or another thing ? Noticed they were all divisible by 4 in my case so tried that but the result's a mess.

Wanted to make sure then cause it's either that or some rotation stuff, maybe I need to do some parent space to world space change in Noesis. Or maybe the anims I'm working with don't work with my model since I don't have names uh Would be really unlucky seeing how FETH recycles anims on alll characters in this game

Link to comment
1 hour ago, Joschuka said:

Hmm what do you actually call BONE_ID vago ? Is that the actual bone index, the one after a division by 3 like for the blend indices or another thing ? Noticed they were all divisible by 4 in my case so tried that but the result's a mess.

Wanted to make sure then cause it's either that or some rotation stuff, maybe I need to do some parent space to world space change in Noesis. Or maybe the anims I'm working with don't work with my model since I don't have names uh Would be really unlucky seeing how FETH recycles anims on alll characters in this game

 

The g1m has a table that translates from ID to index (in fact, that hex thing I showed some days ago, the day I figured out these were bone ids, the game actually got that from the g1m).

Bone indexes are specific to a particular g1m file, two different g1m don't need to have same bones in same indexes. Thus, why this table exists: it maps the global bone IDs to the local bones indexes.

 

The selected part is part of the table. The "20 03" a bit before is the size (in indices, not bytes) of the table (0x320 = 800 bones, in this case).

Spoiler

image.png.19c700216c29cc7757474d8ec432c246.png

 

So, in short, the index in the table (0-799 in this case) is the bone ID, and the value at that index is the index of the bone in the g1m (in this partcular case, this g1m only had 107 bones). Since a lot of bones don't exist or are not implemented in this g1m, the table has lots of -1.

Link to comment
37 minutes ago, vagonumero13 said:

 

The g1m has a table that translates from ID to index (in fact, that hex thing I showed some days ago, the day I figured out these were bone ids, the game actually got that from the g1m).

Bone indexes are specific to a particular g1m file, two different g1m don't need to have same bones in same indexes. Thus, why this table exists: it maps the global bone IDs to the local bones indexes.

 

The selected part is part of the table. The "20 03" a bit before is the size (in indices, not bytes) of the table (0x320 = 800 bones, in this case).

  Reveal hidden contents

image.png.19c700216c29cc7757474d8ec432c246.png

 

So, in short, the index in the table (0-799 in this case) is the bone ID, and the value at that index is the index of the bone in the g1m (in this partcular case, this g1m only had 107 bones). Since a lot of bones don't exist or are not implemented in this g1m, the table has lots of -1.

Omg I completely missed that. I didn't have a clue about what those 0xFFFF so I was just taking the joint data offset value at the beginning of the G1MS section and then just going there to read the bones' info, skipping the whole section. Thanks a lot, will take that into account, it's probably what I'm missing.

Btw do you happen to know what these G1MM and G1MF sections are ? G1MM seems to be read as a matrix but I don't know what it is used for and the only thing I noticed in G1MF was that it seemed to have the number of submeshes in it but that's it. HealingBrew thinks it's used to handle layering for different files.

Link to comment
25 minutes ago, Joschuka said:

Omg I completely missed that. I didn't have a clue about what those 0xFFFF so I was just taking the joint data offset value at the beginning of the G1MS section and then just going there to read the bones' info, skipping the whole section. Thanks a lot, will take that into account, it's probably what I'm missing.

Btw do you happen to know what these G1MM and G1MF sections are ? G1MM seems to be read as a matrix but I don't know what it is used for and the only thing I noticed in G1MF was that it seemed to have the number of submeshes in it but that's it. HealingBrew thinks it's used to handle layering for different files.

 

The G1MM are the transformation matrices actually used by vertex groups. In that srxstool_src I posted some posts ago,  I also have the source of the g1m parser (files G1mFile.cpp/h). You can take a look at those. In concrete those matrices are used by the G1MGBoneMapEntry.

 

Most of the matrices are built like the transform between the root bone and another bone (and in these cases, they match the resutl of the G1mFile::GetGlobalTransform method). It is possible that the other that don't match this are built from a different source bone other than root. (maybe the unk04 in G1MGBoneMapEntry is a bone, but wasn't confirmed).

 

The G1MF structure contains the numbers of all objects in the G1M file, more or less. Apparently used by the game to pre-allocate things. In some cases if the number of certain kind of object is smaller in the G1MF than in the g1m file, you get a crash, while in other cases, it just works. In any case, look at G1MFData structure, some of the values are decoded, I didn't bother with the rest, because this structure is only really needed when adding new things to the g1m file, not when replacing existing ones.

Link to comment
12 hours ago, vagonumero13 said:

 

The G1MM are the transformation matrices actually used by vertex groups. In that srxstool_src I posted some posts ago,  I also have the source of the g1m parser (files G1mFile.cpp/h). You can take a look at those. In concrete those matrices are used by the G1MGBoneMapEntry.

 

Most of the matrices are built like the transform between the root bone and another bone (and in these cases, they match the resutl of the G1mFile::GetGlobalTransform method). It is possible that the other that don't match this are built from a different source bone other than root. (maybe the unk04 in G1MGBoneMapEntry is a bone, but wasn't confirmed).

 

The G1MF structure contains the numbers of all objects in the G1M file, more or less. Apparently used by the game to pre-allocate things. In some cases if the number of certain kind of object is smaller in the G1MF than in the g1m file, you get a crash, while in other cases, it just works. In any case, look at G1MFData structure, some of the values are decoded, I didn't bother with the rest, because this structure is only really needed when adding new things to the g1m file, not when replacing existing ones.

Thank you ! I'll take a look at all that stuff.

Link to comment

g1mtools updated to version 1.0.

 

Changelog:

-  Added fbx2g1a tool (see usage and remarks below)

- g1a2fbx: the program will now ask if you want to "correct singularities". If enabled, this corrects, in some cases, those animations that do weird things in fbx format (like leg doing almost a 360 degrees rotation, etc).

- g1a2fbx: it will now insert a final keyframe between the previous final keyframe and "end of animation".  (previous version of g1a2fbx would eat the final time)

 

-----------

 

Usage of fbx2g1a: run without parameters, and follow on screen instructions (drag the fbx, and drag the g1m). Or, if you start the program dragging one of them, it will only ask for the other.

 

Remarks about fbx2g1a:

- The g1m is only needed because of bones mapping, nothing else. Usually since all g1m use same bones, the g1m wouldn't really be necessary, but just in case you use some of those special bones that some g1m use. Anyway, if possible, choose the same g1m that was originally used in g1a2fbx.

- a previously existing g1a file is NOT needed, since the program can create it from scratch.

- The program has only been tested with fbx generated by g1a2fbx, but not with "real word" fbx generated by 3ds max, blender, etc,. So I would ask animators to test if it works with those.

- fbx2g1a currently sets linear animations, regardless of wether the fbx animation was linear or not. In practice, this means that the animations in the g1a file will look "more robotic" and have less quality that the one in the fbx. Whenever I learn the maths to generate the coefficients of the damn cubic function, I will fix that.

Link to comment
1 hour ago, z22901206 said:

GUST works great, i do like these characters.

I upload some g1m and g1a files, GUST_g1m_g1a (some g1a lost).

I know these tools are used for DOA. But i hope you can add support for these game.

 

Gave a quick look and they look like standard g1m files, semory's gas machine or daemon's tool should probably work for these.

Spoiler

Capture.png

Capture1.png

Didn't find some g1a in your samples after a quick look though so can't say if that's the old or new version supported by vago's tool.

 

EDIT: Nvm, found some g1a in your samples. These are old g1a, not yet supported for the moment.

 

@vagonumero13 sent you some simplified code in DM to make the unpackfloat/interpolation function easier to read

 

 

 

Link to comment
On 1/8/2020 at 10:29 PM, Joschuka said:

Gave a quick look and they look like standard g1m files, semory's gas machine or daemon's tool should probably work for these.

 

Thx, so is it possible to fix the bone name? I can only get the name looks like ID, exported by ffnst.

Another question, if i make a "ID ReadalbeBoneName" table manually, just like "joint_10 neck, joint_1 head".

Does anyone know how the blender code is? 

Link to comment

Just downloaded all the files needed. Please give me step by step. New to this. Moved REDELBE to DOA6 file on steam apps as well as dinput. Then put the SaafRats Nude Mod in the REDELBE File. What am I missing? When I load the game, it shows REDELBE in the lower right corner, but I cant get the mods to show up, even when I press "select, L2, F" 

 

Thank you!!!!!!!!!!!!!

Link to comment

Hey everyone !

If that possible, Can someone explain the different textures types of DOA6 and what should do in game materials.

_kidsair

_kidsalb

_kidsnmh

_kidsocc

_kidsrfr

_kidsshl

_kidswtm

_kidss4m

_kidsthk

_kidsnmb

I already know some of them but if someone know in details (Is it just RGBA or Layers of SRMA (Specular, Roughness Metallic and AO) .... etc .

Thanks 

Happy good times !

Link to comment
On 1/10/2020 at 1:25 PM, z22901206 said:

Thx, so is it possible to fix the bone name? I can only get the name looks like ID, exported by ffnst.

Another question, if i make a "ID ReadalbeBoneName" table manually, just like "joint_10 neck, joint_1 head".

Does anyone know how the blender code is? 

You won't be able to get the bone names just with the g1m files, some other stuff is needed

 

@vagonumero13 HealingBrew started working on g1a, you can find the BT on the repository.

Link to comment
1 hour ago, Joschuka said:

You won't be able to get the bone names just with the g1m files, some other stuff is needed

 

@vagonumero13 HealingBrew started working on g1a, you can find the BT on the repository.

 

Ah, thanks. I will take a look. I had previously started a bit, but didn't dig too much. I just saw that offsets were specified as  offset / 16, and well, DOA6.exe in concrete checked for numbers 0x65 and 0x66 in some value (i think they are additional spline type in that code, maybe specific for cameras). The DOA6 code was specific for camera animations, as DOA6 doesn't seem to support old g1a for regular animations. And I saw the float at offset 0x10 being multiplied by 60.0 (and the result was an exact number), but wether that multiplication was done, depended on some flags of other parts of the header.

 

For value 0x65, it performed 6 calls to some function (that got those float values) with a index parameter value going from 0-5. When it was 0x66, it perfromed the same 5 operations, but preceded by a call with index 8.

 

And after that, they performed two more calls to that function, with index 6 and 7. So, for 0x65, it was a total of 8 operations, and for 0x66, 9 operations.

Before the calls to function with index 6 and 7, the exe used some sqrtf and sin/cos functions, so I guess rotation happened before index 6&7.

Since these splines types aren't in that code, I'll leave some example of camera animations from DOA6 that use the value "0x66" (I couldn't find one that used value 0x65) in case HealingBrew want to check those additional types.

 

Edit: it looks like index 0-5 are used for rotation (or rotation + scale?), and 6-7 (and 8 for 0x66) for translation.

I think that the difference between 0x65 and 0x66 is that 0x65 doesn't use translation on y axis.

 

LEI_CAMERA_7020_WIN.g1a MAR_CAMERA_7010_ENT.g1a

Link to comment
On 1/15/2020 at 11:28 AM, vagonumero13 said:

Edit: it looks like index 0-5 are used for rotation (or rotation + scale?), and 6-7 (and 8 for 0x66) for translation.

I think that the difference between 0x65 and 0x66 is that 0x65 doesn't use translation on y axis.

Depends on the value. Ryza uses 0x4 and 0x2 (Quat+Vec3 and Quat) Nights of Azure uses 0x6 and 0x1 (Vec3+Quat+Vec3, and Vec2.)

The value might be a type id, judging by the way it's checked.

So far it doesn't really make any other sense.

0x1 = 2 indices

0x2 = 4 indices

0x4 = 7 indices

0x6 = 10 indices

0x65 = 8 indices

0x66 = 9 indices

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use