Huge Community Tag Project - Please read...
Huge Community Tag Project - Please read...
Okay. Something's been on everybody's wish lists and I think it's time to make it happen; a Halo/HaloCE tag converter. This would mean the ability to edit Halo with guerilla and import tags from Halo into HaloCE. Basically, it would mean limitless power.
So, here is what my research has found as far as the differences between Halo and HaloCE tags:
-There is a header that spans bytes 0x0-0x3F that is in every HaloCE tag and is nonexistant in normal Halo tags. This tag is very easy to reproduce.
-Halo tags are in a reverse-endian format that resets every 4 bytes. For example:
If a chunk from a HaloCE tag looked like this:
0F 13 00 04 | 66 54 A0 2B | 88 90 0A FF | FF FF 00 00
It would look like this in a Halo tag:
04 00 13 0F | 2B A0 54 66 | FF 0A 90 88 | 00 00 FF FF
So, that oughta' get the ball rolling. There are various other observations I have made as far as the difference between Halo and HaloCE tags, but I don't know enough about them to post just yet.
Post your observations right now and we will be able to successfully come up with enough data and find the pattern that seperates these two tag formats. Then, ultimate Halo power will be in our hands!
So, here is what my research has found as far as the differences between Halo and HaloCE tags:
-There is a header that spans bytes 0x0-0x3F that is in every HaloCE tag and is nonexistant in normal Halo tags. This tag is very easy to reproduce.
-Halo tags are in a reverse-endian format that resets every 4 bytes. For example:
If a chunk from a HaloCE tag looked like this:
0F 13 00 04 | 66 54 A0 2B | 88 90 0A FF | FF FF 00 00
It would look like this in a Halo tag:
04 00 13 0F | 2B A0 54 66 | FF 0A 90 88 | 00 00 FF FF
So, that oughta' get the ball rolling. There are various other observations I have made as far as the difference between Halo and HaloCE tags, but I don't know enough about them to post just yet.
Post your observations right now and we will be able to successfully come up with enough data and find the pattern that seperates these two tag formats. Then, ultimate Halo power will be in our hands!
-
- Posts: 203
- Joined: Mon May 03, 2004 8:29 pm
- Location: Where am I?
-
- Posts: 203
- Joined: Mon May 03, 2004 8:29 pm
- Location: Where am I?
Listen, aside from ending world hunger, a tag converter could give us endless templates to use in our HaloCE maps. It would take the guesswork out of many things, allowing us to see how some of the better AI is written, how some of the scripts from SP are written, and allow us to put anything from SP into our maps.
Now wouldn't that be cool; have a platoon of respawning grunts running around using all of the various AI modules we couldn't use before. I, for one, am sick of having the crummy AI I build stand around my levels.
Of course, it would work the other way, also. (HaloCE -> Halo). Guerilla is, in my opinion, a program that gives you full control of every aspect of Halo and provides limitless possibilties for modders like you and I. If we could import the tags created with Guerilla into SP Halo, we could create an entire new story mode, one with new levels, skies, sounds, characters, weapons, vehicles... and that would be WAY cool!
So, come on, guys. This is no tougher than any other task. In fact, the similarities between the two tag formats are so great, this may be the most rewarding task yet. It could take me, alone, weeks or even months to find the missing key that seperates these two formats. But, if we all work together, the answer may become clear faster than I ever thought possible. And then modding Halo would no longer be a science of guesswork. No, modding Halo would be an ART!
Now wouldn't that be cool; have a platoon of respawning grunts running around using all of the various AI modules we couldn't use before. I, for one, am sick of having the crummy AI I build stand around my levels.
Of course, it would work the other way, also. (HaloCE -> Halo). Guerilla is, in my opinion, a program that gives you full control of every aspect of Halo and provides limitless possibilties for modders like you and I. If we could import the tags created with Guerilla into SP Halo, we could create an entire new story mode, one with new levels, skies, sounds, characters, weapons, vehicles... and that would be WAY cool!
So, come on, guys. This is no tougher than any other task. In fact, the similarities between the two tag formats are so great, this may be the most rewarding task yet. It could take me, alone, weeks or even months to find the missing key that seperates these two formats. But, if we all work together, the answer may become clear faster than I ever thought possible. And then modding Halo would no longer be a science of guesswork. No, modding Halo would be an ART!
Followers: 1
YAY!
Ok...
I've done some more studies between the two types of tags and come up with some more results. All of the testing was done between assault rifle.item_collection and assault rifle.itmc from Danger Canyon.
When converting a HaloCE tag to a normal Halo tag, you basically follow these steps:
1. Get rid of the header from offsets 0x0 to 0x3F
2. Reverse the order of every 4 bytes (or quadrabytes as I call them).
3. Convert all dependency pointers (see below for instructions)
4. Convert all reflexive pointers (process not known)
5. Something else?
As you can see, I basically know what needs to be done to convert HaloCE tags to Halo tags. Now it is just a matter of doing it.
I have, however, figured out how the dependency pointers in HaloCE tags work. It goes a little somethin' like this:
assault rifle.item_collection 0xC8-0x113:

