Author Topic: FF7 Crisis Core - File Format and Data Investigation  (Read 146702 times)

koral

  • Guest
I think i wasn't wrong in the first place, the first 4 shorts really might just be 2-Float UVs!



the data goes something like this:
Code: [Select]
read bytes until find tag (3f800000)
go back to beginning of vertex-group bytes and read:
- FLOAT  (i assumed U)
- FLOAT  (i assumed V)
- SHORT
- SHORT  (i assumed Y)
- BYTE
- SHORT  (i assumed X)
- SHORT
- SHORT  (i assumed Z)

Here is a video showing how these vertices look when plotted in space: http://www.mediafire.com/?henmwyytmdu

Apparantly not a barrel, but some kind of a crate? Or maybe my assumed XYZs are all wrong  :-P
But definitly on the right track now because there are obvious cylindrical shapes everywhere.

There only seem to be about 30 vertices visible, so the other 50 or so must be repeats, so maybe these are simple unindexed vertices to plot one after another?
I did try rendering them as triangles and quads, but they give gobbledegook, so maybe a mixture of the two determined by other tags or somthing.

here are the actual values I read in:  (the first ones just a "header" with all zeros)
Code: [Select]
VERTEX: 0:   START: 440, SIZE: 0  -->    SHORT:     BYTE:    SHORT: 
VERTEX: 1:   START: 444, SIZE: 20  -->    FLOAT:  0.498134, 0.272702,   SHORT:  155, 180,    BYTE:  74,   SHORT:  -32, 19071, 224,
VERTEX: 2:   START: 468, SIZE: 20  -->    FLOAT:  0.002758, 0.499466,   SHORT:  131, 239,    BYTE:  39,   SHORT:  211, 0, 0,
VERTEX: 3:   START: 492, SIZE: 20  -->    FLOAT:  0.498134, 0.499466,   SHORT:  131, 17,    BYTE:  39,   SHORT:  -45, 127, 0,
VERTEX: 4:   START: 516, SIZE: 20  -->    FLOAT:  0.498134, 0.272701,   SHORT:  101, 76,    BYTE:  182,   SHORT:  -225, -18817, 31,
VERTEX: 5:   START: 540, SIZE: 20  -->    FLOAT:  0.002758, 0.499465,   SHORT:  125, 17,    BYTE:  217,   SHORT:  44, 0, 0,
VERTEX: 6:   START: 564, SIZE: 20  -->    FLOAT:  0.498134, 0.499465,   SHORT:  125, 239,    BYTE:  217,   SHORT:  -212, 127, 0,
VERTEX: 7:   START: 588, SIZE: 20  -->    FLOAT:  0.691666, -0.001050,   SHORT:  32512, 0,    BYTE:  0,   SHORT:  -256, -9857, 44,
VERTEX: 8:   START: 612, SIZE: 20  -->    FLOAT:  0.821459, 0.106474,   SHORT:  32512, 0,    BYTE:  182,   SHORT:  -225, -18817, 31,
VERTEX: 9:   START: 636, SIZE: 20  -->    FLOAT:  0.691666, 0.733167,   SHORT:  32512, 0,    BYTE:  0,   SHORT:  -256, 10111, 211,
VERTEX: 10:   START: 660, SIZE: 20  -->    FLOAT:  0.691666, 0.733167,   SHORT:  32512, 0,    BYTE:  0,   SHORT:  -256, 10111, 211,
VERTEX: 11:   START: 684, SIZE: 20  -->    FLOAT:  0.821459, 0.106474,   SHORT:  32512, 0,    BYTE:  74,   SHORT:  -32, -18817, 31,
VERTEX: 12:   START: 708, SIZE: 20  -->    FLOAT:  0.691666, -0.001050,   SHORT:  32512, 0,    BYTE:  0,   SHORT:  -256, -9857, 44,
VERTEX: 13:   START: 732, SIZE: 20  -->    FLOAT:  0.684356, -0.001050,   SHORT:  -32512, 0,    BYTE:  0,   SHORT:  0, -9984, 44,
VERTEX: 14:   START: 756, SIZE: 20  -->    FLOAT:  0.554564, 0.106474,   SHORT:  -32512, 0,    BYTE:  74,   SHORT:  224, -18944, 31,
VERTEX: 15:   START: 780, SIZE: 20  -->    FLOAT:  0.684356, 0.733167,   SHORT:  -32512, 0,    BYTE:  0,   SHORT:  0, 9984, 211,
VERTEX: 16:   START: 804, SIZE: 20  -->    FLOAT:  0.684356, 0.733167,   SHORT:  -32512, 0,    BYTE:  0,   SHORT:  0, 9984, 211,
VERTEX: 17:   START: 828, SIZE: 20  -->    FLOAT:  0.554564, 0.106474,   SHORT:  -32512, 0,    BYTE:  182,   SHORT:  31, -18944, 31,
VERTEX: 18:   START: 852, SIZE: 20  -->    FLOAT:  0.684356, -0.001050,   SHORT:  -32512, 0,    BYTE:  0,   SHORT:  0, -9984, 44,
VERTEX: 19:   START: 876, SIZE: 20  -->    FLOAT:  0.002758, 0.995258,   SHORT:  239, 125,    BYTE:  0,   SHORT:  0, -9984, 44,
VERTEX: 20:   START: 900, SIZE: 20  -->    FLOAT:  0.498134, 0.995258,   SHORT:  17, 125,    BYTE:  0,   SHORT:  -256, -9857, 44,
VERTEX: 21:   START: 924, SIZE: 20  -->    FLOAT:  0.498134, 0.726230,   SHORT:  180, 101,    BYTE:  74,   SHORT:  -32, -18817, 31,
VERTEX: 22:   START: 948, SIZE: 20  -->    FLOAT:  0.002758, 0.726230,   SHORT:  155, 76,    BYTE:  74,   SHORT:  224, -18944, 31,
VERTEX: 23:   START: 972, SIZE: 20  -->    FLOAT:  0.002758, 0.995258,   SHORT:  239, 125,    BYTE:  0,   SHORT:  0, -9984, 44,
VERTEX: 24:   START: 996, SIZE: 20  -->    FLOAT:  0.498134, 0.726230,   SHORT:  180, 101,    BYTE:  74,   SHORT:  -32, -18817, 31,
VERTEX: 25:   START: 1020, SIZE: 20  -->    FLOAT:  0.002758, 0.272702,   SHORT:  180, 155,    BYTE:  74,   SHORT:  224, 18944, 224,
VERTEX: 26:   START: 1044, SIZE: 20  -->    FLOAT:  0.498134, 0.272702,   SHORT:  155, 180,    BYTE:  74,   SHORT:  -32, 19071, 224,
VERTEX: 27:   START: 1068, SIZE: 20  -->    FLOAT:  0.498134, 0.003673,   SHORT:  239, 131,    BYTE:  0,   SHORT:  -256, 10111, 211,
VERTEX: 28:   START: 1092, SIZE: 20  -->    FLOAT:  0.002758, 0.003673,   SHORT:  17, 131,    BYTE:  0,   SHORT:  0, 9984, 211,
VERTEX: 29:   START: 1116, SIZE: 20  -->    FLOAT:  0.002758, 0.272702,   SHORT:  180, 155,    BYTE:  74,   SHORT:  224, 18944, 224,
VERTEX: 30:   START: 1140, SIZE: 20  -->    FLOAT:  0.498134, 0.003673,   SHORT:  239, 131,    BYTE:  0,   SHORT:  -256, 10111, 211,
VERTEX: 31:   START: 1164, SIZE: 20  -->    FLOAT:  0.002758, 0.995258,   SHORT:  17, 131,    BYTE:  0,   SHORT:  0, 9984, 211,
VERTEX: 32:   START: 1188, SIZE: 20  -->    FLOAT:  0.498134, 0.995258,   SHORT:  239, 131,    BYTE:  0,   SHORT:  -256, 10111, 211,
VERTEX: 33:   START: 1212, SIZE: 20  -->    FLOAT:  0.498134, 0.726229,   SHORT:  76, 155,    BYTE:  182,   SHORT:  -225, 19071, 224,
VERTEX: 34:   START: 1236, SIZE: 20  -->    FLOAT:  0.002758, 0.726229,   SHORT:  101, 180,    BYTE:  182,   SHORT:  31, 18944, 224,
VERTEX: 35:   START: 1260, SIZE: 20  -->    FLOAT:  0.002758, 0.995258,   SHORT:  17, 131,    BYTE:  0,   SHORT:  0, 9984, 211,
VERTEX: 36:   START: 1284, SIZE: 20  -->    FLOAT:  0.498134, 0.726229,   SHORT:  76, 155,    BYTE:  182,   SHORT:  -225, 19071, 224,
VERTEX: 37:   START: 1308, SIZE: 20  -->    FLOAT:  0.002758, 0.003673,   SHORT:  239, 125,    BYTE:  0,   SHORT:  0, -9984, 44,
VERTEX: 38:   START: 1332, SIZE: 20  -->    FLOAT:  0.002758, 0.272701,   SHORT:  76, 101,    BYTE:  182,   SHORT:  31, -18944, 31,
VERTEX: 39:   START: 1356, SIZE: 20  -->    FLOAT:  0.498134, 0.003673,   SHORT:  17, 125,    BYTE:  0,   SHORT:  -256, -9857, 44,
VERTEX: 40:   START: 1380, SIZE: 20  -->    FLOAT:  0.002758, 0.272701,   SHORT:  76, 101,    BYTE:  182,   SHORT:  31, -18944, 31,
VERTEX: 41:   START: 1404, SIZE: 20  -->    FLOAT:  0.498134, 0.272701,   SHORT:  101, 76,    BYTE:  182,   SHORT:  -225, -18817, 31,
VERTEX: 42:   START: 1428, SIZE: 20  -->    FLOAT:  0.498134, 0.003673,   SHORT:  17, 125,    BYTE:  0,   SHORT:  -256, -9857, 44,
VERTEX: 43:   START: 1452, SIZE: 20  -->    FLOAT:  0.002758, 0.726230,   SHORT:  155, 76,    BYTE:  74,   SHORT:  224, -18944, 31,
VERTEX: 44:   START: 1476, SIZE: 20  -->    FLOAT:  0.498134, 0.499466,   SHORT:  131, 17,    BYTE:  39,   SHORT:  -45, 127, 0,
VERTEX: 45:   START: 1500, SIZE: 20  -->    FLOAT:  0.002758, 0.499466,   SHORT:  131, 239,    BYTE:  39,   SHORT:  211, 0, 0,
VERTEX: 46:   START: 1524, SIZE: 20  -->    FLOAT:  0.002758, 0.726229,   SHORT:  101, 180,    BYTE:  182,   SHORT:  31, 18944, 224,
VERTEX: 47:   START: 1548, SIZE: 20  -->    FLOAT:  0.498134, 0.499465,   SHORT:  125, 239,    BYTE:  217,   SHORT:  -212, 127, 0,
VERTEX: 48:   START: 1572, SIZE: 20  -->    FLOAT:  0.002758, 0.499465,   SHORT:  125, 17,    BYTE:  217,   SHORT:  44, 0, 0,
VERTEX: 49:   START: 1596, SIZE: 20  -->    FLOAT:  0.875220, 0.366059,   SHORT:  32512, 0,    BYTE:  217,   SHORT:  -212, 127, 0,
VERTEX: 50:   START: 1620, SIZE: 20  -->    FLOAT:  0.821459, 0.625644,   SHORT:  32512, 0,    BYTE:  182,   SHORT:  -225, 19071, 224,
VERTEX: 51:   START: 1644, SIZE: 20  -->    FLOAT:  0.821459, 0.106474,   SHORT:  32512, 0,    BYTE:  182,   SHORT:  -225, -18817, 31,
VERTEX: 52:   START: 1668, SIZE: 20  -->    FLOAT:  0.821459, 0.625644,   SHORT:  32512, 0,    BYTE:  182,   SHORT:  -225, 19071, 224,
VERTEX: 53:   START: 1692, SIZE: 20  -->    FLOAT:  0.691666, 0.733167,   SHORT:  32512, 0,    BYTE:  0,   SHORT:  -256, 10111, 211,
VERTEX: 54:   START: 1716, SIZE: 20  -->    FLOAT:  0.821459, 0.106474,   SHORT:  32512, 0,    BYTE:  182,   SHORT:  -225, -18817, 31,
VERTEX: 55:   START: 1740, SIZE: 20  -->    FLOAT:  0.821459, 0.625644,   SHORT:  32512, 0,    BYTE:  74,   SHORT:  -32, 19071, 224,
VERTEX: 56:   START: 1764, SIZE: 20  -->    FLOAT:  0.821459, 0.106474,   SHORT:  32512, 0,    BYTE:  74,   SHORT:  -32, -18817, 31,
VERTEX: 57:   START: 1788, SIZE: 20  -->    FLOAT:  0.691666, 0.733167,   SHORT:  32512, 0,    BYTE:  0,   SHORT:  -256, 10111, 211,
VERTEX: 58:   START: 1812, SIZE: 20  -->    FLOAT:  0.875220, 0.366059,   SHORT:  32512, 0,    BYTE:  39,   SHORT:  -45, 127, 0,
VERTEX: 59:   START: 1836, SIZE: 20  -->    FLOAT:  0.821459, 0.106474,   SHORT:  32512, 0,    BYTE:  74,   SHORT:  -32, -18817, 31,
VERTEX: 60:   START: 1860, SIZE: 20  -->    FLOAT:  0.821459, 0.625644,   SHORT:  32512, 0,    BYTE:  74,   SHORT:  -32, 19071, 224,
VERTEX: 61:   START: 1884, SIZE: 20  -->    FLOAT:  0.500802, 0.366059,   SHORT:  -32512, 0,    BYTE:  39,   SHORT:  211, 0, 0,
VERTEX: 62:   START: 1908, SIZE: 20  -->    FLOAT:  0.554564, 0.625643,   SHORT:  -32512, 0,    BYTE:  74,   SHORT:  224, 18944, 224,
VERTEX: 63:   START: 1932, SIZE: 20  -->    FLOAT:  0.554564, 0.106474,   SHORT:  -32512, 0,    BYTE:  74,   SHORT:  224, -18944, 31,
VERTEX: 64:   START: 1956, SIZE: 20  -->    FLOAT:  0.554564, 0.625643,   SHORT:  -32512, 0,    BYTE:  74,   SHORT:  224, 18944, 224,
VERTEX: 65:   START: 1980, SIZE: 20  -->    FLOAT:  0.684356, 0.733167,   SHORT:  -32512, 0,    BYTE:  0,   SHORT:  0, 9984, 211,
VERTEX: 66:   START: 2004, SIZE: 20  -->    FLOAT:  0.554564, 0.106474,   SHORT:  -32512, 0,    BYTE:  74,   SHORT:  224, -18944, 31,
VERTEX: 67:   START: 2028, SIZE: 20  -->    FLOAT:  0.554564, 0.625643,   SHORT:  -32512, 0,    BYTE:  182,   SHORT:  31, 18944, 224,
VERTEX: 68:   START: 2052, SIZE: 20  -->    FLOAT:  0.554564, 0.106474,   SHORT:  -32512, 0,    BYTE:  182,   SHORT:  31, -18944, 31,
VERTEX: 69:   START: 2076, SIZE: 20  -->    FLOAT:  0.684356, 0.733167,   SHORT:  -32512, 0,    BYTE:  0,   SHORT:  0, 9984, 211,
VERTEX: 70:   START: 2100, SIZE: 20  -->    FLOAT:  0.500802, 0.366059,   SHORT:  -32512, 0,    BYTE:  217,   SHORT:  44, 0, 0,
VERTEX: 71:   START: 2124, SIZE: 20  -->    FLOAT:  0.554564, 0.106474,   SHORT:  -32512, 0,    BYTE:  182,   SHORT:  31, -18944, 31,
VERTEX: 72:   START: 2148, SIZE: 20  -->    FLOAT:  0.554564, 0.625643,   SHORT:  -32512, 0,    BYTE:  182,   SHORT:  31, 18944, 224,
VERTEX: 73:   START: 2172, SIZE: 20  -->    FLOAT:  0.002758, 0.272701,   SHORT:  76, 101,    BYTE:  182,   SHORT:  31, -18944, 31,
VERTEX: 74:   START: 2196, SIZE: 20  -->    FLOAT:  0.002758, 0.499465,   SHORT:  125, 17,    BYTE:  217,   SHORT:  44, 0, 0,
VERTEX: 75:   START: 2220, SIZE: 20  -->    FLOAT:  0.498134, 0.272701,   SHORT:  101, 76,    BYTE:  182,   SHORT:  -225, -18817, 31,
VERTEX: 76:   START: 2244, SIZE: 20  -->    FLOAT:  0.498134, 0.726229,   SHORT:  76, 155,    BYTE:  182,   SHORT:  -225, 19071, 224,
VERTEX: 77:   START: 2268, SIZE: 20  -->    FLOAT:  0.498134, 0.499465,   SHORT:  125, 239,    BYTE:  217,   SHORT:  -212, 127, 0,
VERTEX: 78:   START: 2292, SIZE: 20  -->    FLOAT:  0.002758, 0.726229,   SHORT:  101, 180,    BYTE:  182,   SHORT:  31, 18944, 224,
VERTEX: 79:   START: 2316, SIZE: 20  -->    FLOAT:  0.002758, 0.272702,   SHORT:  180, 155,    BYTE:  74,   SHORT:  224, 18944, 224,
VERTEX: 80:   START: 2340, SIZE: 20  -->    FLOAT:  0.002758, 0.499466,   SHORT:  131, 239,    BYTE:  39,   SHORT:  211, 0, 0,
VERTEX: 81:   START: 2364, SIZE: 20  -->    FLOAT:  0.498134, 0.272702,   SHORT:  155, 180,    BYTE:  74,   SHORT:  -32, 19071, 224,
VERTEX: 82:   START: 2388, SIZE: 20  -->    FLOAT:  0.498134, 0.726230,   SHORT:  180, 101,    BYTE:  74,   SHORT:  -32, -18817, 31,
VERTEX: 83:   START: 2412, SIZE: 20  -->    FLOAT:  0.498134, 0.499466,   SHORT:  131, 17,    BYTE:  39,   SHORT:  -45, 127, 0,

