FFVIII Guardian Force files (help)

  • Thread starter Thread starter Softtm17
  • Start date Start date
Status
Not open for further replies.
S

Softtm17

Guest
Hi to everyone guys. (i'm italian so sorry 4 my bad english)
I'm trying to find and extract the 3d model of GF.
I've made some research...and various model are in battle.fs, inside some Mag*.dat files.

Now...before explain the situation....
I'm a newbie in this sort of things...so i'm trying to find some details/information for anyone who can work on it.

So in this moment there is the new PY plugins for noesis that can extract the "chara.one" in others files containing the npc/items models.
With noesis you can also see some texture of effects and G.F......where? -> Inside Battle.fs
After the enemy/main charachters files there are the Mag*.dat files.
A lot of the are basically just the animation and texture of the magics itself but some of this are the instruction/texture/models of G.F.

I've compared the type of file and here the result:
zy7lnm.jpg

First 2 files are buel and red bait...
I'm not a genius in hex edit or in the structure of a file, but i've done some stupid work for dissidia and i've resolved some little problem in some gim file replacing a part of the beginning of the file with another one of another (working) file.
I've tried to do the same here but with no result.
As you can see the c0m*dat files are basically the same.
There is the beginning-header part (light blue) - some information inside the blue one, and the ending of the initial structure (green part) after that there are just all the informations about texture/model/bones etc
Looking these, i've tried to hex edit some mag*.dat files....
I've tried to open the mag186_a.dat, *b.dat.......*g.dat....they are splitted in more file (the G.F.)
Some have just a short string (0 to 3) other one have some complete different instrunction inside...except the "b" one....
In noesis if you try to open the Mag186_a.dat you can see the odin texture....if you try to pen the b one...you can't.
If you see the picture it have a very similar structure of the c0m files...(so, i'm thinking, inside there there is the 3d model...) but is more short.
I've tried to replace or add some strings but without results....
Others:
In another one i've found the AKAO header (Mag186_g.dat):
1z48fuv.jpg

And in the last one (the biggest Mag999_a.dat) you can found another header MNS with the name of Shun moriya inside:
1ilxzl.jpg


Anyway, if you can do anything, or give some help, will be very appreciated.
Thanks in advance for your support ^^.
 
I'm not sure what to advise other than expanding the header and adjusting the offsets to match the types of battle model that Noesis supports.
I do have a list of where some of the GF models are.

"Alternate format" means that the model uses a different header format that lacks a section count, that the model data does not start at the beginning of the file, and that the model's textures are not TIM-format.

battle.fs:
  • mag005_b.05 (Alternate format) - Leviathan
  • mag094_b - Siren
  • mag099_b - Fat Chocobo (ChocoBocle)
  • mag115_h.07 - Quezacotl
  • mag184_e - Shiva
  • mag186_b - Odin
  • mag190_b - Doomtrain
  • mag201_b.12 (alternate format) - Bahamut
  • mag204_b.03 (alternate format) - Brothers?
  • mag217_b - Gilgamesh
  • mag290_h - Pandemona
  • mag324_h - Diablos
  • mag325_b - Odin (death from Seifer?)
  • mag326_e, mag326_g - Gilgamesh

All listed models in magic.fs are the alternate format.
magic.fs:

  • mag200_b.00 - Ifrit
  • mag201_b.00 - Bahamut (head)
  • mag202_b.00 - Cerberus
  • mag203_b.00 - Alexander
  • mag204_b.00 - Brothers?
  • mag205_b.00 - Eden

A bunch of other models are in FF8.exe. One thing that I've found helpful in finding models is that there's usually if not always either the hex string 68 C0 07 08, 70 C0 07 08, or something similiar near the beginning of the model data.

This is a Python script that takes a "normal" GF-model and turns it into a battle model that Noesis can read.
Code: [Select]
Code:
import structimageCount = 2name = raw_input('File name:')model = open(name, 'rb')model.seek(4)offsets = struct.unpack("IIII", model.read(16))model.seek(offsets[0])modelData = model.read(offsets[3] - offsets[0])outt = open(name.split('.')[0] + '_mdl.dat', 'wb')outt.write(struct.pack("IIII", 11, offsets[0] + 0x1C, offsets[1] + 0x1C, offsets[2] + 0x1C))for i in range(8):    outt.write(struct.pack("I", offsets[3] + 0x1C))outt.write(struct.pack("I", offsets[3] + 0x1C + 4 * (imageCount + 2) + imageCount * 0x4220))outt.write(modelData)outt.write(struct.pack("I", imageCount))for i in range(imageCount + 1):    outt.write(struct.pack("I", i * 0x4220 + 4 * (imageCount + 2)))#Create placeholder texturesfor j in range(2):    outt.write(struct.pack("IIIHHHH", 0x10, 9, 0x20C, 2, 2, 256, 1))    for x in range(256):        outt.write('\x22\x22')    outt.write(struct.pack("IHHHH", 0x400C, 1, 1, 0x40, 0x80))    for x in range(0x4000):        outt.write("\x00")outt.close()
 
Last edited:
As i said i don't understand almost nothing about the structure of a file xD
So sorry if i said a lot of "trash"...
However I got an error but is my python version (3.x.x) ^^"...solved with the 2.7.6.
Anyway the output is without texture right? Is just the model.

Thanks again for your kindness.
(Greetings from sicily!)
 
Last edited:
Since GF textures are separate from the model, they are not easily merged into the newly created model. It can only directly provide the model.
The script creates placeholder textures for the purpose of being manually replaced or maybe to make textures behave correctly when exported. You can adjust how many placeholders are created by changing the value of imageCount.
 
Last edited:
Another thing and i've finished.
For example, for leviathan (or for the other alternate model), if i try to convert, and open with noesis, it wants the Battle skeleton.dat......what should i do?
There is no way to extract them?
 
Last edited:
I don't know yet if you've gotten the alternate-format models out of the files yet (though I'm assuming you have), but it requires a slightly different script for conversion.

Replace
Code: [Select]
Code:
modelData = model.read(totalSize - offsets[0])
with
Code: [Select]
Code:
modelData = model.read()
And replace all occurrences of "0x1C" in the script with "0x18".

Oh, and I slipped up when I was updating my list to post. There's another Leviathan model in mag005_b.02.
 
Give me a sec.
I've replace that string and replaced ALL 0x1C with 0x18.
And i got this:
Code: [Select]
Code:
import structimageCount = 2name = raw_input('File name:')model = open(name, 'rb')model.seek(4)offsets = struct.unpack("IIII", model.read(16))model.seek(offsets[0])modelData = model.read()outt = open(name.split('.')[0] + '_mdl.dat', 'wb')outt.write(struct.pack("IIII", 11, offsets[0] + 0x18, offsets[1] + 0x18, offsets[2] + 0x18))for i in range(8):    outt.write(struct.pack("I", offsets[3] + 0x18))outt.write(struct.pack("I", offsets[3] + 0x18 + 4 * (imageCount + 2) + imageCount * 0x4220))outt.write(modelData)outt.write(struct.pack("I", imageCount))for i in range(imageCount + 1):    outt.write(struct.pack("I", i * 0x4220 + 4 * (imageCount + 2)))#Create placeholder texturesfor j in range(2):    outt.write(struct.pack("IIIHHHH", 0x10, 9, 0x20C, 2, 2, 256, 1))    for x in range(256):        outt.write('\x22\x22')    outt.write(struct.pack("IHHHH", 0x400C, 1, 1, 0x40, 0x80))    for x in range(0x4000):        outt.write("\x00")outt.close()
My steps are:
1)Extract all file in Magic.fs with deling
2)Run python with this new script and give him for example ->mag205_b.00
3)Got the new mag205_b_mdl.dat file but after i put it in noesis doesn't work.