assault rifle.itmc.meta 0x88-0xAF:

As you can see, the HaloCE dependency pointer is much more elaborate. The Halo dependency pointer uses one quadrabyte at offset 0x8C that references back to an earlier section of the map file. The HaloCE dependency pointer has that section nulled out as FF FF FF FF, but uses a reference to a file 0x20 bytes below it at offset 0xF0. If you translate those 0x23 bytes into ASCII, you get :
weapons\assault rifle\assault rifle
The quadrabyte just before FF FF FF FF at offset 0xC8 tells the computer how many bytes the link to the file will be (in this case, 0x23 bytes long).
So, in order to convert the HaloCE dependency tag into regular Halo format you:
1. Change the quadrabyte just before the nulled pointer to 00 00 00 00 (Here it's at offset 0xC8).
2. 0x20 bytes down, get rid of the entire string that links to another tag file (here it's at offset 0xF0-0x113)
3. Change the nulled pointer to something valid. (This may not be necessary if HMT 3.5 can do this automatically when you compile a map)
YAY!
Ok...
I've done some more studies between the two types of tags and come up with some more results. All of the testing was done between assault rifle.item_collection and assault rifle.itmc from Danger Canyon.
When converting a HaloCE tag to a normal Halo tag, you basically follow these steps:
1. Get rid of the header from offsets 0x0 to 0x3F
2. Reverse the order of every 4 bytes (or quadrabytes as I call them).
3. Convert all dependency pointers (see below for instructions)
4. Convert all reflexive pointers (process not known)
5. Something else?
As you can see, I basically know what needs to be done to convert HaloCE tags to Halo tags. Now it is just a matter of doing it.
I have, however, figured out how the dependency pointers in HaloCE tags work. It goes a little somethin' like this:
assault rifle.item_collection 0xC8-0x113:
assault rifle.itmc.meta 0x88-0xAF:
As you can see, the HaloCE dependency pointer is much more elaborate. The Halo dependency pointer uses one quadrabyte at offset 0x8C that references back to an earlier section of the map file. The HaloCE dependency pointer has that section nulled out as FF FF FF FF, but uses a reference to a file 0x20 bytes below it at offset 0xF0. If you translate those 0x23 bytes into ASCII, you get :
weapons\assault rifle\assault rifle
The quadrabyte just before FF FF FF FF at offset 0xC8 tells the computer how many bytes the link to the file will be (in this case, 0x23 bytes long).
So, in order to convert the HaloCE dependency tag into regular Halo format you:
1. Change the quadrabyte just before the nulled pointer to 00 00 00 00 (Here it's at offset 0xC8).
2. 0x20 bytes down, get rid of the entire string that links to another tag file (here it's at offset 0xF0-0x113)
3. Change the nulled pointer to something valid. (This may not be necessary if HMT 3.5 can do this automatically when you compile a map)
YIPEE! MORE FINDINGS!
P.S. Sorry if those images aren't working.
Well, I lied. This really isn't a finding. It's just I can't figure out the format change of these reflexive pointers. For instance, in Halo if you want to figure out what a reflexive is pointing to, you do a reverse endian and then subtract the magic. In HaloCE, I have no freekin' clue. Here is an example of what I'm talking about:
In assault rifle.itmc.meta one of the reflexives is 88 30 78 40 (40 79 30 88 if you reverse it) which points to something in the map file. The equivelent reflexive in assault rifle.item_collection is 88 CA 19 00, which may point to something if you subtract a special HaloCE magic. Another example of this is in the same two files where the Halo tag has 46 21 46 40 (40 46 21 46 if you reverse it). The HaloCE equivilent is 98 26 1A 00.
It would be great if others looked into to this with me to find some kind of pattern.
P.S. Sorry if those images aren't working.
Well, I lied. This really isn't a finding. It's just I can't figure out the format change of these reflexive pointers. For instance, in Halo if you want to figure out what a reflexive is pointing to, you do a reverse endian and then subtract the magic. In HaloCE, I have no freekin' clue. Here is an example of what I'm talking about:
In assault rifle.itmc.meta one of the reflexives is 88 30 78 40 (40 79 30 88 if you reverse it) which points to something in the map file. The equivelent reflexive in assault rifle.item_collection is 88 CA 19 00, which may point to something if you subtract a special HaloCE magic. Another example of this is in the same two files where the Halo tag has 46 21 46 40 (40 46 21 46 if you reverse it). The HaloCE equivilent is 98 26 1A 00.
It would be great if others looked into to this with me to find some kind of pattern.
-
- Posts: 86
- Joined: Sat May 22, 2004 9:06 pm
if i knew anything about hex at all i'd help dude! i'm on your side in every possible way, and i hope this gets done!
if we can find the complete process for tag conversion, we could make a program to convert to/from haloce/halopc, edit tags, create new ones, batch extract halo ce maps, and heaps more
if we can find the complete process for tag conversion, we could make a program to convert to/from haloce/halopc, edit tags, create new ones, batch extract halo ce maps, and heaps more

iSk`Bubba
-
- Posts: 732
- Joined: Sun Jan 11, 2004 3:34 pm
-
- Posts: 32
- Joined: Mon Feb 16, 2004 11:28 am
-
- Posts: 958
- Joined: Thu Jan 29, 2004 1:39 pm
![]() |
Well, I've been modding since way before half of these people here probably joined Halomods, so I'm willing to give it a shot! I'm not all that experienced with hex though, but, like I said, I still mod and use the HEK A LOT. I would absolutely love this to be completed.
You've got 3 supporters now, buddy. If you have AIM, please let me know.
You've got 3 supporters now, buddy. If you have AIM, please let me know.

-
- Posts: 958
- Joined: Thu Jan 29, 2004 1:39 pm
![]() |
Sorry for the double post... I've got a few things here that I need to find out in order to understand this. I haven't touched a hex editor in months. XP
Ok, where do you get that 0x20 bytes down from the nulled out part of the .itemcollection file? If I'm correct, 0x20 is 35, and 35 bytes starting from the first byte of 00 after the last of the FF nulls ends up a few bytes before the dependency for the assualt rifle (the 0x23 bytes long one.). I see no 0x20 in that whole thing... Can you please explain how you got this?
Ok, where do you get that 0x20 bytes down from the nulled out part of the .itemcollection file? If I'm correct, 0x20 is 35, and 35 bytes starting from the first byte of 00 after the last of the FF nulls ends up a few bytes before the dependency for the assualt rifle (the 0x23 bytes long one.). I see no 0x20 in that whole thing... Can you please explain how you got this?
Even though ive been around halo modding since the hex days, I cant really help you much in that category. But I can throw in my two cents.
Something important to remember here is that in Halo PC the maps all reference the same files for bitmaps, sound, etc.
While on the other hand CE maps have everything inside of them and thus only reference areas inside themselves.
Something important to remember here is that in Halo PC the maps all reference the same files for bitmaps, sound, etc.
While on the other hand CE maps have everything inside of them and thus only reference areas inside themselves.
http://icetig.com
Go there for my halo creations and much more!
Go there for my halo creations and much more!
Not to flame but...
*cough* copy cats *cough*
Scripts are integrated into the scenario tag. They are in a COMPILED form, ie you can't edit it unless you have the code to the compiler and reverse its code to uncompile it. My new HMT will convert tags into source tags for editing in the HEK, and alot more. Its not gonna be some lame [censored] that does one or 2 things. I already have it planned out and some of it implemented. Some tags (ie bitmaps and possibably sounds) are in a different format, so they wouldn't work by doing a direct port. You would have to add them to the bitmaps or sound map file. BTW, my new HMT will also allow you to do basiclly what Guerilla allows you to do. And no more shitty XML plugins, full DLLs for complete control
*cough* copy cats *cough*
Scripts are integrated into the scenario tag. They are in a COMPILED form, ie you can't edit it unless you have the code to the compiler and reverse its code to uncompile it. My new HMT will convert tags into source tags for editing in the HEK, and alot more. Its not gonna be some lame [censored] that does one or 2 things. I already have it planned out and some of it implemented. Some tags (ie bitmaps and possibably sounds) are in a different format, so they wouldn't work by doing a direct port. You would have to add them to the bitmaps or sound map file. BTW, my new HMT will also allow you to do basiclly what Guerilla allows you to do. And no more shitty XML plugins, full DLLs for complete control
-
- Posts: 732
- Joined: Sun Jan 11, 2004 3:34 pm
-
- Posts: 732
- Joined: Sun Jan 11, 2004 3:34 pm