If anyone can spot a better possibility for the XYZ values (any one of those shorts could be X, Y or Z) then please please do let me know!
 :-D

koral

  • Guest
Tada!

 

Simple bone-less [!] files now understood enough to render!
I still haven't figured out where Characters and other larger models store their XYZs, so they show up as junk with the loader.

After hours of banging my head against the wall and lots of different XYZ combinations, I decided to try the obvious thing and set the last 3 shorts as XYZ and everything clicked together!  :-D

The vertex format so far is:
Code: [Select]
(after first vertex-tag)
FLOAT, FLOAT, 4-bytes (unknown), SHORT, SHORT, SHORT, 3f800000  =  U, V, (????), X, Y, Z, vertex-tag
rinse and repeat

Render as a simple triangle-(primitive)-list, no headaches over face indices or quads or anything else

Characters soon!
 :lol:

ultima espio

  • No life
  • *
  • Posts: 1359
  • Karma: 20
    • View Profile
 :-o :-o :-o

Wow! Cant wait for characters lol.

koral

  • Guest
I know espio, I can't wait either  :-P

Here is what Moogle-san looks like right now:


i know I'm close, but there is something horrible going on somewhere.

Almost there  :-D

BlitzNCS

  • Freak
  • *
  • Posts: 891
  • Karma: 2
  • Master of nothing in particular
    • View Profile
    • My Youtube