So...any solution?
 
The alternate-format models are not at the beginning of the file, which is why the script fails. Unfortunately, I don't know enough to automatically locate where they are in the file. I used a hex editor to find the alternate-format models and to copy their data out into new files. That isn't an optimal solution.

For example, open up mag005_b.05 in a hex editor and copy out the data from 0xD4-C643 into a new file.
In its file, Eden is at 0x5A54-134FF.
 
Last edited:
Yeah now it's working...
Manually how can i individuate the beginning (and this i can easily find it) and the "End" of the file.
There is any way to calculate it?
 
If you've located the beginning of the model, then it should be simple. The first 4 bytes of the alternate header are the length of the model, in little-endian (take the bytes and reverse the order to get the value).

Good night.
 
Last edited:
Vehek you made my day!

Thanks so much man..really  :)

Anyway I'm having a little problem whith Quetzacoatl model about the uv info..it's like it is incomplete..I mean that Quetzacoatl model uses 3 material/maps but the info of the third one is missing and ther is no unwrap for that part of the model.

Anyway I don't remember if there was a way to unpack the ff8.exe files.. I remember that some models were hidden in it..for example the Grim reaper (the one from the Death magic cast) ..and maybe Carbuncle too..I should check  ;D

[Edit]

I made a "manual" fix for the Quetzacoatl missing UV and now it looks better even if maybe not perfect :)
 
