Thanks for the updates, Mike.
I figured out the formats for the TransitionLines, PlanningLevels, RoomList and the DoorList last night and have them parsed.
As you said, the Planning Levels are probably just a room listing by "floors". I guess that's used when interpreting the mission scripts to determine which "level" to place tangos with "room over room" situations.
Transition lines are, I think, transition from one "thing" to another. They are just two points. I don't know what the "thing" is, yet. Loading them into Max would at least show where they are. Their proximity to a door or a stair case would probably show what they are for. Perhaps transitions between rooms and/or levels.
Their storage is simple. For each entry you have:
integer - length of transition line name
string - transition line name (i.e. shermantransition101_1.39)
float x 3 - point 1
float x 3 - point 2
I got the storage for the Lights parsed but I don't know what all the values are for, yet. I've been looking at the light settings in GMax (same as Max 4) to see what settings there are. I think they will be about the same information. They each seem to start with a 6. I think this might a light type. Probably an "omni" light (as opposed to a spot or ambient). The rest is probably color, intensity, falloff, etc.
Some of the objects in the object list have some XML data followed by binary data. I think the ones with XML data can be interacted with by the player. The others don't appear to have any of the XML info and are probably "static" objects. How that's organized I'm still not sure, yet. But I'm working on that, now. Since you said they use the geometry data in the geometrylist. The binary data may be placement, rotation, scaling, etc.
I'm wondering how the "helicopter" in the last mission of Island Thunder (the one with the watch towers on the periphery and the old mansion in the middle) fits in with that. That object is in the object data outside the maps. I think it has two models, too. One whole and one blown up.
The RoomList is an odd thing. Each room listed appears to contain one or more sections, each with a different name. In each "section", it appears to have a 3x3 matrix embedded in it as well as three vertex/locations, some long integers and a couple of character values. I don't know the significance of those, yet.
What makes me think the 9 float values are a matrix is that when you look at the values on most of them, they appear to be a 3x3 identity matrix.
(i.e.
1,0,0
0,1,0
0,0,1 )
Two values might be a line or bounding box. I don't know what three would be for. Three vertices together usually mean a triangle. But I can't fathom what a triangle would be useful for in this. I'm not even sure what these entries are for, really.
The storage format for that after the count is:
integer - unknown use at this time
integer - version string length
string - "Version"
integer - version
room loop using room count
integer - room name length
string - room name (length of integer above)
char - unknown use at this time
integer - section count for this room
section loop using section count
integer - section name length
string - section name (length of integer above - i.e. shermanlevel101_1.0a)
char - unknown use at this time
integer - usually 1
float 3x3 matrix:
usually 1.00,0.00,0.00;0.00,1.00,0.00;0.00,0.00,1.00
sometimes 0.00,-1.00,0.00;1.00,0.00,0.00;0.00,0.00,1.00
float x 3: a point or vertex
float x 3: a point or vertex
float x 3: a point or vertex
integer - unknown use, usually 1
float - unknown use, usually 1.000
char - unknown use, usually 0
end section loop
integer - unknown use usually 1
float - usually 1.00
float - usually 0.00
float - usually 0.00
float - usually 0.00
end room loop
Here's a sample section of a room with the trailer:
Section Name: shermanlevel101_1.0h
Int value.: 1
3x3 matrix?
0.000000,-1.000000,0.000000
1.000000,0.000000,0.000000
0.000000,0.000000,1.000000
Vertex 1: -22.081812,-41.610008,1.540660
Vertex 2: -1.379159,-3.526352,0.000000
Vertex 3: 1.379159,3.526352,0.400000
Int value.: 1
Float value: 1.000000
Char value: 0
Room Trailer?
Int value.: 1
Float value: 1.000000
Float value: 0.000000
Float value: 0.000000
Float value: 0.000000
I was going to work on the PortalList next. You've made that easier. Thanks.
I had suspected that the OccluderList did something like you pointed out by the name. But it's nice to see that you've already figured it out. At least it's fairly simple. The newer versions of the game engine probably use those whereas the original version did not. They probably did that to try to improve performance for the patches. I can see why they didn't go back and add them to all the maps. That probably would have been lot of work. They probably only did it in places where it made a big difference.
When do you start back to school? I would have thought it would be this week.
Cheers,
Bruce