*cries*

Wow. i REALLY am amazed at this :D

great job koral :D

koral

  • Guest
a collage to tease you some more:


Looking through the other [!] files I noticed a lot of them are almost fully intact, just like the barrel and that can (box) thing. Most machine monsters and machine bosses, small objects etc.

Characters are still iffy.
I managed to get rid of a lot of random vertices and things are looking better now, although still far from perfect:


more updates as they come  :wink:

Jonnylossus

  • Crazy poster
  • *
  • Posts: 115
  • Karma: 0
    • View Profile
Thats really great.^^

Silver Wings

  • Cool newbie
  • *
  • Posts: 90
  • Karma: 0
    • View Profile
Oh my godness!!!
I dont know how to say :touched:
Haizz, be ashame of being helpless to you guys

koral

  • Guest
its cool, you don't need to feel ashamed :)

I haven't made much progress with the characters, but I have noticed a few things.

There are two types of Vertices:

- those grouped as 24-byte chunks (including tag)
- those not grouped as 24-byte chunks (ranging from 28 to 300 bytes)

What you see in the above screenshots are only those 24-byte vertices, so the only thing to figure out now is how those non-24-byte vertices are stored.

Now inside those non-24-byte-vertices there are also a handful of other "tags" of somesort, in varying order.

The ones I've spotted so far:
Code: [Select]
- 9a 99 99 3e  [short: 3e99999a]
- 33 33 33 3f  [short: 3f333333]
- 66 66 66 3f  [short: 3f666666]
- cd cc cc 3d  [short: 3dcccccd]

