Jump to content

Super Galdelic Hour (PS2) *.vug / *.vu1 / *.vu0 / *.mot


Recommended Posts

Posted

Hello all, I'm new to ResHax. And I'm opening up a new topic here because I would like to see if it's possible (if anybody wants to help me out) to rip the 3D models from this very strange and beautiful PlayStation 2 party game only released in Japan called Super Galdelic Hour. Me and a discord friend of mine managed to extract the game's data from the DATA.BIN/DATA.FAT files, and inside were a bunch of unique file formats that the game uses such as .EGG, .SEQ, .VUG, .VU1, .VU0, .MOT/BIN, and .BD/HD/SD. Each file format has a different purpose as explained down below.

 

EGG: This is for graphics and textures. (Special thanks to BoringHexi for helping me extract all of the game's graphics and textures!)

SEQ: Camera animations maybe.

VUG: This stores the 3D geometry for each character and piece of scenery in the game.

VU1/VU0: This stores 3D geometry for objects and miscellaneous models.

MOT/BIN: Animations!

BD/HD/SD: This is for audio, sound effects and voice clips while SD files are used for sequenced music.

 

Our main focus for this topic is ripping the 3D models of the characters, objects and scenery from the .VUG/VU1/VU0 files, and maybe animations from the .MOT/BIN files. The ZIP file attached down below contains all of the necessary files that I pulled from the extracted game files for the topic. If anybody wants to help me out with this as a collaborative effort, feel free to be my guest as that would be much appreciated!

galdelic_vu_files.zip

  • Engineers
Posted (edited)

The game uses vif tags. Generally it's like so where the signature and blocks are different usually for other games.

(uvs will be checked later) edit: done

Appended H2O files are for the bg00.vug only! (hex2obj required)

Quote

Unzip the H2O files to your vug folder. They are for the model bg00.vug.

In hex2obj_0.25b load the model bg00.vug then toggle buttons 'noStr' to 'Strip'
and 'noPtC' to 'Fake'.

Choose File "SaveAs Mmesh" (multiple mesh) to create obj files from all contained submeshes.

May take some seconds.

After hex2obj processed the H2O files there should exist the same amount of obj files
in the vug folder named from *_0.obj to *_xx.obj.

Before executing load_multi_obj_blender2.69.py in a blender Text Editor window make sure
to have set "path_to_obj_dir" to YOUR vug directory.

Also be sure that there are no obj files in a maybe contained subdirectory.
(they would be loaded, too)

Best choice would be to have a separate folder for each vug and its obj files.

 

Copy the code into a text file and rename it to import_multi_obj.py for example (not tested with blender versions >= v3.0).

import os
import bpy

# http://blender.stackexchange.com/questions/5064/batch-import-wavefront-obj
# put the location to the folder where the objs are located here in this fashion
# this line will only work on windows ie C:\objects
#path_to_obj_dir = os.path.join('C:\\', 'objects')
path_to_obj_dir = os.path.join('D:\\', 'your_path\\vug')

# get list of all files in directory
file_list = sorted(os.listdir(path_to_obj_dir))

# get a list of files ending in 'obj'
obj_list = [item for item in file_list if item[-3:] == 'obj']

# loop through the strings in obj_list and add the files to the scene
for item in obj_list:
    path_to_file = os.path.join(path_to_obj_dir, item)
    bpy.ops.import_scene.obj(filepath = path_to_file)

 

galdelic-bg00.vug_0000.zip

bg00-uvs.png

Edited by shak-otay
zip appended
  • Like 1
Posted

It seems to work alright, however I eventually ran into a go2 error saying "UV address greater than filesize". Would it be easier to handle all the meshes through a Noesis script if someone is capable of writing one? And I'm also unsure if there are assigned materials to them too which would save the hassle of texturing each poly by hand. But there's still the character "human" vug meshes yet to test out.

  • Engineers
Posted (edited)

Thanks. But I have no idea how to add the textures manually (or even automatically).

bg00_03.png

edit: joining sub meshes manually ends up in wild guessing which texture(s) to use:

test.png

Edited by shak-otay
  • Like 1
  • Engineers
Posted (edited)

Finally a tool to create H2O files from vug files. Not heavily tested.

You'll need to find out for yourself which sub meshes to join to apply textures to them.

(I have no idea how textures are referenced or connected to the sub meshes.)

To get an idea I'd suggest to use a small vgu with a few textures only.

Make_obj-Galdelic-vug.zip

Edited by shak-otay
  • Like 1
Posted

This method almost works! I decided to test it out with Toko, one of the characters for example. It doesn't completely get all the meshes, (notice the holes in her head plus the missing body which I also tried importing,) but it's slowly getting there! Upon importing, I had to invert the Y and Z axis of the model and the Y axis of the UVs for it to be right-side-up. But good work, keep it up!

f0_solid.png

f0_texture.png

  • Engineers
Posted (edited)
On 7/9/2025 at 1:48 AM, R7CrazyCanucks said:

This method almost works! I decided to test it out with Toko, one of the characters for example. It doesn't completely get all the meshes, (notice the holes in her head plus the missing body which I also tried importing,)

I have no idea where the holes come from.

Use the exe from the zip here (needs dlls from previous zip) to get the rest of the body.

toko_uvs.png.63e03d7571c617535dbb1a2ff980b0ac.png

For some unknown reason 47% of toko's sub mesh blocks don't have an uv block (the exe from the previous zip needs a correction because it misinterpretes normals as uvs).

Still weird to join sub meshes manually (see shoe):

toko_shoe_uvs.thumb.png.fa5ea2fdd4bd228d0660c815ff77bc27.png

 

 

Edited by shak-otay
  • Like 2
Posted (edited)

Looking good! The holes issue could maybe be a thing with either how hex2obj handles it or the H2O converter. The new exe seemed to behave differently with the previous VUG I used (f0.vug) as supposed to the old exe which gave me a lot more sub-meshes. Hopefully you can think of a solution for it to read everything a little more accurately and find a method for it to join the sub-models together for you with maybe some material IDs that might be in there. Grouping them properly would be pretty tricky though because take the eyeballs in f0.vug for example. There are two models for both eyeballs and two meshes for the shine in her eyes. They're all positioned in the center of the 3D scene. The two eyeballs uses two textures and the other two meshes use only one from the face00.egg file. So if they were grouped by just those textures, it would be pretty painstaking to separate them by hand.

Edited by R7CrazyCanucks
  • Engineers
Posted (edited)
13 hours ago, R7CrazyCanucks said:

Looking good! The holes issue could maybe be a thing with either how hex2obj handles it or the H2O converter.

The H2O creator just logs addresses of blocks - if it overlooked blocks (which is possible, of course) there would be bigger holes.

I think it's a matter of the tri strips algo which hex2obj uses. Tested 2 variations or so (with other formats), the results usually didn't change that much.

Quote

The new exe seemed to behave differently with the previous VUG I used (f0.vug) as supposed to the old exe which gave me a lot more sub-meshes.

...vug-char.exe was for characters only. I've replaced it with a more unique one (see my previous post).

Quote

Hopefully you can think of a solution for it to read everything a little more accurately and find a method for it to join the sub-models together for you with maybe some material IDs that might be in there. Grouping them properly would be pretty tricky

Sadly this took more time than planned, already. Also I usually do not do deep analysing. The tool was meant to serve as kind of startup.

If you find material IDs, vertex groups, whatever feel free to report so that I could take a look at.

(For now I have to care for my dozen other projects.)

 

edit: some vug files have tables at the beginning, containing offsets to "VG1". Interestingly the count seems to match with the amount of textures, for bg00 at least. So it seems clear that all sub meshes between two VG1 "markers" should be joined. Will test that asap.

edit:

bg00-textured.png

Treating the H2O files in groups (manually).

tex11.png

(too bad, toko has 2 table address entries only...)

Edited by shak-otay
  • Like 1
  • Engineers
Posted (edited)

Doesn't make sense to recode before some problems aren't solved, so I just logged separating lines to mark the sub meshes which belong to a texture ("texture group").

View Makeobj_log.txt for bg00.vug

Quote

# tex11 - - - - - - - - - -
# 340. 0x234c0 4  
...

# 532. 0x34110 4  
# 533. 0x34218 4  
# tex12 - - - - - - - - - -

So for tex11 (bg00_11.png) you'll need to treat the H2Os
_340 to _533 as a group. Copy them to an extra folder
where you use hex2obj, save as MMesh (multiple meshes)

(the counting for the created obj file starts from 0 for each group)

then import them to blender where you join them after border selection for example.

Now you can apply the texture (works in v2.79 without adding a material, btw).

Problems, bg00.vug:

One face is to less to keep a whole texture...

# tex1 - - - - - - - - - -
# 63. 0x8480 4  
# tex2 - - - - - - - - - -
# 64. 0x8710 4  
# tex3 - - - - - - - - - -
# 65. 0x89a0 4  
# tex4 - - - - - - - - - -
# 66. 0x8c30 4  
# tex5 - - - - - - - - - -
# 67. 0x8ec0 4  
...
# tex14 - - - - - - - - - -
# 608. 0x49030 4  

bg00_15.png (face) and sub mesh don't match.

etc..

Exe needs dlls from zip here to work!

edit: the face (bg00_15.png) belongs to tex13 sub mesh group, dunno why):