Last edited:
I found 2 more summons but I've not been able to extract them:

-Phoenix should be located in mag139 files
-MiniMog should be located in mag095 files

Hope this can be useful :)
 
While their textures are in the archives, those summons' models are in FF8.exe.
For the English 1.2, both non-Geforce and Geforce:

  • Phoenix: 0xDB537C
  • MiniMog: 0x112BC04
  • Carbuncle: 0xCB6F94
  • Tonberry: 0x1147514
These are "normal" GF models.

I mean that Quetzacoatl model uses 3 material/maps but the info of the third one is missing and ther is no unwrap for that part of the model.
You may need to increase imageCount in the script in order to have all the UVs preserved.
 
Last edited:
Thanks!

I'll try to increase the imagecount then  :D

do you know anything about the Grim Reaper?

I'm quite sure he's in the ff8.exe too (or at least the texture is there)

It's one of the summon models I'd like to find most  :-)

Thanks a lot again anyway!

After  summons files the only thing still missing is (at least among the ones I'm looking for) the terrain/city models..I'm not sure about the world map characters/vehicles ones since I've seen something like a re-texturing but didn't understood how that guy extracted the models.
 
I changed it to 3 for siren and it still return only 2 materials/textures..
The imageCount alone didn't help but I figured out why.
It's because the range is fixed and so I put the imagecount variable again there too in the code :)
 
mmh...i got a problem....
I've succesful extracted, Ifrit,Bahamut,Cerberus...works like a charms.
For alexander i cannot find the beginning of file...Brothers too...can you give me any help?
 
Last edited:
Same here..still stuck whith Alexander and Brothers  :'(

And same thing from the Doom/Death summon model file(Grim Reaper)..can't find it even if I'm 75% sure it's in ff8.exe file..
Anyway the texture for that summon animation effects are in mag007 and mag008 files but I've not been able to find it there neither.. :(

I'll keep search  :-D
 

  • Alexander: At 0x8138 in mag203_b.01 (Sorry, didn't have it listed correctly in my big list.)
    Brothers: 0x31E0 in mag204_b.00, and 0xE0 in mag204_b.03.

    Grim Reaper:
    According to the models I manually extracted a while ago, there are multiple copies.
    One can be found at 0x122C95C.

    There were so many models that I don't think I got them all, but in FF8.exe, I've found:
    • Gilgamesh's swords (multiple copies, I think)
    • Various Angelo models, and Angelo's bone
    • Rinoa's wings?
    • A cherub (angel)? 0x11786D4
    • Boko models, Cactuar, and Moomba
 
Last edited:
Thanks!

I'll try whith them too as soon as possible (not at my place now :( )

The Gilgamesh swords are supposed to be at least 4 (1 for each attack he can cast)..I see the textures for it yesterday and they're 32x128 instead of the classic 128x128 (i don't remember the name of the file right now but I can easily find it again if you could need)..anyway 2 of them have the same model whith different texture but they probably use a

About angelo there is probably 1 model for each Rinoa Limit .

The wings are the one from the other rinoa limit (Angel Wings?)

The cherub/angel you saw is the one who appear when someone dies during the final battle vs Ultimecia.
 
Status
Not open for further replies.
Back
Top