I have no idea what they are, possibly some kind of PSP op-codes?

I know there aren't any Normals present because in FF7-CC they haven't used any real lighting (for improved rendering speeds I would guess), but what other kind of additional data could possibly be squeezed within vertex-triangle-lists?
 :|

ignitz

  • Fast newbie
  • *
  • Posts: 44
  • Karma: 0
    • View Profile
I found a thing maybe be important in RAM dumper os PSP
In MDL and others files and other things have a memory pointers, I don't know will help with info.

MDL
4D444C00 01000A00 0011E098 01000000 01000000 B03E1609
01000000 C83E1609 00000000 FFFFFFFF 27000000 00060A00
00000000 FFFFFFFF 31000000 103F1609


Like This
B03E1609 (09163EB0)
C83E1609 (09163EC8)
103F1609 (09163F10)

This is a RAM "alocker" Have a Lots of this.
With a RAM PSP have 24MB then dump the RAM and you will be this way

B03E1609 then 0x09163EB0 then

0x09163EB0 - 0x8800000 = 0x963EB0 (this will be offset real on the RAM in HexEditor)

With this info you can info you can found a way to dissasembly the files i thing with this.

---------------------------------------------------------------------------------
MDL
4D444C00 01000A00 0011E098 01000000
01000000 B03E1609 // This point Lead to A