Make_obj-Galdelic-vug-texGroups.zip

bg00_face.png

Edited by shak-otay
  • Like 1
  • Engineers
Posted

I noticed that 00.vug(from toko's folder) has two "VU1" files. You can see that in main header(image1). I tried to make a Noesis script but I got holes too, lol. I don't know why, this is weird...

toko_00vug_header.png

toko_00vug.PNG

  • Like 1
Posted

Nicely done! That is strange how the holes issue crosses over from hex2obj to here too. Hopefully you can find a solution around that, there are no holes on the models as they appear in-game.

  • Engineers
Posted (edited)
3 hours ago, R7CrazyCanucks said:

That is strange how the holes issue crosses over from hex2obj to here too.

This seems to indicate that it's a matter of how the triangle strips are generated automatically.

Quote

Hopefully you can find a solution around that, there are no holes on the models as they appear in-game.

Speaking for me only I never saw this issue. Holes, yes, but bigger ones, not these "one-face-holes".

There should exist scripts to fix this.

(I'll check meshlab for such a feature when I'm back to office.)

edit: well, the feature

Filters > Remeshing, Simplification and Reconstruction > Close Holes

does increase the holes. So it not meant to be used with one-face-holes, seems.

Blender, Non-Manifold operator Works with v2.79 (disadvantage see pictures)

faceWithHoles.png.71dee2187974cbe5452734838bf53988.png

Non-Manifoldblender.png.f99053f579e4bddc5d51f624b37aa9f0.png

Quote

    14 hours ago, roocker666 said:

    I noticed that 00.vug(from toko's folder) has two "VU1" files.

That's too less. For character models there must be other indicators (material IDs, vertex groups, whatever) to group vertex blocks together.

 

 

Edited by shak-otay
  • Like 3

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
×
×
  • Create New...