Author Topic: FF8 Models, How did Qhimm rip them?  (Read 68155 times)

Lucleonhart

  • *
  • Posts: 40
    • View Profile
    • Lucleonhart.de
Re: FF8 Models, How did Qhimm rip them?
« Reply #25 on: 2009-02-08 12:59:34 »
Well,i think i am the only person here which would love the ff8 model viewer more than anything from ff7... jeah, shame on me. *g*
So keep on the good work! :)
Hope any body will be capable to "repair" Kvaks program, to get that fully working... :(

JWP

  • *
  • Posts: 194
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #26 on: 2009-02-15 00:37:53 »
I started to have another look at the FF8 battle models yesterday, I've nearly re-coded my extractor for the PSX .dat models.
It's fully working but I'm still working on the directory parsing code. I'll release the source code and a .exe when it's done.

I also had a look at the geometry data again and I'm pretty close to getting all the data sorted out thanks to the battle model viewer.
I've basically found out the structure of the geometry (how to get all the triangle/quad structures) and where the texture coords are, I've just got to figure out the rest of the values.

Also here's a log from my PSX extractor which shows the .dat file offsets in the PAL version of the file FF8DISC1.IMG
at the moment it only finds the monster files but I'll see what I can do about finding the weapon models.
EDIT: managed to extract some more files and updated log.

File found at offset 0D82C000-0D832038  name: Dummy
File found at offset 0D832800-0D84FA20  name: GIM52A
File found at offset 0D850000-0D867938  name: Blobra
File found at offset 0D868000-0D8832C0  name: Thrustaevis
File found at offset 0D883800-0D895308  name: Geezard
File found at offset 0D895800-0D8A6CF8  name: Belhelmel
File found at offset 0D8A7000-0D8BDB24  name: Glacial Eye
File found at offset 0D8BE000-0D8D4614  name: SAM08G
File found at offset 0D8D4800-0D8EB710  name: GIM47N
File found at offset 0D8EB800-0D903C58  name: Mesmerize
File found at offset 0D904000-0D916AEC  name: Buel
File found at offset 0D917000-0D9342A8  name: Sphinxaur
File found at offset 0D934800-0D951A08  name: Sphinxara
File found at offset 0D952000-0D96B15C  name: Snow Lion
File found at offset 0D96B800-0D980880  name: Anacondaur
File found at offset 0D981000-0D9997EC  name: Grat
File found at offset 0D999800-0D9B3390  name: Cockatrice
File found at offset 0D9B3800-0D9CE2D4  name: Caterchipillar
File found at offset 0D9CE800-0D9DCA68  name: Red Bat
File found at offset 0D9DD000-0D9F7EA8  name: Blitz
File found at offset 0D9F8000-0DA0F80C  name: Fastitocalon
File found at offset 0DA10000-0DA203C8  name: Fastitocalon
File found at offset 0DA20800-0DA35798  name: Gesper
File found at offset 0DA35800-0DA4BC88  name: Creeps
File found at offset 0DA4C000-0DA6EEA4  name: Hexadragon
File found at offset 0DA6F000-0DA87AB0  name: Blood Soul
File found at offset 0DA88000-0DAA2B9C  name: Elastoid
File found at offset 0DAA3000-0DABD288  name: Armadodo
File found at offset 0DABD800-0DACD4F4  name: Bite Bug
File found at offset 0DACD800-0DAE39F0  name: Jelleye
File found at offset 0DAE4000-0DB0A014  name: Tri-Point
File found at offset 0DB0A800-0DB1C06C  name: Turtapod
File found at offset 0DB1C800-0DB344A0  name: Wendigo
File found at offset 0DB34800-0DB4B854  name: Gayla
File found at offset 0DB4C000-0DB77214  name: Gerogero
File found at offset 0DB77800-0DB98E8C  name: Death Claw
File found at offset 0DB99000-0DBB9B4C  name: Tri-Face
File found at offset 0DBBA000-0DBD768C  name: Grand Mantis
File found at offset 0DBD7800-0DBF45A0  name: Krysta
File found at offset 0DBF4800-0DC0435C  name: Lefty
File found at offset 0DC04800-0DC14AF4  name: Righty
File found at offset 0DC15000-0DC3C4EC  name: Blue Dragon
File found at offset 0DC3C800-0DC5A554  name: Forbidden
File found at offset 0DC5A800-0DC6CC8C  name: Bomb
File found at offset 0DC6D000-0DC95B4C  name: Abyss Worm
File found at offset 0DC96000-0DCBDAA0  name: Ochu
File found at offset 0DCBE000-0DCD9940  name: Adamantoise
File found at offset 0DCDA000-0DD01254  name: Chimera
File found at offset 0DD01800-0DD1E3D8  name: Malboro
File found at offset 0DD1E800-0DD4125C  name: Iron Giant
File found at offset 0DD41800-0DD63CD0  name: Behemoth
File found at offset 0DD64000-0DD85374  name: T-Rexaur
File found at offset 0DD85800-0DDADD98  name: Ruby Dragon
File found at offset 0DDAE000-0DDCA7A8  name: Grendel
File found at offset 0DDCA800-0DDD8BF8  name: Vysage
File found at offset 0DDD9000-0DDE4E40  name: Cactuar
File found at offset 0DDE5000-0DDFE318  name: Tonberry
File found at offset 0DDFE800-0DE1D640  name: Torama
File found at offset 0DE1D800-0DE33318  name: Funguar
File found at offset 0DE33800-0DE4B81C  name: Imp
File found at offset 0DE4C000-0DE5EE94  name: PuPu
File found at offset 0DE5F000-0DE7D0D4  name: Ifrit
File found at offset 0DE7D800-0DE97988  name: Minotaur
File found at offset 0DE98000-0DEB1554  name: Sacred
File found at offset 0DEB1800-0DEC46A0  name: Base Leader
File found at offset 0DEC4800-0DEEBEE0  name: Cerberus
File found at offset 0DEEC000-0DF1947C  name: Diablos
File found at offset 0DF19800-0DF48A38  name: Bahamut
File found at offset 0DF49000-0DF58DA8  name: NORG Pod
File found at offset 0DF59000-0DF60380  name: Garden Faculty
File found at offset 0DF60800-0DF92714  name: Odin
File found at offset 0DF92800-0DF9EC38  name: G-Soldier
File found at offset 0DF9F000-0DFB1EA8  name: Elite Soldier
File found at offset 0DFB2000-0DFBE5F8  name: Wedge
File found at offset 0DFBE800-0DFD1654  name: Biggs
File found at offset 0DFD1800-0DFEB498  name: Fake President
File found at offset 0DFEB800-0DFF7C0C  name: Guard
File found at offset 0DFF8000-0E017ED4  name: NORG
File found at offset 0E018000-0E028AFC  name: Esthar Soldier
File found at offset 0E029000-0E040600  name: Esthar Soldier
File found at offset 0E040800-0E0451FC  name: Right Orb
File found at offset 0E045800-0E04A1FC  name: Left Orb
File found at offset 0E04A800-0E053840  name: Gunblade
File found at offset 0E054000-0E079BB8  name: Tonberry King
File found at offset 0E07A000-0E09701C  name: Jumbo Cactuar
File found at offset 0E097800-0E0AA13C  name: Seifer
File found at offset 0E0AA800-0E0BDE08  name: Seifer
File found at offset 0E0BE000-0E0CFD90  name: Seifer
File found at offset 0E0D0000-0E0EB4EC  name: Edea
File found at offset 0E0EB800-0E11BF60  name: Propagator
File found at offset 0E11C000-0E15B740  name: Ultima Weapon
File found at offset 0E15B800-0E18C640  name: Elvoret
File found at offset 0E18C800-0E1B8DB8  name: X-ATM092
File found at offset 0E1B9000-0E1D5170  name: Iguion
File found at offset 0E1D5800-0E1FED24  name: Gargantua
File found at offset 0E1FF000-0E226DA4  name: Granaldo
File found at offset 0E227000-0E23CF9C  name: Raldo
File found at offset 0E23D000-0E26D760  name: Propagator
File found at offset 0E26D800-0E29DF60  name: Propagator
File found at offset 0E29E000-0E2C2F7C  name: Oilboyle
File found at offset 0E2C3000-0E2DDEDC  name: Edea
File found at offset 0E2DE000-0E30D290  name: BGH251F2
File found at offset 0E30D800-0E339370  name: BGH251F2
File found at offset 0E339800-0E368254  name: Abadon
File found at offset 0E368800-0E37828C  name: Abadon
File found at offset 0E378800-0E394390  name: Mobile Type 8
File found at offset 0E394800-0E3A17EC  name: Left Probe
File found at offset 0E3A1800-0E3AE89C  name: Right Probe
File found at offset 0E3AF000-0E3BB414  name: Paratrooper
File found at offset 0E3BB800-0E3DE438  name: Trauma
File found at offset 0E3DE800-0E3F1354  name: Droma
File found at offset 0E3F1800-0E421F60  name: Propagator
File found at offset 0E422000-0E45A9A0  name: Adel
File found at offset 0E45B000-0E46507C  name: Rinoa
File found at offset 0E465800-0E4AA080  name: Omega Weapon
File found at offset 0E4AA800-0E4C84A8  name: "Sorceress"
File found at offset 0E4C8800-0E4EC00C  name: "Sorceress"
File found at offset 0E4EC800-0E528890  name: "Sorceress"
File found at offset 0E529000-0E5389E8  name: UFO?
File found at offset 0E539000-0E54E510  name: Fujin
File found at offset 0E54E800-0E567580  name: Raijin
File found at offset 0E567800-0E5A2430  name: Ultimecia
File found at offset 0E5A2800-0E5E36D8  name: Griever
File found at offset 0E5E3800-0E5E83E0  name: 
File found at offset 0E5E8800-0E62D700  name: Ultimecia
File found at offset 0E62D800-0E632470  name: Helix
File found at offset 0E632800-0E67624C  name: Ultimecia
File found at offset 0E676000-0E676008, parts: 0
File found at offset 0E676800-0E6769CC, parts: 2
File found at offset 0E677000-0E68CDA0  name: Seifer
File found at offset 0E68D000-0E69DBA4  name: Slapper
File found at offset 0E69E000-0E6C367C  name: Red Giant
File found at offset 0E6C3800-0E6F4CF8  name: Elnoyle
File found at offset 0E6F5000-0E726B88  name: Tiamat
File found at offset 0E727000-0E74B574  name: Catoblepas
File found at offset 0E74B800-0E757CCC  name: Wedge
File found at offset 0E758000-0E76ACF4  name: Biggs
File found at offset 0E76B000-0E78046C  name: Fujin
File found at offset 0E780800-0E799650  name: Raijin
File found at offset 0E799800-0E7AEE4C  name: UFO?
File found at offset 0E7AF000-0E7C4FE0  name: UFO?
File found at offset 0E7C5000-0E7DAC00  name: UFO?
File found at offset 0E7DB000-0E7EF8A0  name: UFO?
File found at offset 0E7F0000-0E7F9190  name: Gunblade
File found at offset 0E7F9800-0E805C6C  name: Base Soldier
File found at offset 0E806000-0E8195B4, parts: 7
File found at offset 0E819800-0E82CC40, parts: 7
File found at offset 0E82D000-0E8362FC, parts: 8
File found at offset 0E836800-0E83FD8C, parts: 8
File found at offset 0E840000-0E849BE8, parts: 8
File found at offset 0E84A000-0E853E78, parts: 8
File found at offset 0E854000-0E85DC18, parts: 8
File found at offset 0E85E000-0E867EA8, parts: 8
File found at offset 0E868000-0E871B34, parts: 8
File found at offset 0E872000-0E8860A8, parts: 7
File found at offset 0E886800-0E89A740, parts: 7
File found at offset 0E89A800-0E8A29EC, parts: 5
File found at offset 0E8A3000-0E8AB1EC, parts: 5
File found at offset 0E8AB800-0E8B39EC, parts: 5
File found at offset 0E8B4000-0E8BC1EC, parts: 5
File found at offset 0E8BC800-0E8D2468, parts: 7
File found at offset 0E8D2800-0E8DAB00, parts: 8
File found at offset 0E8DB000-0E8E36D0, parts: 8
File found at offset 0E8E3800-0E8EBF38, parts: 8
File found at offset 0E8EC000-0E8F46CC, parts: 8
File found at offset 0E8F4800-0E908B6C, parts: 7
File found at offset 0E909000-0E913058, parts: 8
File found at offset 0E913800-0E91D968, parts: 8
File found at offset 0E91E000-0E928138, parts: 8
File found at offset 0E928800-0E932908, parts: 8
File found at offset 0E933000-0E948E04, parts: 7
File found at offset 0E949000-0E9518B0, parts: 8
File found at offset 0E952000-0E95A9A8, parts: 8
File found at offset 0E95B000-0E9639E4, parts: 8
File found at offset 0E964000-0E96C9D0, parts: 8
File found at offset 0E96D000-0E9759E0, parts: 8
File found at offset 0E976000-0E98900C, parts: 7
File found at offset 0E989800-0E99C724, parts: 7
File found at offset 0E99C800-0E9A7790, parts: 8
File found at offset 0E9A7800-0E9B29AC, parts: 8
File found at offset 0E9B3000-0E9BE120, parts: 8
File found at offset 0E9BE800-0E9C9974, parts: 8
File found at offset 0E9CA000-0E9DF6F0, parts: 7
File found at offset 0E9DF800-0E9E85B8, parts: 8
File found at offset 0E9E8800-0EA05EE0, parts: 10
File found at offset 0EA06000-0EA1AD88, parts: 7
File found at offset 0EA1B000-0EA2FF74, parts: 7
File found at offset 0EA30000-0EA389EC, parts: 8
File found at offset 0EA39000-0EA4EF94, parts: 7
File found at offset 0EA4F000-0EA6509C, parts: 7
File found at offset 0EA65800-0EA6D2EC, parts: 5
File found at offset 0EA6D800-0EA82378, parts: 7
File found at offset 0EA82800-0EA972C0, parts: 7
File found at offset 0EA97800-0EAA04DC, parts: 8
File found at offset 0EC00000-0EC213C8, parts: 2
File found at offset 0ECAC800-0ECBB4AC, parts: 4
File found at offset 0EE5B800-0EE60890, parts: 4
File found at offset 0EEDB000-0EEE53C0, parts: 4
File found at offset 0F01B800-0F0297A8, parts: 4
File found at offset 0F074000-0F087730, parts: 4
File found at offset 0F0C8800-0F0D6414, parts: 4
File found at offset 0F5AD800-0F5BE304, parts: 4
File found at offset 0F665800-0F678348, parts: 4
File found at offset 0F6BA800-0F6CAB00, parts: 4
File found at offset 0F75B800-0F76FEE0, parts: 4
File found at offset 0F7A9800-0F7ACB1C, parts: 4
File found at offset 0F7C6800-0F7CDFE0, parts: 4
File found at offset 0F7F7000-0F7F879C, parts: 4
File found at offset 0F805000-0F8115A0, parts: 4
File found at offset 0FA5C800-0FA8484C, parts: 8
Found 143 Monster models.
Found 67 Unknown models.
« Last Edit: 2009-02-15 16:09:22 by JWP »

FaustWolf

  • *
  • Posts: 60
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #27 on: 2009-02-15 18:38:14 »
Whoa, huge thanks JWP! Since I'm still dedicated to the Chrono Cross model project over at the Chrono Compendium for awhile, I'm going to reproduce what you wrote in a PM to me so everyone can see it:

Quote from: JWP
This is what I've managed to gather so far:

S1: Skeleton
S2: Geometry
S3: Animation (there's a subheader with no. frames)
S4: Unknown
S5: Unknown
S6: Unknown
S7: Monster Info section (I decoded a lot of this, see below)
S8: Suspected of being some sort of Battle Script (it contains text that's displayed in the battle)
S9: Some sort of sound data
SA: Some sort of sound data
SB: Texture

By the way, I believe that the duplicate pointers are because a section is unused (ie. zero length) so the section after ends up with the same pointer.


struct Item {
   BYTE id;
   BYTE amount;
};

struct Action {
   BYTE type; //??? 0x02 = generic magic
   BYTE animscript; //???
   BYTE id; //???
   BYTE unk;
};

struct MonsterInfo {
   char name[24]; //FF8 encoded - length might be less than this

   BYTE HP[4]; //HP = (HP[0]*x*x)/20 + (HP[0] + 100*HP[2])*x + 10*HP[1] + 1000*HP[3], where x = monster lvl
   BYTE unk0[24];

   Action RosterL[16];
   Action RosterM[16];
   Action RosterH[16];

   BYTE Unk1[4];

   BYTE Card[3]; //1st Byte = Card Drop, 2nd Byte = Carded into, 3rd Byte = Rarely Carded into, 0xFF = no drop/can't card
   BYTE Devour[3]; //Low, Med and High lvl Devour effect id's

   BYTE unk2[6];

   USHORT LowLvlDraw[4];
   USHORT MedLvlDraw[4];
   USHORT HighLvlDraw[4];

   Item LowLvlMug[2];
   Item LowLvlRMug[2];
   Item MedLvlMug[2];
   Item MedLvlRMug[2];
   Item HighLvlMug[2];
   Item HighLvlRMug[2];

   Item LowLvlDrop[2];
   Item LowLvlRDrop[2];
   Item MedLvlDrop[2];
   Item MedLvlRDrop[2];
   Item HighLvlDrop[2];
   Item HighLvlRDrop[2];

   BYTE unk3[20];

   BYTE ElemRes[8]; //These are how resistant the monster is to each element 0 = very weak
               //0 - Fire
               //1 - Ice
               //2 - Thunder
               //3 - Earth
               //4 - Poison
               //5 - Wind
               //6 - Water
               //7 - Holy
   BYTE StatusRes[20]; //Status resistances 0xFF = immune
               //0 - Death
               //1 - Poison
               //2 - Petrify
               //3 - Darkness
               //4 - Silence
               //5 - Beserk
               //6 - Zombie
               //7 - Sleep
               //8 - Haste
               //9 - Slow
               //10 - Stop
               //11 - Regen
               //12 - Reflect
               //13 - Doom (red timer) - command/doomtrain
               //14 - Slow Petrify? (white timer) - cast using doomtrain
               //15 - Float
               //16 - Confuse
               //17 - Drain
               //18 - Huh
               //19 - Huh
};

koral

  • Guest
Re: FF8 Models, How did Qhimm rip them?
« Reply #28 on: 2009-02-16 19:26:46 »
wow, thanks a lot JWP and FaustWolf:-D

JWP

  • *
  • Posts: 194
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #29 on: 2009-02-16 23:58:13 »
I'm going to release my dat reader, it's a bit buggy with the directories but it definately works for the PAL version of FF8, it should work on NTSC though. Let me know if you get any problems.
It works on the .IMG file on the root of the FF8 disk.

windows binary:
http://bin.mypage.sk/FILES/datread.exe

source:
http://bin.mypage.sk/FILES/main.c

note: it compiles on linux but I have no idea if it actually works.

usage:     datread.exe img outputdir [log]
eg.         datread.exe "C:\FF8DISK1.IMG" "C:\output\" "C:\logfile.txt"

THE OUTPUT DIRECTORY AND THE DIRECTORY THE LOG IS IN MUST EXIST (didn't really want to spend too much time fixing this issue so I left it as-is)

Feel free to modify the source any way you want but at least give me credit.
Thanks to Qhimm for the FF8 character encoding.

The output of the program is a separate directory for each dat file and within the dir, the whole .dat file and each of the separate parts of it (makes it easier to analyze), for the monsters, the animation section is also split up and placed in the /Animations dir.

EDIT: I've managed to view the geometry for 2 simple .dat models (080 (Right Orb)) and model 123 (which is the orb during Ultimecia's transform) all I need now is the bone rotation data from the animation and I should be able to view most of the models.
« Last Edit: 2009-02-17 02:26:18 by JWP »

JWP

  • *
  • Posts: 194
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #30 on: 2009-02-22 18:54:42 »
Here's a basic outline of the geometry stored in the .dat (section 3 of the monster files) files for those that are interested:

the section starts with a list of groups:

LONG                                num_groups
LONG*num_groups             group_offsets

each group has this structure:
SHORT                              num_bones
{
    SHORT                          bone_id
    SHORT                          num_verts
    SHORT[3]*numverts       verts
} * num_bones
SHORT                              num_triangles (32 bit aligned, so when pointer reaches the address at end of bone structure do (pointer + 3) & 0xFFFFFFFC
SHORT                              num quads
--8 NULL BYTES--
{
    SHORT                          verts[3]
    SHORT                          UVcoord
    SHORT                          UVcoord1
    SHORT                          unk
    SHORT                          UVcoord2
    SHORT                          unk1
} * num_triangles
{
    SHORT                          verts[4];
    SHORT                          UVcoord1
    SHORT                          unk
    SHORT                          UVcoord2
    SHORT                          unk1
    SHORT                          UVcoord3
    SHORT                          UVcoord4
} * num_quads


skeleton data is discussed in this topic: http://forums.qhimm.com/index.php?topic=2518.0

G3nius

  • *
  • Posts: 23
  • master of viiigine.com
    • View Profile
    • viiigine - Open Source Final Fantasy VIII engine
Re: FF8 Models, How did Qhimm rip them?
« Reply #31 on: 2009-03-03 09:19:47 »
Hi all!
Recently I started to disassemble graphical part of FF8.exe (patch v1.2, PC version as you can see) at address 0x00446000 and founded the following:

1. function receives pointer to a buffer with data, pointer to an index buffer and index buffer size
2. data contains 0x20 bytes blocks with the following structure:

offs  length  type           comments
0x00   0x0c   GL_FLOAT[3]   xyz vertex coordinates
0x0c   0x04      unknown    I think, deprecated field that used with glVertexPointer and first parameter equal 0x04
0x10   0x04   GL_UNSIGNED_BYTE[4]   color
0x14   0x0c      unknown I haven't any idea about it
0x18   0x08   GL_FLOAT[2]   uv texture coordinates


I hope this will help you with researching of unknown parameters in models structure. Disassemly text you can find here: http://viiigine.com/downloads.php
Of course, I'll be happy if someone helps me in reversing & engine redevelopment.

PS I think KVaks reversed code that fill buffers
« Last Edit: 2009-03-03 18:09:37 by G3nius »

Ultimecia

  • Guest
Re: FF8 Models, How did Qhimm rip them?
« Reply #32 on: 2009-03-19 08:59:17 »
Hi there, I'm also trying to rip FFVIII stuff, but I'm only interested in textures for the time being.
I just managed to rip the chara.one file, and it contains only 16 images within it, according to two different programs: Bitmap Rip and PSIcture. All of them looks like world map stuff

000- A very small Squall head
001- Yet another insanely small Squall, but this time it's his body
002- Small Ragnarok piece
003- Small Ragnarok 2
004- Ragnarok?
005- Yet more Ragnarok
006- No idea what it is
007- Small chocobo
008- Duplicate of #006
009- Duplicate of #007
010- Duplicate of #000
011- Squall's Garden uniform
012- Zell tiny little head
013- Zell's body
014- Selphie's body
015- Selphie's head

I'm looking for the NPCs textures, any clue yet?

Satoh

  • *
  • Posts: 386
  • Assuming this statement is correct, I'm alive.
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #33 on: 2009-03-20 05:04:40 »
we've had some progress with deciphering the models in chara.one or rather... Myrex did a while back,

I forget the process to decompress it, but you can actually view the models in it from biturn.

koral

  • Guest
Re: FF8 Models, How did Qhimm rip them?
« Reply #34 on: 2009-05-24 22:33:30 »
Um, I hope this wont be considered a necropost, but IMO this is the best place to discuss about FF8 models because of the large amounts of known information and links which have previously been posted here  :|

I have started to Wikify the MCH format specs onto the Wiki here: http://wiki.qhimm.com/FF8/FileFormat_MCH

There does seem to be a whole lot of (unknowns) interdispersed within each Model-data chunk, and possibly after it too, so there is still hope that initial bone rotations may be present within these MCH files.

I intend to unravel this mystery once and for all, and any help would be appreciated!  :-D

Vehek

  • *
  • Posts: 215
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #35 on: 2009-05-25 04:15:19 »
My guess on how the chara.one files work. Might be incorrect because I didn't do any disassembly or testing in-game.

Code: (Chara.one Header Hypothesis) [Select]
0x00: Number of PC and NPC models (32-bit). Might not count for calculating offsets.
0x04: First model's header (detailed below)

PC Model chara.one header:
0x00: Pointer to animation data? (32-bit)
0x04: Size of the animation data or whatever it is. (32-bit)
0x08: Size again.
0x0C: MCH number? (32-bit? Upper 16-bits might determine whether header refers to PC or NPC)
0x10: 4 bytes
0x14: MCH name? Not sure if used. (4 bytes)
0x18: 4 unknown bytes

NPC header:
0x00: Pointer to first TIM (32-bit)
0x04: Size of TIM & Model data (32-bit)
0x08: Size again.
0x10: MCH-type header possibly starts here. Offsets are relative to the TIM image.
After the model data pointer: 8 unknown bytes.

Both types usually end with the hex bytes "EE EE EE EE" after the unknown bytes, though there may be exceptions.

Edit: The next to last section (the section pointed to by the DWORD at 0x38 of the model data header) of the MCH model data looks similar to what I guessed to be the animation data in the chara.one files. So that might be the pose information.

Code: (Animation Section hypothesis) [Select]
Section Header:
WORD Number of animations

Animation Header:
WORD Number of frames
WORD Number of joints (Koral labeled them bones.)

In that old thread, Qhimm said the animations were stored using 4 bytes per node. By counting I think there might also be an additional 6 bytes per frame, but I'm not absolutely sure.
« Last Edit: 2009-05-27 18:52:06 by Vehek »

koral

  • Guest
Re: FF8 Models, How did Qhimm rip them?
« Reply #36 on: 2009-05-29 22:16:31 »
Thankyou for your input Vehek, I will look into that last section in MCH files pronto  :-)

Joints, bones, same thing  :-D
But I will rename everything to joints, because that is what they are technically. I just find them easier to visualise refering to them as "bones"

The bone pose information I have been using so far consists only of 3 rotation values (eular XYZ). I cannot recall what FF7 p models used, but I can imagine why Quimm might have suggested 4-bytes per rotation, the possibility of the rotations being stored as a quaternion value of 4 signed bytes instead of 3 shorts (or floats).

There seems to be a lot of redundant data everywhere in the format (between each face polygon for example) so an extra 6 bytes does not raise any alarm bells.

Vehek

  • *
  • Posts: 215
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #37 on: 2009-05-30 08:31:28 »
I tried copying the possible pose data from the MCH over some animation data.

Did I do something wrong, is the format not quite the same, or is my guess wrong?

On chara.one, it looks like the MCH name section really is unused and the MCH Number part I listed determines which MCH to load.

Satoh

  • *
  • Posts: 386
  • Assuming this statement is correct, I'm alive.
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #38 on: 2009-05-30 15:36:42 »
I can't say I know much of what you did, but from my experience looking at biturn, only Zell and Squall have compatible bone structures...

I hope that helps somehow...

EDIT: Also you may have accidentally copied one extra byte or something... I've done that more than a few times before.... it annoys me greatly.

I wish I could get your interest in another format I've been looking at... but that would be selfish of me.
« Last Edit: 2009-05-30 15:40:52 by X-Dina »

Vehek

  • *
  • Posts: 215
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #39 on: 2009-05-30 20:45:52 »
Well, I thought I copied over the right number of bytes, and I copied the data from Squall's model. It might just be that the MCH's animation data is unused for PCs.

On a different note, while Biturn can load Zell's model without a problem, FF8 doesn't seem to tolerate that very well when using Squall's animations and Zell's original number of bones.
« Last Edit: 2009-06-03 19:03:12 by Vehek »

Kung Fu Man

  • Guest
Re: FF8 Models, How did Qhimm rip them?
« Reply #40 on: 2009-06-26 04:18:58 »
Sorry to bump this, but has any progress been made on this front for the battle models? I've gone so far as to try and rip the models forcibly with 3DRipperDX, though the game as it stands seems to dislike Vista. It confounds the hell out of me too because the models I'm interested in exporting are few and the viewer seems to handle them (somewhat) okay, but there's no way to get them from point A to point B.

EDIT: Well, got the game working on Vista, but the models can't be dumped with 3DRipperDX...oh well.
« Last Edit: 2009-06-26 05:38:39 by Kung Fu Man »

Satoh

  • *
  • Posts: 386
  • Assuming this statement is correct, I'm alive.
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #41 on: 2009-06-26 11:39:11 »
No luck as yet, but rest assured, people are working on it. No guarantees on quick progress, but it will be cracked eventually.

Kung Fu Man

  • Guest
Re: FF8 Models, How did Qhimm rip them?
« Reply #42 on: 2009-06-26 21:55:39 »
Well it does look like, from what I'm reading, some lesser form of import/conversion tool could be developed for the time being if the person is willing to do some fiddling with the model after an end result (it's more the beasties I'm hoping to give a rendered animated version, so "some assembly required" is of no consequence for me XD). Interestingly to this end the ones I'm after do appear fine in the viewer, save for the Iron Giant's unarmed hand being twisted 180 degrees.

Btw I'm sorry if any of that post comes across in an ungrateful tone (because I'm very much grateful for the work done), just stressed atm about other things.
« Last Edit: 2009-06-26 22:03:41 by Kung Fu Man »

Satoh

  • *
  • Posts: 386
  • Assuming this statement is correct, I'm alive.
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #43 on: 2009-06-26 22:05:35 »
Well it does look like, from what I'm reading, some lesser form of import/conversion tool could be developed for the time being if the person is willing to do some fiddling with the model after an end result (it's more the beasties I'm hoping to give a rendered animated version, so "some assembly required" is of no consequence for me XD)

Well, I agree with the 'some assembly required' thing, as an avid modeler myself... but unfortunately the number of people who can program import/export stuff is even more limited than those who can read and decipher formats by their hex data...

Of which I can do neither with any proficiency...

Kung Fu Man

  • Guest
Re: FF8 Models, How did Qhimm rip them?
« Reply #44 on: 2009-07-16 13:51:32 »
Well had some luck. Of sorts.

http://planescape.piiym-net.com/irongiant.rar

What I did was use 3DVia Printscreen on CharEdit itself. The result came out as you see up there. Unfortunately giving the thing bones is turning into somewhat of a pain in the...maybe I need a crash course in it.

If anyone's willing, I can go ahead and see if I can get any other models from it for them. They rip pretty well, just no bones, no animations and twisted elements stay, well, twisted.

Satoh

  • *
  • Posts: 386
  • Assuming this statement is correct, I'm alive.
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #45 on: 2009-07-16 16:14:40 »
Well had some luck. Of sorts.

http://planescape.piiym-net.com/irongiant.rar

What I did was use 3DVia Printscreen on CharEdit itself. The result came out as you see up there. Unfortunately giving the thing bones is turning into somewhat of a pain in the...maybe I need a crash course in it.

If anyone's willing, I can go ahead and see if I can get any other models from it for them. They rip pretty well, just no bones, no animations and twisted elements stay, well, twisted.

I clicked the link to the 3DVia printscreen program but it tells me that page is nonexistent. That, I should mention, is not the first time I've tried to get that program...

Can someone mirror the installer? Also can you save files in OBJ? I have Maya, and Max, but I think my Max is long since expired.

obesebear

  • *
  • Posts: 1389
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #46 on: 2009-07-16 16:53:32 »
I am DEFINITELY going to explore using 3DVia Printscreen on these models.   It shouldn't be any trouble importing the files and twisting everything the correct way.  I'll have the Iron Giant Kung Fu Man uploaded converted to obj tonight (if all goes well) and will gladly upload it.

EDIT:
Unfixed Iron Giant.obj  Nice job Kung Fu Man!
« Last Edit: 2009-07-16 17:06:01 by obesebear »

Vehek

  • *
  • Posts: 215
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #47 on: 2009-07-21 17:47:09 »
By looking at the PSX version, I've gotten more information on the field model animation data. (They really are the same format in both PC and PSX.)
The game writes things to the skeleton bone data.

What I assume to be the rotations are copied to 0x0C of the corresponding bone's data.

Code: [Select]
Byte Numbers refer to bytes of each bone's four bytes in the animation data.

Short Rotation?1 = (Byte1 << 0x02)| ((Byte4 & 0x03) << 0x0A)

short Rotation?2 = (Byte2 << 0x02) | ((Byte4 & 0x0C) << 0x08)

short Rotation?3 = (Byte3 << 0x02) | ((Byte4 & 0x30) << 0x06))

or, more closely following the game's ASM:
Short Rotation?1 = (Byte1 << 0x02)| ((Byte4 << 0x0A) & 0xC00)

short Rotation?2 = (Byte2 << 0x02) | ((Byte4 << 0x08) & 0xC00)

short Rotation?3 = (Byte3 << 0x02) | ((Byte4  << 0x06) & 0xC00)
« Last Edit: 2009-07-21 17:49:34 by Vehek »

Satoh

  • *
  • Posts: 386
  • Assuming this statement is correct, I'm alive.
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #48 on: 2009-07-25 18:15:19 »
Has anyone done any looking into the character.one's?

I recently ran all of the ONE's through PSicture and found every NPC texture there is in FF8...

however as they all share similar names I can only dump one set of ONE textures at a time... and believe me it was NOT easy getting all the ONE's in the same place since they all have the same name and are each in a series of nested folders.... it was hell.... but I managed to do it by compressing them in an archive... IIRC...

Anyway what I really need out of them is the SeeD and SeeD Cadet models... granted all the other characters would help too... but my players will need someone to... idunno... play.

Also has anyone looked into battlefield models or where the Ragnarok model is? (I love the Ragnarok... it's so epic looking...)


(It only recently hit me that Koral left... I'm actually quite upset by that, moreso than I imagined I could be... I feel like I've lost a close friend even though I barely knew her... I wish I could at least say goodbye but she's already gone and I have no way to contact her... Does anyone know what happened?)


Vehek

  • *
  • Posts: 215
    • View Profile
Re: FF8 Models, How did Qhimm rip them?
« Reply #49 on: 2009-10-09 19:31:29 »
I've been trying to import FF8 field models into Blender for the last two or three weeks. It hasn't gone as well as I hoped, probably because I don't really understand how to do it.




During this, I've concluded that what I called "Rotation1" is the Z-rotation.
« Last Edit: 2009-10-09 19:33:44 by Vehek »