01000000 C83E1609  //This lead to B

A
00000000 FFFFFFFF 27000000 00060A00 00000000 FFFFFFFF


B
31000000 103F1609



PS: Maybe I will be wrong, I Thing this system will be work only Spanish Dump and found in USA GAme too

 0x8800000  this will be a Initial RAM for PSP
----------------------------------------------------------------------------------------

In files don't have any pointer.
In RAM this pointers tranforms in this pointers RAM

http://www.megaupload.com/pt/?d=GMESQM3F

Link to the DUMP SPANISH and DUMP USA "(2)"
« Last Edit: 2009-02-06 08:22:19 by ignitz »

koral

  • Guest
um, I'm not sure what you're talking about ignitz  :oops:

usually there are a bunch of offsets in the header (first 0x80 bytes or so) pointing to different places in the file. I've been using a hex-editor to see if which number point to another section in the file, and which are just plain numbers.

But I don't know much about MDL files though, so I will have a look at that ram-dump to see what its about  :wink:

I would be interested to hear how you managed to dump the ram in the first place, it might help to discover what gets executed when the game boots up, because there might be something todo with the debug-menu in there!



Nothing new with the [!] files sadly, I'm still struggling to understand the non-24-byte vertex chunks  :-(

I gave them names though  :-P
- Type-1 Vertex data = 24-bytes
- Type-2 Vertex data = more than 24-bytes

