doctor_science Posted April 9, 2025 Posted April 9, 2025 5 hours ago, xenodoax said: what are kidsobjdbs they're a database format. they control a lot of stuff, and they're a bit of a cross-reference hell, but control+f and having tabs in vs code or notepad++ etc can help navigate that. i'll talk about environments because that's what i have the most experience with making the stage mods for doa 6++ Spoiler there are a bunch of different databases for general lighting/weather, point lights, 3d objects, flowing water, and probably some other DW engine stuff doa 6 didn't use. Starting with some model file like we did with the costumes and CharacterEditor, we'll find it referenced in a database called like (stage name).kidssingletondb, "singleton", which has all those entries associating objects with their textures, materials and colliders. I don't know the actual order of operations in stage loading but I assume singleton is what gets loaded into memory. Following from the Display set object in singleton we'll find a (stage name).stage.kidsobjdb, "stage", which is a sort-of initializer for stage objects, like we have to populate WallAttribute or GroundAttribute here if we want to make something a wall or floor later. These also serve as default values. Next is (stage name).stage.kidsscndb.kidsobjdb, "scene", which is where all the 3D objects that actually get placed are set. There'll be ten placed benches that all point back to the same bench in "stage" and then positioned, scaled, rotated etc as needed. there's a weird fourth database where the list of object names in scene (and another one called planner, which is spawn points) are duplicated and given some parameter that has to do with their game functions, and if you have a tree at (0, 0, 0) named 0x1234abcd it won't be drawn by the game if 0x1234abcd isn't in this list. you can freely add hashes to this list up to some object limit that never matters. if you want to change A bench into a tree you'd change the "scene" entry to reference the "stage" entry for the tree if you want to change every bench into trees you'd change the "stage" entry to reference the "singleton" entry for the tree if you want to change every bench into a sofa you'd copy all the "singleton" entries for the sofa from the other map it's on and change some names. if you want to add another bench you'd make an entry in "scene" and make up a hash name for it and add that to the list in the other one. i think these exist for prism, i know the singleton ones do but i've been having a bad couple weeks so I haven't gotten anything done and of course we don't have proper names so it'll be like 0x3299ac3 points to 0xb32d58a points to 0x8cc351 points to 0x12b145fml here's a laid out level from the samurai warrios demo which i was only able to do with an understanding of the database crossreferencing Spoiler
xenodoax Posted April 9, 2025 Posted April 9, 2025 13 hours ago, xenodoax said: We can already get the files out and mod them, as I've demonstrated earlier. But we need to understand the weight system or there's no hope. There are arbitrary rules though it appears if broken can lead to game crash when attempting to implement modifications using g1m tools. I attempted to make changes to the stylish dress outfit by removing the lower skirt meshes. By dropping the .vb/.ib meshes that handle that geometry and then re-compiling into fdata package, that led to a game crash when attempting to view the suit in game. So as a potential workaround, I tried editing those meshes to have no geometry (deleted all vertices) - but kept the .vb/.ib files intact when the package was re-compiled. The result was the same - the game crashed. Spoiler 1
Orbt3 Posted April 9, 2025 Posted April 9, 2025 How are you guys extracting the models? With the g1m exporter? Does it have an armature?
xenodoax Posted April 9, 2025 Posted April 9, 2025 1 hour ago, Orbt3 said: How are you guys extracting the models? With the g1m exporter? Does it have an armature? Yes my current process is to fetch the .g1m I want to export using Noesis. Get that file into the g1m exporter. Then run export meshes. The result is a directory of vb/in/fmt/vgmap files separated out into segmented meshes. Some objects are cohesive, but lots of objects are segmented. An armature? I may need an explanation as to what that is. But I can use the "glft" tool to get the skeleton of that same g1m.
doctor_science Posted April 9, 2025 Posted April 9, 2025 (edited) there's some bytecode Name Arrays in ProjectCommonResource.motor.kidscndb, decoded and attached. hat tip to gatto tom reminding me those existed. as a bonus, this array <Obj Type="Index" Name="0x61AD16CF|FE4MotorCommonSetting[基本]" TypeName="0xDAC911D7|TypeInfo::Object::MotorCommonSetting" Index="29"> <Prop Name="0x04781136|StageKeyHashArray" Type="UInt32"> <Array> <Element Index="0">0x22A8084B</Element> <Element Index="1">0xA6C7AD81</Element> <Element Index="2">0xE5163D17</Element> <Element Index="3">0xB761D4DA</Element> <Element Index="4">0x9FCB9783</Element> <Element Index="5">0xF07CF73B</Element> </Array> is probably the stage ID hashes as used by whatever system is loading them. if you swap these in memory with cheat engine you could probably load certain events on the "wrong" place. might be amusing. VVP ProjectCommonResource.motor.kidscndb 'name array'.txt Edited April 9, 2025 by doctor_science
superzero9999 Posted April 9, 2025 Posted April 9, 2025 5 hours ago, xenodoax said: There are arbitrary rules though it appears if broken can lead to game crash when attempting to implement modifications using g1m tools. I attempted to make changes to the stylish dress outfit by removing the lower skirt meshes. By dropping the .vb/.ib meshes that handle that geometry and then re-compiling into fdata package, that led to a game crash when attempting to view the suit in game. So as a potential workaround, I tried editing those meshes to have no geometry (deleted all vertices) - but kept the .vb/.ib files intact when the package was re-compiled. The result was the same - the game crashed. Reveal hidden contents Yeah I think there's mechanism somewhere that checked the integrity of file/geometry structure that prevents change to vertex count. Could you try it with, for example, delete the inner skirt geometry and then create a small cube that's subdivided to have the same amount of vertices with the original inner skirt, and rename it so that it have the same name with the original inner skirt geometry name and launch the game? If it launch then the mechanism might only be protecting the vertex count, if the game crash then it might be something else... If the game launch then maybe we can try to manipulate the modded geometry to be very small, or located somewhere not noticeable or something else. The best method is of course if we can identify and remove the mechanism that checks the vertex count so that we can add or remove new geometry to the game to our heart contents, but until we get that maybe we can try to "trick" the mechanism to think that everything is a ok. 2
Haise Sasaki Posted April 9, 2025 Posted April 9, 2025 2 hours ago, xenodoax said: Yes my current process is to fetch the .g1m I want to export using Noesis. Get that file into the g1m exporter. Then run export meshes. The result is a directory of vb/in/fmt/vgmap files separated out into segmented meshes. Some objects are cohesive, but lots of objects are segmented. An armature? I may need an explanation as to what that is. But I can use the "glft" tool to get the skeleton of that same g1m. if only we had a tool that would let us import g1ms to blender and then back to the g1m format
xenodoax Posted April 9, 2025 Posted April 9, 2025 5 minutes ago, Haise Sasaki said: if only we had a tool that would let us import g1ms to blender and then back to the g1m format The g1m tool is basically doing that already. It breaks the .g1m apart into its individual sub-meshes.
woofhat Posted April 10, 2025 Posted April 10, 2025 @amorrow28 updated the tool g1m_exporter_v1.3.15 (https://github.com/eArmada8/gust_stuff ), now you can unpack and repack the g1m files properly 3
Orbt3 Posted April 10, 2025 Posted April 10, 2025 (edited) 17 hours ago, xenodoax said: Yes my current process is to fetch the .g1m I want to export using Noesis. Get that file into the g1m exporter. Then run export meshes. The result is a directory of vb/in/fmt/vgmap files separated out into segmented meshes. Some objects are cohesive, but lots of objects are segmented. An armature? I may need an explanation as to what that is. But I can use the "glft" tool to get the skeleton of that same g1m. Yeah that's what I meant the skeleton, so glft for getting the skeleton got it, thank you! What about Noesis export of the g1m? It's not as good? Or not compatible to inject the modified model? Edited April 10, 2025 by Orbt3
minazuki Posted April 10, 2025 Posted April 10, 2025 @xenodoax I think you can't have 0 vertices in ib/vb, this is same as 3Dmigoto in XVV. You must at least have a face (3 vertices). You can edit the mesh as you want like adding extra faces. For the weight problem, I found that I need to Normalize All weight and Export all segments in Blender. (You can't just export one segment, even you edit one only) If I do that the seams have gone.
xenodoax Posted April 10, 2025 Posted April 10, 2025 2 hours ago, minazuki said: @xenodoax I think you can't have 0 vertices in ib/vb, this is same as 3Dmigoto in XVV. You must at least have a face (3 vertices). You can edit the mesh as you want like adding extra faces. For the weight problem, I found that I need to Normalize All weight and Export all segments in Blender. (You can't just export one segment, even you edit one only) If I do that the seams have gone. Hey @minazuki - I've been normalizing all but the issue is that for that one particular suit, where the segmentation happens between mesh 2 and 5, the weights just do not sync up because they're separated. Could you explain if you were able to export a body mesh with absolutely no seam, the steps you performed to do so? For instance - did you do any joining of segmented meshes and/or weight transfer to/from the template to the vanilla body, or the opposite? Thank you
fitzgerald4 Posted April 10, 2025 Posted April 10, 2025 We need a more precise g1m import/export add-on for Blender that can handle cases with a lot of extra data in submeshes, like when stride=144.
minazuki Posted April 10, 2025 Posted April 10, 2025 @xenodoax Just like what I say Normalize All and Export all segments. Do you have tried? I have try modified the body before, but is is too hard for me. Now, I just try to do a simple fix, it still ugly after the fix 🤣 The arrow is my fixed part, if I just export mesh 5, it will have seams. If I Normalize All and Export other body segments, the seams are gone. Noted: I do not have export mesh 6, 7, so it still have seams on there. And only have a normal seams now. 9
xenodoax Posted April 10, 2025 Posted April 10, 2025 44 minutes ago, fitzgerald4 said: We need a more precise g1m import/export add-on for Blender that can handle cases with a lot of extra data in submeshes, like when stride=144. What would that entail? I saw g1m tools was recently updated.
Snow balls Posted April 11, 2025 Posted April 11, 2025 On 11/2/2024 at 3:37 AM, The Heavy Lobster said: You'll have to use a VPN to change your store region from US to one in Asia. I use Singapore for my alt. People have said in the past you can do this to obtain Venus Vacation and then switch your store back to US when you already have it downloaded but that only works because VV is F2P. With PRISM costing money if you change your store region, you're going to have to also have a form of payment from that region as well. Your US issued debit card/PayPal won't work (though some have speculated a credit card capable of international purchases may). It's best just to make an alt account in a different region and play both VV and PRISM on that since the two games are going to share content and therefore, you'll want to have both under the same account. 1. Completely sign out of your main Steam account on both the client and web browser. 2. Use a VPN and choose you locale somewhere in Asia (I recommend Singapore). 3. Open your web browser and navigate to the Steam website. Create a new Steam account. 4. Your new Steam account should now be set to the foreign store front you chose by default (Singapore store for example). Now log into your new Steam account via the client while the VPN is still active. 5. Search for and download Venus Vacation. Then search for Venus Vacation PRISM. Wish list it. And you can now turn off the VPN and continue to use your alt account to play VV and PRISM any time WITHOUT THE NEED OF VPN. The VPN is only necessary for the initial setup, not every time you play. Now the way you'll purchase PRISM is to use your MAIN steam account and add your alt account as a friend. Wait 72 hours and after that you'll be able to use your main Steam account to send Steam gift cards to your alt account. So, on your main account if you send a $50 USD gift card for example to your alt account, it will automatically convert the currency and add the funds to your alt account's Steam wallet enabling you to buy the game. Still works as of today, thanks. Also great work on the progress you guys. Can't wait to see all the mods yall come out with. 2
Haise Sasaki Posted April 11, 2025 Posted April 11, 2025 5 hours ago, xenodoax said: What would that entail? I saw g1m tools was recently updated. something like the RE mesh tools do, import export G1M formats with correct submesh, mat and bone info and maybe export should reconstruct the G1M file
xenodoax Posted April 11, 2025 Posted April 11, 2025 (edited) 10 minutes ago, Haise Sasaki said: something like the RE mesh tools do, import export G1M formats with correct submesh, mat and bone info and maybe export should reconstruct the G1M file Have you tested this tool with these g1m's? Do you have a link to this RE tool? I too am starting to be convinced the g1m export script we've been using is creating the seam problem. I am 99% positive that I have a process that is transferring the weights smoothly and I can see a beautiful gradient on bone 2 weight where there is no jagged weight variation. Yet when the objects are exported, there are visible gaps in the segments appearing - even in places I'm not making any modifications. Please see these screenshots (open spoiler): Spoiler Edited April 11, 2025 by xenodoax
woofhat Posted April 11, 2025 Posted April 11, 2025 (edited) @amorrow28 has developed a set of tools for Yumia. https://www.loverslab.com/topic/247708-atelier-yumia-the-alchemist-of-memories-nude-mods-request/page/16/#findComment-7000927 Using these tools, it is possible to find out the texture (g1t) files associated with the model file (g1m). Luckily, these tools can also be used in PRISM by simply replacing this file: CharacterEditor.kidssingletondb.kidsobjdb.json.7z The source of this file is CharacterEditor.kidssingletondb.kidsobjdb, provided by @doctor_science https://www.loverslab.com/topic/238458-prism/page/6/#findComment-6995016 Many thanks to amorrow28 for developing the useful tools, and to doctor_science for providing the file. Edited April 11, 2025 by woofhat 5
doctor_science Posted April 11, 2025 Posted April 11, 2025 11 minutes ago, woofhat said: oh uh yeah you can do it that way. cool. i have some pieces of a more generic script configured so you drag an xml file and a ktid file into the powershell prompt earlier in this thread we've gone over how to manually find the ktid file associated with your a g1m and my parseXMLandKTIDforG1T_names.py will spit out a list of g1t file hashes which you can then look up manually, however i do not recommend this because costume can have 50+ textures so what's missing is automation for finding all of those files and copying them somewhere convenient, either out of an fdata dump or an extract all from qrdbtool 3.x i've also included ktidEndianSwap.py which just takes a ktid file as arguments and spits out a list of database object names formatted how you'd search for them in the xml files, you probably don't actually need this, although it might be convenient for stage modding if anyone cares to do that. idk if xenodoax is still working on something, the script design problem for me with going from g1m to g1t files is that you have to tell the script where a whole bunch of stuff is and I don't want to think very hard about how people are organizing their files or assume people are willing to sit on 40 GB of extracted files to accommodate a script that hasn't been written yet. ktid scripts unfinished.zip
minazuki Posted April 11, 2025 Posted April 11, 2025 @xenodoax If you don't mind you could send me your blender file and see if I can fix it by "Normalize All" weight.
xenodoax Posted April 11, 2025 Posted April 11, 2025 4 hours ago, woofhat said: @amorrow28 has developed a set of tools for Yumia. https://www.loverslab.com/topic/247708-atelier-yumia-the-alchemist-of-memories-nude-mods-request/page/16/#findComment-7000927 Using these tools, it is possible to find out the texture (g1t) files associated with the model file (g1m). Luckily, these tools can also be used in PRISM by simply replacing this file: CharacterEditor.kidssingletondb.kidsobjdb.json.7z The source of this file is CharacterEditor.kidssingletondb.kidsobjdb, provided by @doctor_science https://www.loverslab.com/topic/238458-prism/page/6/#findComment-6995016 Many thanks to amorrow28 for developing the useful tools, and to doctor_science for providing the file. This python script takes this concept one step further and exports out the .g1t files associated with a specific .g1m to your User directory. To use - **** HIGHLY RECOMMEND setting your .g1t files to open by default in Windows using the qg1t_tool.exe. That way you will be able to simply double click the exported .g1t files to open them. **** Then: 1. Save the script to the same directory where CharacterEditor.kidssingletondb.kidsobjdb.xml exists 2. Set your path appropriately at the top of the script for your XML path to CharacterEditor.kidssingletondb.kidsobjdb.xml 3. Set your path appropriately to your fdata exported content directory (where your .g1m's and .g1t's are) 4. Run the script. 5. Enter a .g1m hash ID without 0x or file extension. Example for Tamaki's default suit: d33ce0ab get_g1t_files_for_given_g1m 1.1.zip 1
fitzgerald4 Posted April 11, 2025 Posted April 11, 2025 (edited) On 4/11/2025 at 7:51 AM, xenodoax said: What would that entail? I saw g1m tools was recently updated. The current Blender plugin doesn’t let you edit or transfer the extra info in the fmt files of the jiggly breasts and asses submeshes (like stride=144) through the Blender GUI. element[9]: SemanticName: PSIZE SemanticIndex: 0 Format: R16G16B16A16_UINT InputSlot: 0 AlignedByteOffset: 92 InputSlotClass: per-vertex InstanceDataStepRate: 0 element[10]: SemanticName: FOG SemanticIndex: 0 Format: R16G16B16A16_UINT InputSlot: 0 AlignedByteOffset: 100 InputSlotClass: per-vertex InstanceDataStepRate: 0 element[11]: SemanticName: TEXCOORD SemanticIndex: 8 Format: R32G32B32A32_FLOAT InputSlot: 0 AlignedByteOffset: 108 InputSlotClass: per-vertex InstanceDataStepRate: 0 element[12]: SemanticName: TEXCOORD SemanticIndex: 9 Format: R32G32B32A32_FLOAT InputSlot: 0 AlignedByteOffset: 124 InputSlotClass: per-vertex InstanceDataStepRate: 0 element[13]: SemanticName: SAMPLE SemanticIndex: 0 Format: R32_FLOAT InputSlot: 0 AlignedByteOffset: 140 InputSlotClass: per-vertex InstanceDataStepRate: 0 This info consists of a total of 44 bytes of integers or floating-point numbers, which are crucial for physics calculations and can’t be ignored. For example, if you run the script below in Blender, you’ll see internal values in the console: import bpy print("# START") for key, attrs in bpy.context.object.data.attributes.items(): if key[0].isupper(): if (attrs.data_type == "FLOAT2"): print("-", key, [d.vector for d in attrs.data[0:10]]) # first 10 only else: print("-", key, [d.value for d in attrs.data[0:10]]) print() Here’s an example of the output: you’ll be surprised by how much information there is! - SAMPLE.x [0.018100343644618988, 0.28390106558799744, ... - FOG.x [154, 153, 153, ... - FOG.y [155, 154, 154, ... - FOG.z [161, 160, 160, ... - FOG.w [162, 161, 161, ... - PSIZE.x [93, 92, 92, ... - PSIZE.y [94, 93, 93, ... - PSIZE.z [101, 100, 100, ... - PSIZE.w [102, 101, 101, ... - TEXCOORD.xy [Vector((0.5570319294929504, 0.7939812541007996)), ... - TEXCOORD1.xy [Vector((0.5383786559104919, 0.6441685557365417)), ... - TEXCOORD8.xy [Vector((0.06472702324390411, 0.36945950984954834)), ... - TEXCOORD8.zw [Vector((0.012507515028119087, 0.8781576156616211)), ... - TEXCOORD9.xy [Vector((0.013293309137225151, 0.870502769947052)), ... - TEXCOORD9.zw [Vector((0.002568730153143406, 0.974976658821106)), ... If these are used for physics, they likely represent the physical weight and jiggle on each vertex. Ideally, we should be able to graphically edit these values, like using a temporary Vertex Group or UV map in Blender, but unfortunately, the current Blender plugin doesn’t support that. So, in my previous post, I suggested a "temporary workaround" by reducing the stride to give up on the submesh jiggling. But what we really need is a new Blender plugin (or a fix for the existing one) to resolve above issue. Edited April 13, 2025 by fitzgerald4 2
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now