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

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...

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.IMGat 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: DummyFile found at offset 0D832800-0D84FA20 name: GIM52AFile found at offset 0D850000-0D867938 name: BlobraFile found at offset 0D868000-0D8832C0 name: ThrustaevisFile found at offset 0D883800-0D895308 name: GeezardFile found at offset 0D895800-0D8A6CF8 name: BelhelmelFile found at offset 0D8A7000-0D8BDB24 name: Glacial EyeFile found at offset 0D8BE000-0D8D4614 name: SAM08GFile found at offset 0D8D4800-0D8EB710 name: GIM47NFile found at offset 0D8EB800-0D903C58 name: MesmerizeFile found at offset 0D904000-0D916AEC name: BuelFile found at offset 0D917000-0D9342A8 name: SphinxaurFile found at offset 0D934800-0D951A08 name: SphinxaraFile found at offset 0D952000-0D96B15C name: Snow LionFile found at offset 0D96B800-0D980880 name: AnacondaurFile found at offset 0D981000-0D9997EC name: GratFile found at offset 0D999800-0D9B3390 name: CockatriceFile found at offset 0D9B3800-0D9CE2D4 name: CaterchipillarFile found at offset 0D9CE800-0D9DCA68 name: Red BatFile found at offset 0D9DD000-0D9F7EA8 name: BlitzFile found at offset 0D9F8000-0DA0F80C name: FastitocalonFile found at offset 0DA10000-0DA203C8 name: FastitocalonFile found at offset 0DA20800-0DA35798 name: GesperFile found at offset 0DA35800-0DA4BC88 name: CreepsFile found at offset 0DA4C000-0DA6EEA4 name: HexadragonFile found at offset 0DA6F000-0DA87AB0 name: Blood SoulFile found at offset 0DA88000-0DAA2B9C name: ElastoidFile found at offset 0DAA3000-0DABD288 name: ArmadodoFile found at offset 0DABD800-0DACD4F4 name: Bite BugFile found at offset 0DACD800-0DAE39F0 name: JelleyeFile found at offset 0DAE4000-0DB0A014 name: Tri-PointFile found at offset 0DB0A800-0DB1C06C name: TurtapodFile found at offset 0DB1C800-0DB344A0 name: WendigoFile found at offset 0DB34800-0DB4B854 name: GaylaFile found at offset 0DB4C000-0DB77214 name: GerogeroFile found at offset 0DB77800-0DB98E8C name: Death ClawFile found at offset 0DB99000-0DBB9B4C name: Tri-FaceFile found at offset 0DBBA000-0DBD768C name: Grand MantisFile found at offset 0DBD7800-0DBF45A0 name: KrystaFile found at offset 0DBF4800-0DC0435C name: LeftyFile found at offset 0DC04800-0DC14AF4 name: RightyFile found at offset 0DC15000-0DC3C4EC name: Blue DragonFile found at offset 0DC3C800-0DC5A554 name: ForbiddenFile found at offset 0DC5A800-0DC6CC8C name: BombFile found at offset 0DC6D000-0DC95B4C name: Abyss WormFile found at offset 0DC96000-0DCBDAA0 name: OchuFile found at offset 0DCBE000-0DCD9940 name: AdamantoiseFile found at offset 0DCDA000-0DD01254 name: ChimeraFile found at offset 0DD01800-0DD1E3D8 name: MalboroFile found at offset 0DD1E800-0DD4125C name: Iron GiantFile found at offset 0DD41800-0DD63CD0 name: BehemothFile found at offset 0DD64000-0DD85374 name: T-RexaurFile found at offset 0DD85800-0DDADD98 name: Ruby DragonFile found at offset 0DDAE000-0DDCA7A8 name: GrendelFile found at offset 0DDCA800-0DDD8BF8 name: VysageFile found at offset 0DDD9000-0DDE4E40 name: CactuarFile found at offset 0DDE5000-0DDFE318 name: TonberryFile found at offset 0DDFE800-0DE1D640 name: ToramaFile found at offset 0DE1D800-0DE33318 name: FunguarFile found at offset 0DE33800-0DE4B81C name: ImpFile found at offset 0DE4C000-0DE5EE94 name: PuPuFile found at offset 0DE5F000-0DE7D0D4 name: IfritFile found at offset 0DE7D800-0DE97988 name: MinotaurFile found at offset 0DE98000-0DEB1554 name: SacredFile found at offset 0DEB1800-0DEC46A0 name: Base LeaderFile found at offset 0DEC4800-0DEEBEE0 name: CerberusFile found at offset 0DEEC000-0DF1947C name: DiablosFile found at offset 0DF19800-0DF48A38 name: BahamutFile found at offset 0DF49000-0DF58DA8 name: NORG PodFile found at offset 0DF59000-0DF60380 name: Garden FacultyFile found at offset 0DF60800-0DF92714 name: OdinFile found at offset 0DF92800-0DF9EC38 name: G-SoldierFile found at offset 0DF9F000-0DFB1EA8 name: Elite SoldierFile found at offset 0DFB2000-0DFBE5F8 name: WedgeFile found at offset 0DFBE800-0DFD1654 name: BiggsFile found at offset 0DFD1800-0DFEB498 name: Fake PresidentFile found at offset 0DFEB800-0DFF7C0C name: GuardFile found at offset 0DFF8000-0E017ED4 name: NORGFile found at offset 0E018000-0E028AFC name: Esthar SoldierFile found at offset 0E029000-0E040600 name: Esthar SoldierFile found at offset 0E040800-0E0451FC name: Right OrbFile found at offset 0E045800-0E04A1FC name: Left OrbFile found at offset 0E04A800-0E053840 name: GunbladeFile found at offset 0E054000-0E079BB8 name: Tonberry KingFile found at offset 0E07A000-0E09701C name: Jumbo CactuarFile found at offset 0E097800-0E0AA13C name: SeiferFile found at offset 0E0AA800-0E0BDE08 name: SeiferFile found at offset 0E0BE000-0E0CFD90 name: SeiferFile found at offset 0E0D0000-0E0EB4EC name: EdeaFile found at offset 0E0EB800-0E11BF60 name: PropagatorFile found at offset 0E11C000-0E15B740 name: Ultima WeaponFile found at offset 0E15B800-0E18C640 name: ElvoretFile found at offset 0E18C800-0E1B8DB8 name: X-ATM092File found at offset 0E1B9000-0E1D5170 name: IguionFile found at offset 0E1D5800-0E1FED24 name: GargantuaFile found at offset 0E1FF000-0E226DA4 name: GranaldoFile found at offset 0E227000-0E23CF9C name: RaldoFile found at offset 0E23D000-0E26D760 name: PropagatorFile found at offset 0E26D800-0E29DF60 name: PropagatorFile found at offset 0E29E000-0E2C2F7C name: OilboyleFile found at offset 0E2C3000-0E2DDEDC name: EdeaFile found at offset 0E2DE000-0E30D290 name: BGH251F2File found at offset 0E30D800-0E339370 name: BGH251F2File found at offset 0E339800-0E368254 name: AbadonFile found at offset 0E368800-0E37828C name: AbadonFile found at offset 0E378800-0E394390 name: Mobile Type 8File found at offset 0E394800-0E3A17EC name: Left ProbeFile found at offset 0E3A1800-0E3AE89C name: Right ProbeFile found at offset 0E3AF000-0E3BB414 name: ParatrooperFile found at offset 0E3BB800-0E3DE438 name: TraumaFile found at offset 0E3DE800-0E3F1354 name: DromaFile found at offset 0E3F1800-0E421F60 name: PropagatorFile found at offset 0E422000-0E45A9A0 name: AdelFile found at offset 0E45B000-0E46507C name: RinoaFile found at offset 0E465800-0E4AA080 name: Omega WeaponFile 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: FujinFile found at offset 0E54E800-0E567580 name: RaijinFile found at offset 0E567800-0E5A2430 name: UltimeciaFile found at offset 0E5A2800-0E5E36D8 name: GrieverFile found at offset 0E5E3800-0E5E83E0 name: File found at offset 0E5E8800-0E62D700 name: UltimeciaFile found at offset 0E62D800-0E632470 name: HelixFile found at offset 0E632800-0E67624C name: UltimeciaFile found at offset 0E676000-0E676008, parts: 0File found at offset 0E676800-0E6769CC, parts: 2File found at offset 0E677000-0E68CDA0 name: SeiferFile found at offset 0E68D000-0E69DBA4 name: SlapperFile found at offset 0E69E000-0E6C367C name: Red GiantFile found at offset 0E6C3800-0E6F4CF8 name: ElnoyleFile found at offset 0E6F5000-0E726B88 name: TiamatFile found at offset 0E727000-0E74B574 name: CatoblepasFile found at offset 0E74B800-0E757CCC name: WedgeFile found at offset 0E758000-0E76ACF4 name: BiggsFile found at offset 0E76B000-0E78046C name: FujinFile found at offset 0E780800-0E799650 name: RaijinFile 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: GunbladeFile found at offset 0E7F9800-0E805C6C name: Base SoldierFile found at offset 0E806000-0E8195B4, parts: 7File found at offset 0E819800-0E82CC40, parts: 7File found at offset 0E82D000-0E8362FC, parts: 8File found at offset 0E836800-0E83FD8C, parts: 8File found at offset 0E840000-0E849BE8, parts: 8File found at offset 0E84A000-0E853E78, parts: 8File found at offset 0E854000-0E85DC18, parts: 8File found at offset 0E85E000-0E867EA8, parts: 8File found at offset 0E868000-0E871B34, parts: 8File found at offset 0E872000-0E8860A8, parts: 7File found at offset 0E886800-0E89A740, parts: 7File found at offset 0E89A800-0E8A29EC, parts: 5File found at offset 0E8A3000-0E8AB1EC, parts: 5File found at offset 0E8AB800-0E8B39EC, parts: 5File found at offset 0E8B4000-0E8BC1EC, parts: 5File found at offset 0E8BC800-0E8D2468, parts: 7File found at offset 0E8D2800-0E8DAB00, parts: 8File found at offset 0E8DB000-0E8E36D0, parts: 8File found at offset 0E8E3800-0E8EBF38, parts: 8File found at offset 0E8EC000-0E8F46CC, parts: 8File found at offset 0E8F4800-0E908B6C, parts: 7File found at offset 0E909000-0E913058, parts: 8File found at offset 0E913800-0E91D968, parts: 8File found at offset 0E91E000-0E928138, parts: 8File found at offset 0E928800-0E932908, parts: 8File found at offset 0E933000-0E948E04, parts: 7File found at offset 0E949000-0E9518B0, parts: 8File found at offset 0E952000-0E95A9A8, parts: 8File found at offset 0E95B000-0E9639E4, parts: 8File found at offset 0E964000-0E96C9D0, parts: 8File found at offset 0E96D000-0E9759E0, parts: 8File found at offset 0E976000-0E98900C, parts: 7File found at offset 0E989800-0E99C724, parts: 7File found at offset 0E99C800-0E9A7790, parts: 8File found at offset 0E9A7800-0E9B29AC, parts: 8File found at offset 0E9B3000-0E9BE120, parts: 8File found at offset 0E9BE800-0E9C9974, parts: 8File found at offset 0E9CA000-0E9DF6F0, parts: 7File found at offset 0E9DF800-0E9E85B8, parts: 8File found at offset 0E9E8800-0EA05EE0, parts: 10File found at offset 0EA06000-0EA1AD88, parts: 7File found at offset 0EA1B000-0EA2FF74, parts: 7File found at offset 0EA30000-0EA389EC, parts: 8File found at offset 0EA39000-0EA4EF94, parts: 7File found at offset 0EA4F000-0EA6509C, parts: 7File found at offset 0EA65800-0EA6D2EC, parts: 5File found at offset 0EA6D800-0EA82378, parts: 7File found at offset 0EA82800-0EA972C0, parts: 7File found at offset 0EA97800-0EAA04DC, parts: 8File found at offset 0EC00000-0EC213C8, parts: 2File found at offset 0ECAC800-0ECBB4AC, parts: 4File found at offset 0EE5B800-0EE60890, parts: 4File found at offset 0EEDB000-0EEE53C0, parts: 4File found at offset 0F01B800-0F0297A8, parts: 4File found at offset 0F074000-0F087730, parts: 4File found at offset 0F0C8800-0F0D6414, parts: 4File found at offset 0F5AD800-0F5BE304, parts: 4File found at offset 0F665800-0F678348, parts: 4File found at offset 0F6BA800-0F6CAB00, parts: 4File found at offset 0F75B800-0F76FEE0, parts: 4File found at offset 0F7A9800-0F7ACB1C, parts: 4File found at offset 0F7C6800-0F7CDFE0, parts: 4File found at offset 0F7F7000-0F7F879C, parts: 4File found at offset 0F805000-0F8115A0, parts: 4File found at offset 0FA5C800-0FA8484C, parts: 8Found 143 Monster models.Found 67 Unknown models.

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.

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.

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_groupsLONG*num_groups group_offsets

each group has this structure:SHORT num_bones{ SHORT bone_id SHORT num_verts SHORT[3]*numverts verts} * num_bonesSHORT num_triangles (32 bit aligned, so when pointer reaches the address at end of bone structure do (pointer + 3) & 0xFFFFFFFCSHORT 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

I hope this will help you with researching of unknown parameters in models structure. Disassemly text you can find here: http://viiigine.com/downloads.phpOf 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 »

Logged

Ultimecia

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 head001- Yet another insanely small Squall, but this time it's his body002- Small Ragnarok piece003- Small Ragnarok 2004- Ragnarok?005- Yet more Ragnarok006- No idea what it is007- Small chocobo008- Duplicate of #006009- Duplicate of #007010- Duplicate of #000011- Squall's Garden uniform012- Zell tiny little head013- Zell's body014- Selphie's body015- Selphie's head

koral

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

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!

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.

koral

Thankyou for your input Vehek, I will look into that last section in MCH files pronto

Joints, bones, same thing 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.

Kung Fu Man

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.

Kung Fu Man

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.

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...

Logged

Kung Fu Man

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.

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.

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.

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?)