Type-2 vertex-chunks actually contain multiple Type-1 vertices inside them, but they seem to be randomly located within the chunks.
The "extended" tags (0x333333f, 0xcdcccc3d, etc) look like they're padding, or mark the beginning and end of padding-bytes in some way. I haven't been able to spot an obvious pattern though, because they get used diffferently in different files.

so close yet so far  :|

spidergaby

  • Fast newbie
  • *
  • Posts: 22
  • Karma: 0
    • View Profile
Yeah good job, continue !!!!  :wink:

spidergaby

  • Fast newbie
  • *
  • Posts: 22
  • Karma: 0
    • View Profile
Any news ???  :cry:
PLease continue  :cry: :cry:

spidergaby

  • Fast newbie
  • *
  • Posts: 22
  • Karma: 0
    • View Profile
Hey why not use 3Dx ripper ??
Have you loojed at the Yazor models viewer ?

ultima espio

  • No life
  • *
  • Posts: 1359
  • Karma: 20
    • View Profile
Will you pack it in triple posting?? It's really really annoying to us watching the topic to find your pointless posts.

koral

  • Guest
sorry everyone, life finally caught up with me again and I haven't had a chance   :-(

the project will be continuing until I can get characters rendered properly.
Everything else like map-meshes, animations, monsters and all the other stuff, I don't know. Maybe I will, maybe I wont.

