Halo 3 [Beta] Mod Discussion
- LuxuriousMeat
- Posts: 824
- Joined: Thu Nov 03, 2005 6:43 pm
- Location: zzzzzzzzzzzzzzzz
- Contact:
Yea the shared map is a bit weird.xGhostlySnowx wrote:nice job prey.. is there any chance you could find a way to open the shared.map? it gives a memory error... but nice to see whats going on in the game before it ships...
Heres what i said over at xbl-hackersneodos wrote:How are you going to launch the halo 3 beta once the beta is over?
Just wondering... or you are just getting advanced on modding halo 3 mapfiles before the game comes out?
Chances are the .map format is not going to change all that much now, so yea you could see it as our 'headstart'.Prey wrote:Will we be able to playtest any mods we make?
No, remember that generic container file? Well thats protected by a signed hash that no-ones figured out yet.. so whilst we can extract and edit these maps, theres no way we can inject them back in.. yet. Although i could be wrong as someone was talking about burning the file to a CD and it working? It'd be great if someone could verify that.
Halo 2 Prophet - Skin with ease with the simple 3D point and click interface.
Halo 3 Research Thread - Contribute to the research into Halo 3.
Halo 3 Research Thread - Contribute to the research into Halo 3.
- LuxuriousMeat
- Posts: 824
- Joined: Thu Nov 03, 2005 6:43 pm
- Location: zzzzzzzzzzzzzzzz
- Contact:
- LuxuriousMeat
- Posts: 824
- Joined: Thu Nov 03, 2005 6:43 pm
- Location: zzzzzzzzzzzzzzzz
- Contact:
Lux read THISLuxuriousMeat wrote:Hmm... I'm doing that but it isn't working...
On a lighter note, ive got dependencies loading

Halo 2 Prophet - Skin with ease with the simple 3D point and click interface.
Halo 3 Research Thread - Contribute to the research into Halo 3.
Halo 3 Research Thread - Contribute to the research into Halo 3.
TagTypes Index Nothing of real interest here
This consists of 16-byte blocks, that follow this structure:
0 = 4 chars (e.g. bipd)
4 = null
8 = null
12 = Number
TagInfo
This consists of 8-byte blocks, that follow this structure:
0 - int16 - Index of the tags Type
2 - int16 - The tags Ident
4 - int32 - The tags MetaOffset (-PrimaryMagic)
The Meta
Annoyingly it is unordered, simply put 'meta1' does not go with 'tagInfo1'. In order to find the size of a tags meta, you must find the offset of the next meta, and then subtract from it the offset of the current tags meta.
Dependencies
These are found in the meta and now follow the format of:
0 = 4 chars (e.g. bipd)
4 = int32 - 0000 0000
8 = int32 - 0000 0000
12 = int16 - ident
LoneIDs
Meh, ill look later..
Reflexives
Poke's been looking into these, hes found that subtracting the PrimaryMagic keeps taking him out of the tags meta.. which leads him to believe there may be another magic just for the reflexives (ugh)
Strings
These consists of 4-byte blocks (I think), that follow this structure (I think):
0 = int16 - 0000
4 = int16 - strIndex
Manually Scanning
As plugins are not yet present, the app below will scan for deps and strings.. which may mean it is not all entirely accurate. Deps will be as their structure is quite unique, although the structure of the strings is rather more 'general' and because of this, you may see some random crap come up. But hey thats all part of the fun!
The Application

-> http://www.filesend.net/download.php?f= ... ea10699f98
I am too kind.
This consists of 16-byte blocks, that follow this structure:
0 = 4 chars (e.g. bipd)
4 = null
8 = null
12 = Number
TagInfo
This consists of 8-byte blocks, that follow this structure:
0 - int16 - Index of the tags Type
2 - int16 - The tags Ident
4 - int32 - The tags MetaOffset (-PrimaryMagic)
The Meta
Annoyingly it is unordered, simply put 'meta1' does not go with 'tagInfo1'. In order to find the size of a tags meta, you must find the offset of the next meta, and then subtract from it the offset of the current tags meta.
Dependencies
These are found in the meta and now follow the format of:
0 = 4 chars (e.g. bipd)
4 = int32 - 0000 0000
8 = int32 - 0000 0000
12 = int16 - ident
LoneIDs
Meh, ill look later..
Reflexives
Poke's been looking into these, hes found that subtracting the PrimaryMagic keeps taking him out of the tags meta.. which leads him to believe there may be another magic just for the reflexives (ugh)
Strings
These consists of 4-byte blocks (I think), that follow this structure (I think):
0 = int16 - 0000
4 = int16 - strIndex
Manually Scanning
As plugins are not yet present, the app below will scan for deps and strings.. which may mean it is not all entirely accurate. Deps will be as their structure is quite unique, although the structure of the strings is rather more 'general' and because of this, you may see some random crap come up. But hey thats all part of the fun!

