Important information: this site is currently scheduled to go offline indefinitely by end of the year.

Heroes of Might and Magic 6

Post questions about game models here, or help out others!
Post Reply
finale00
M-M-M-Monster veteran
M-M-M-Monster veteran
Posts: 2382
Joined: Sat Apr 09, 2011 1:22 am
Has thanked: 170 times
Been thanked: 307 times

Heroes of Might and Magic 6

Post by finale00 »

Noesis script: http://db.tt/TZ3xVIru

Someone sent some samples today so I looked at it.

Based on the initial parsing I've done, it's a chunk-based format with non-obvious tags (well, it's the stuff that appears before the chunk size, but they seem kind of random...)

I find myself skipping 3 bytes and 9 bytes again and again, so that might say something about the structure of each chunk.

Anyways I've put together a parser for some weapons (the ones with "LivingArtifact" in the name). It doesn't load any of the other ones I got (the vertex format is not the same).

The materials are a little farther past the faces, but I probably won't get to them until the general parsing format is figured out. If someone can figure out how the chunks and chunk sizes should be parsed and manages to skip over all of the structs, that would make it a lot easier. I then just have to identify which chunks I need to read and which I can skip.

Someone should upload some models with the corresponding textures (the texture path is given in each material struct, and the struct itself is pretty simple)

Image
Last edited by finale00 on Fri Apr 13, 2012 11:33 pm, edited 1 time in total.
jcarl904
n00b
Posts: 13
Joined: Mon Apr 12, 2010 4:08 pm
Has thanked: 5 times

Re: Heroes of Might and Magic 6

Post by jcarl904 »

Here's the wolf .gobj files with it's corresponding textures. Is this what you needed finale00?
finale00
M-M-M-Monster veteran
M-M-M-Monster veteran
Posts: 2382
Joined: Sat Apr 09, 2011 1:22 am
Has thanked: 170 times
Been thanked: 307 times

Re: Heroes of Might and Magic 6

Post by finale00 »

Ya, that will help when trying to add UV's.
junk angel
veteran
Posts: 82
Joined: Thu Jan 14, 2010 4:38 pm
Has thanked: 1 time
Been thanked: 4 times

Re: Heroes of Might and Magic 6

Post by junk angel »

Will try to add some gobj and textures.
here's sarah and xana inclusive textures
http://dl.dropbox.com/u/6252145/asw/Data.zip
Antonkf
n00b
Posts: 15
Joined: Sat Feb 18, 2012 6:47 pm
Has thanked: 3 times

Re: Heroes of Might and Magic 6

Post by Antonkf »

Hey, guys! So, any luck finding UV's for Heroes6?
Demonsangel
mega-veteran
mega-veteran
Posts: 241
Joined: Fri Aug 05, 2011 9:31 pm
Location: Antwerp
Has thanked: 13 times
Been thanked: 41 times

Re: Heroes of Might and Magic 6

Post by Demonsangel »

http://dl.dropbox.com/u/61765035/HoMM6/ ... m6_gobj.py
Image

This script loads all the models finale00 posted. I'll look for UV data.
I also saw something that resembled bone and texture names so i'll have a look at that as well.
finale00
M-M-M-Monster veteran
M-M-M-Monster veteran
Posts: 2382
Joined: Sat Apr 09, 2011 1:22 am
Has thanked: 170 times
Been thanked: 307 times

Re: Heroes of Might and Magic 6

Post by finale00 »

There are a lot of odd bytes scattered throughout the format.

It's definitely chunk-based, but it's littered with seemingly random 0x35 and 0x02 everywhere.

For example, if you go to offset 32, you will read an integer, followed by 0x35.
Now if you look at the size of the file, and you subtract 37 from it, that is the integer you just read.

And not surprisingly, you are 37 bytes into the file.

Perhaps it is like open-brace vs close-brace? Everytime you read 0x35, it's the start of a chunk.

Now let's assume that's how it works.

Let's look for some tags. At offset 37, you see an short followed by an int.

Code: Select all

word tag
dword chunkSize
byte ? #indicates what kind of data follows
Now if you seek that many bytes of data, you'll find yourself just after another 0x35, followed by another chunk.

The chunk parser:

Code: Select all

def parse_file(self):
	'''Main parser method'''
	
	idstring = self.inFile.readBytes(4)
	self.inFile.readUInt()
	self.inFile.readBytes(4)
	self.inFile.seek(18, 1)
	
	while not self.inFile.checkEOF():
		tag = self.inFile.readUShort()
		size = self.inFile.readUInt()
		self.inFile.readByte()
		if tag == 0x2031:
			print("start")
		else:
			self.inFile.seek(size, 1)
			print(tag, size, self.inFile.tell())
It actually looks like there are specific patterns for that random byte I listed in the chunk struct.

If it's a 0x35, then it's followed by another chunk.
If it's 0x00, then you read a word (0x01 0x40), followed by an int, followed by data.
If it's 0x04, ...

and ya, I think it should be closer to how we should be parsing the file.
finale00
M-M-M-Monster veteran
M-M-M-Monster veteran
Posts: 2382
Joined: Sat Apr 09, 2011 1:22 am
Has thanked: 170 times
Been thanked: 307 times

Re: Heroes of Might and Magic 6

Post by finale00 »

I've updated the script at the top.

Right now the main chunk parser is very ugly. I haven't figured out a nice way to go from chunk to chunk. You see things like flag and tag2 which is kind of weird. But I think this is a better approach because right after the index buffer, you start getting into a whole lot of chunks...and hard-coding it might be difficult.

The flag should be important though...

Also, for the vertex and face sections, right after reading the section size, you also found that you had to read a byte to check if it's 16 or 32. If it's 16, then it's followed by 3 bytes. If 32, then it's followed by 4 bytes. Those bytes are the size of the data, but without the padded 0's.......o.O

Kind of interesting.

Also, there might be some sort of byte-alignment. I am not sure, but each chunk might be padded with 0x2's just to make the chunk size a multiple of 4 or 16.

Anyways here's Sarah. The UV's should be stored with the vertices, but they might have done something like ...reading a half-float x, and then let u = 1 - x, v = x. Simply trying out different offsets didn't work lol

Image
junk angel
veteran
Posts: 82
Joined: Thu Jan 14, 2010 4:38 pm
Has thanked: 1 time
Been thanked: 4 times

Re: Heroes of Might and Magic 6

Post by junk angel »

finale00 wrote:I've updated the script at the top.

Right now the main chunk parser is very ugly. I haven't figured out a nice way to go from chunk to chunk. You see things like flag and tag2 which is kind of weird. But I think this is a better approach because right after the index buffer, you start getting into a whole lot of chunks...and hard-coding it might be difficult.

The flag should be important though...

Also, for the vertex and face sections, right after reading the section size, you also found that you had to read a byte to check if it's 16 or 32. If it's 16, then it's followed by 3 bytes. If 32, then it's followed by 4 bytes. Those bytes are the size of the data, but without the padded 0's.......o.O

Kind of interesting.

Also, there might be some sort of byte-alignment. I am not sure, but each chunk might be padded with 0x2's just to make the chunk size a multiple of 4 or 16.

Anyways here's Sarah. The UV's should be stored with the vertices, but they might have done something like ...reading a half-float x, and then let u = 1 - x, v = x. Simply trying out different offsets didn't work lol

Image
I've taken a look at at the converted sarah model, and noticed the whole mesh is duplicated - even parts of the mesh which definitely aren't two sided. So it's possible you already are reading something else in the format as well.

possible the UVW's even.
Demonsangel
mega-veteran
mega-veteran
Posts: 241
Joined: Fri Aug 05, 2011 9:31 pm
Location: Antwerp
Has thanked: 13 times
Been thanked: 41 times

Re: Heroes of Might and Magic 6

Post by Demonsangel »

I'm probably doing something wrong, but I made python loop through the vertexdata calculating half-floats. moving 1 byte to the right each loop, starting at offset 6 (after XYZ).
Then made it print out the data for the first 64 vertices (skipping each offset that had a NaN in it's array).

Code: Select all

pos_off 0
1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  
1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  
1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  
1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  1.000000  
pos_off 4
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000008  0.000008  0.000015  0.000015  0.000008  0.000008  0.000015  0.000015  0.000008  0.000008  0.000014  0.000015  0.000015  0.000014  
pos_off 10
132.875000  61.218750  445.750000  31.234375  1.006836  8.867188  0.107849  78.937500  2.591797  0.027939  51.468750  1.881836  0.028427  0.009514  0.024643  0.050018  
2.388672  0.084900  51.968750  2.435547  27.609375  17.234375  2.310547  52.718750  14.242188  1.999023  11.679688  1.889648  0.036102  1.756836  23.609375  17.109375  
1.709961  0.092224  22.109375  41.468750  20.984375  1.850586  35.718750  29.234375  2.513672  56.218750  42.718750  3.451172  103.937500  68.937500  6.121094  203.875000  
153.875000  10.554688  531.500000  199.875000  177.875000  19.109375  471.750000  172.875000  229.875000  29.859375  487.750000  253.875000  244.875000  36.218750  44.718750  395.750000  
pos_off 13
0.000007  0.000007  0.000008  0.000007  0.000007  0.000007  0.000007  0.000007  0.000007  0.000006  0.000006  0.000006  0.000006  0.000006  0.000006  0.000006  
0.000006  0.000006  0.000006  0.000006  0.000006  0.000006  0.000006  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  
0.000005  0.000006  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000005  0.000004  0.000004  
0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  
pos_off 14
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 15
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 16
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 21
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
pos_off 22
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 23
-0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  
-0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  
-0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  
-0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  -0.000000  
pos_off 24
1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  
1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  
1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  
1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  1.875000  
pos_off 25
0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  
0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  
0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  
0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  0.000004  
pos_off 26
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 27
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 28
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 29
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 30
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 31
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 32
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 33
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 34
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 35
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 36
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 37
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 41
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  0.000015  
pos_off 42
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 43
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 44
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 45
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 46
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 47
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 48
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 49
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 50
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 51
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 52
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 53
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 54
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
pos_off 55
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
I don't really see anything that could resemble UV data, unless I'm not supposed to skip lists with NaN in it.
Demonsangel
mega-veteran
mega-veteran
Posts: 241
Joined: Fri Aug 05, 2011 9:31 pm
Location: Antwerp
Has thanked: 13 times
Been thanked: 41 times

Re: Heroes of Might and Magic 6

Post by Demonsangel »

Tried creating a 010 template for the format but it made my head explode.

Chunks start with 0x35 and end with 0x02.
After the 0x35 come 2 bytes which I called "flag". They seem to increase in numbers for example: 1010->2010->3010 and elsewhere it's 1010->1020(->2020->3020->4020)->1030 etc.
So a lot of chunks in chunks and sometimes you have chunks 0x3102 which aren't preceded by 0x35 but they do end with 0x02. These are the most annoying, I can't put a fixed format on them and started naming them x3102, x3102_2010 etc.
You do not have the required permissions to view the files attached to this post.
Last edited by Demonsangel on Wed Mar 28, 2012 12:24 am, edited 1 time in total.
finale00
M-M-M-Monster veteran
M-M-M-Monster veteran
Posts: 2382
Joined: Sat Apr 09, 2011 1:22 am
Has thanked: 170 times
Been thanked: 307 times

Re: Heroes of Might and Magic 6

Post by finale00 »

I think the 2-byte "flag" is just the chunk-type. The Ogre 3D and Lightwave formats both use those kinds of numbers for their chunks where the high-order bits represent the general type of chunk (eg: mesh, material, etc) whereas the low-order bits represent a subtype within that chunk type (eg: vertices, normals, specific material attributes, etc)

I was thinking along the same lines where 0x35 is the start of a chunk and 0x02 is the end, but the very first chunk size was throwing me off.

It is probably just one of those parenthesis-matching things

Regarding 0x31 0x02, it might be saying like, I treat it like any other chunk. It doesn't seem to be that much different from reading an 0x35.
Demonsangel
mega-veteran
mega-veteran
Posts: 241
Joined: Fri Aug 05, 2011 9:31 pm
Location: Antwerp
Has thanked: 13 times
Been thanked: 41 times

Re: Heroes of Might and Magic 6

Post by Demonsangel »

Can you find anything that even resembles UV data?
There's no extra chunks that could contain these.
Karpati
ultra-veteran
ultra-veteran
Posts: 467
Joined: Thu Dec 07, 2006 11:25 pm
Has thanked: 9 times
Been thanked: 95 times

Re: Heroes of Might and Magic 6

Post by Karpati »

Holly s**t ! I did find the missing UV datas....
Karpati
ultra-veteran
ultra-veteran
Posts: 467
Joined: Thu Dec 07, 2006 11:25 pm
Has thanked: 9 times
Been thanked: 95 times

Re: Heroes of Might and Magic 6

Post by Karpati »

X,Y,Z: HalfFloat
3*2 bytes: Normals (?)
4 bytes: Unknown
U: (2 bytes Word) / 32768
V: 1-(2 bytes Word) / 32768
Post Reply