I should get some time over the weekend to try solve this stupid vertex stuff, fingers crossed

BlitzNCS

  • Freak
  • *
  • Posts: 891
  • Karma: 2
  • Master of nothing in particular
    • View Profile
    • My Youtube
I guess I'll try and help out too :D
Thanks for your commitment to this koral!

spidergaby

  • Fast newbie
  • *
  • Posts: 22
  • Karma: 0
    • View Profile
sorry for the "triple post"  :|

NameSpoofer

  • Guest
Hey Koral

Good to see you doing a great job

Its almost there. Thumbs up mate :wink:

koral

  • Guest
A little update of what I did over the weekend, and what I'm trying now

Things are almost falling into place:


Moogle-san's head now has all the correct vertices, but hundreds of new rogue vertices also seemed to get detected.
I have been working on a special sort of "data parser" to handle the Type-2 vertices, because there really isn't any logical way to find the Type-1 vertices without reading through and ignoring all the random padding "tags"

For example, here is the breakdown of the first Type-2 vertex in file 02373 [moogle]:
Code: [Select]
  vertex 66, start: 0xd30,  end 0xdd0,   size: 0x100

0x00 00 00 80 3f *** TYPE-1 VERTEX tag

0x04   TYPE-1 VERTEX

0x18 01 00 0e 00 ? 24-byte padding start tag [2nd and 4th bytes always zero]
0x1c     20-byte padding