The Application

-> http://www.filesend.net/download.php?f= ... ea10699f98
I am too kind.
Halo 2 Prophet - Skin with ease with the simple 3D point and click interface.
Halo 3 Research Thread - Contribute to the research into Halo 3.
Halo 3 Research Thread - Contribute to the research into Halo 3.
Well like i said the shared map is weird.. the headers all scrambled and i cant find an index. So for now until more research is done on that map, the app wont be able to open it properly. Dont worry though, Ill make sure to put a nicer error message in place...Tural wrote:Hawt, Prey.
Doesn't open shared.map =x
Halo 2 Prophet - Skin with ease with the simple 3D point and click interface.
Halo 3 Research Thread - Contribute to the research into Halo 3.
Halo 3 Research Thread - Contribute to the research into Halo 3.
- LuxuriousMeat
- Posts: 824
- Joined: Thu Nov 03, 2005 6:43 pm
- Location: zzzzzzzzzzzzzzzz
- Contact:
I found a second way of determining the primary magic
Yealds the same result as the way poke found
Code: Select all
br.BaseStream.Position = tag_info_offset + 4;
primary_magic = br.ReadInt32() - map.map_header.meta_start;
Code: Select all
primary_magic = map.map_header.memory_modifier - map.map_header.index_header_offset;
1. They don't make the shared database maps like they used to, because its now more about the fact they don't rely on having a HDD, thus they can just stream it all into memory (which is why it takes so much longer to load a cache, it has to load everything).
2. The cache's hash isn't like halo2's...
3. Theres nothing hard about finding a address's offset in a file. It should actually be easier for you guys to figure this stuff out due to the new resource designs, but I may be wrong...
2. The cache's hash isn't like halo2's...
3. Theres nothing hard about finding a address's offset in a file. It should actually be easier for you guys to figure this stuff out due to the new resource designs, but I may be wrong...
Yea thats the same way the secondaryMagic was determined in Halo2, but seeing as we now need this magic beforehand in Halo3 to actually calculate the tag_info_offset, it renders your method quite useless.shade45 wrote:I found a second way of determining the primary magic
Yealds the same result as the way poke foundCode: Select all
br.BaseStream.Position = tag_info_offset + 4; primary_magic = br.ReadInt32() - map.map_header.meta_start;
Code: Select all
primary_magic = map.map_header.memory_modifier - map.map_header.index_header_offset;
What people really need to research now is how idents, reflexives and strings work in the meta. What i think so far:
Idents
0 = 4 chars (e.g. bipd)
4 = int32 - 0000 0000
8 = int32 - 0000 0000
12 = int16 - ident
Reflexives
0 - int32 - chunkcount
4 - int32 - translation (-PrimaryMagic)
Strings
0 = int16 - 0000
4 = int16 - strIndex
It'd be great if anyone else could contribute any findings they have on these subjects >_>
Halo 2 Prophet - Skin with ease with the simple 3D point and click interface.
Halo 3 Research Thread - Contribute to the research into Halo 3.
Halo 3 Research Thread - Contribute to the research into Halo 3.
-
- Posts: 565
- Joined: Wed Nov 17, 2004 8:41 am
- Location: Vancouver, BC This is where people put their modding team because they feel important.
- Contact:
![]() |
![]() |
Mike, not much has changed except a few pieces of data being compacted into a single variable (Although, expect 64bit floats), anyway the new virtual base for all the meta/all the non raw is:
0xA6000000
Which means the "Primary Magic"(Primary is redundant because I've only found one magic type) Can be calculated as such: Constant - MapHeader->VirtualSegment.
Also something I noticed was the map is organized almost backwards.
Cool application Anthony, maybe it'll be as good as mine soon
Anyway, screw looking at the mapfiles, I'm off to play Halo 3
0xA6000000
Which means the "Primary Magic"(Primary is redundant because I've only found one magic type) Can be calculated as such: Constant - MapHeader->VirtualSegment.
Also something I noticed was the map is organized almost backwards.
Cool application Anthony, maybe it'll be as good as mine soon

Anyway, screw looking at the mapfiles, I'm off to play Halo 3

Awaiting connection...