0x2c 54 00 00 00 ? 4-byte padding [2nd, 3rd and 4th bytes always zero]
0x30 66 66 66 3f   4-byte padding
0x34 cd cc cc 3d   4-byte padding

0x38   TYPE-1 VERTEX

0x4C 33 33 33 3f   4-byte padding
0x50 9a 99 99 3e   4-byte padding

0x54   TYPE-1 VERTEX

0x68 66 66 66 3f   4-byte padding
0x6c cd cc cc 3d   4-byte padding

0x70   TYPE-1 VERTEX

0x84 33 33 33 3f   4-byte padding
0x88 9a 99 99 3e   4-byte padding

0x8c   TYPE-1 VERTEX

There were 5 Type-1 vertices packed into this Type-2 chunk, and the number varies a lot.
The most difficult thing is trying to determine a UV-FLOAT (0-1) from either of 3 tag (padding) possibilities:

- 00 00 00 00 = pops up in a lot of other files, usually following other padding-tags
- 1st byte non-zero, 3rd byte non-zero, 2nd and 4th bytes zeros = 24-byte padding
- 1st byte non-zero, rest zeros = 4-byte padding

But its all most definitly based on 4-byte (2-SHORT, 1-FLOAT) reads, although not neccessarily after 20-byte chunks (size of Type-1 vertices).
Its a long haul and a tough cookie, but I wont give up until its over  :wink:

spidergaby

  • Fast newbie
  • *
  • Posts: 22
  • Karma: 0
    • View Profile
It looks ....strange  :-o

BlitzNCS

  • Freak
  • *
  • Posts: 891
  • Karma: 2
  • Master of nothing in particular
    • View Profile
    • My Youtube
Indeed it is strange...
...Koral, how come the latest screenshot of the moogle appears to have a Completely messed up Body below the head, whereas the screenshot before that looks almost normal in terms of the body? In fixing the Head, have you somehow ruined the body? That's really quite weird.

koral

  • Guest
sorry peeps, i'm still struggling for time

it looks ugly because all those random vertices are all from the Type-2 vertex chunks. I have not been able to find a way to cleanly get the correct vertices out of those chunks, because there are usually more fake vertices than real ones. Those fake vertices might be padding or maybe something else. But there just isn't a clear-cut way to tell which is which.

I didn't want to have to do this, but have a look at some of the characters as they look now, demonstrating what I mean:



Zack:


Reno:



there were hunderds of fake-vertices, and I have spent the past couple of weeks trying to decypher the "rules", to be able tell which vertices are fake and which aren't.
Some of those fake-vertices are still there, and in other cases, real vertices get mistaken for fake ones, causing the polygon indexing to mess up.

I have made a number of minor discoveries, but I wont spam this topic with useless bits of posts until I make a breakthrough.

I have also been given acess to the Quimm-Wiki, I just need to find the time to get on with it.
Sorry for not getting much done this month :oops:

ultima espio

  • No life
  • *
  • Posts: 1359
  • Karma: 20
    • View Profile
It's ok Koral, at least your getting somewhere with it. They dont look that bad right there, just missing a few bits.

Satoh

  • Insane poster
  • *
  • Posts: 386
  • Karma: 6
  • Assuming this statement is correct, I'm alive.
    • View Profile
Koral, you haven't found any bone data yet have you? It's starting to look to me, that some of those fake verts may be bone joins and endpoints... namely the ones at the ends of Reno's hands there, they are in a conceivable place to be the ends of the wrist bones...

Another thing to note... Is it just me, or does that large cluster of crap under Zack not have a similar shape to the buster sword?

On a seconds inspection, the rod Reno uses is beneath him, so that must be the sword. Perhaps some of the fake verts are related to secondary textures required by the engine... It looks like the buster sword is using Zack's texture, rather than a new one.

I know you may have already noted much of what I've said, but in case you somehow missed it, I hope my ideas have helped somehow... On the other hand I could be completely wrong.