Content: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Background: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Pattern: Blank Waves Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Welcome to Xbox Chaos: Modding Evolved

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

Lord Zedd

.MAP
[Wumbo] Tag Duplication

27 posts in this topic

Adding Tags:

Requirements: MapExpand (Blamite Edition)
Part A: Prep
Before you can do anything anything, you need to make some room in the map for the new tag's meta.
Copy mapexpand to the folder with your map and run it from the command prompt as follows:

mapexpand forge_halo.map 1

(You can substitute for any map (forge world here) or more blank meta pages (1 here), but you can always add more pages later.)
tagdupe1.jpg

Once mapexpand does its thing, you'll want to make note of the two offsets it gives you (highlighted)
Blue is the memory offset which we will be plugging into the tag list when we add the tag, and Red is the file offset where the blank meta actually starts, which we will need soon as well.
Now we need to actually add the tag to the tag list so we can start filling meta in.

**Be aware that once you use mapexpand on a map, the header is changed enough to where a standard xex with only RSA bypassed will not load your map anymore. Patch your xex with any of the patches from the following download and it should work: http://www.xboxchaos.com/files/file/60-blue-flames-xex-ppf-patches/ **

Part B: Adding
Pop open your expanded map in a hex editor and do a hex search for "00726D63726D2020" to jump right to the end of the map's tag list.
tagdupe2.jpg

Now click right before the selection and add 8 bytes right there. This will give you a blank entry to fill in.
tagdupe3.jpg


tagdupe4.jpg

Those 8 bytes you added will break up as follows:
int16 Class Index
int16 Datum Index Salt
int32 Memory Address (File Offset + Map Magic)

So let's start with the first 2 bytes, or the Class Index. Refer to the following list to decide what value you are putting in:


00 00 - .rmc
00 01 - .rmp
00 02 - $#!+
00 03 - *cen
00 04 - *eap
00 05 - *ehi
00 06 - *fsc
00 07 - *igh
00 08 - *ipd
00 09 - *qip
00 0A - *rea
00 0B - *sce
00 0C - /**/
00 0D - <fx>
00 0E - BooM
00 0F - LMgS
00 10 - Lbsp
00 11 - ZZAP
00 12 - achi
00 13 - adlg
00 14 - ai**
00 15 - aigl
00 16 - airs
00 17 - ant!
00 18 - atgf
00 19 - avat
00 1A - bbcr
00 1B - bdpd
00 1C - beam
00 1D - bink
00 1E - bipd
00 1F - bitm
00 20 - bloc
00 21 - bsdt
00 22 - cddf
00 23 - cfxs
00 24 - chad
00 25 - char
00 26 - chdg
00 27 - chdt
00 28 - chgd
00 29 - chmt
00 2A - cin*
00 2B - cine
00 2C - cisc
00 2D - citr
00 2E - clu*
00 2F - clwd
00 30 - cmoe
00 31 - cntl
00 32 - coll
00 33 - colo
00 34 - comg
00 35 - coms
00 36 - cook
00 37 - coop
00 38 - cpem
00 39 - cpgd
00 3A - cptl
00 3B - crea
00 3C - csdt
00 3D - ctrl
00 3E - cub*
00 3F - cusc
00 40 - cust
00 41 - dc*s
00 42 - dctr
00 43 - dec*
00 44 - decs
00 45 - devi
00 46 - devo
00 47 - dgr*
00 48 - dmp*
00 49 - dobc
00 4A - draw
00 4B - drdf
00 4C - ebhd
00 4D - effe
00 4E - effg
00 4F - efsc
00 50 - eqip
00 51 - flck
00 52 - fldy
00 53 - fogg
00 54 - foot
00 55 - form
00 56 - frms
00 57 - fxtt
00 58 - gcrg
00 59 - gegl
00 5A - gint
00 5B - gldf
00 5C - glps
00 5D - glvs
00 5E - gmeg
00 5F - goof
00 60 - gpix
00 61 - gptd
00 62 - grfr
00 63 - hcfd
00 64 - hlmt
00 65 - hlsl
00 66 - hsc*
00 67 - igpd
00 68 - iimz
00 69 - impo
00 6A - ingd
00 6B - item
00 6C - jmad
00 6D - jmrq
00 6E - jpt!
00 6F - ldsc
00 70 - lens
00 71 - lgtd
00 72 - ligh
00 73 - locs
00 74 - lsnd
00 75 - lswd
00 76 - ltvl
00 77 - mach
00 78 - matg
00 79 - mdlg
00 7A - metr
00 7B - mffn
00 7C - mgls
00 7D - mlib
00 7E - mode
00 7F - motl
00 80 - mply
00 81 - msit
00 82 - mulg
00 83 - muxg
00 84 - nclt
00 85 - obje
00 86 - pach
00 87 - pcec
00 88 - pecp
00 89 - perf
00 8A - pfmc
00 8B - pfpt
00 8C - pggd
00 8D - phmo
00 8E - pixl
00 8F - play
00 90 - pmcg
00 91 - pmdf
00 92 - pmov
00 93 - pphy
00 94 - prf*
00 95 - proj
00 96 - prt3
00 97 - rain
00 98 - rasg
00 99 - rm
00 9A - rmb
00 9B - rmbl
00 9C - rmcs
00 9D - rmct
00 9E - rmd
00 9F - rmdf
00 A0 - rmfl
00 A1 - rmfs
00 A2 - rmfu
00 A3 - rmgl
00 A4 - rmhg
00 A5 - rmlv
00 A6 - rmmm
00 A7 - rmmx
00 A8 - rmop
00 A9 - rmsh
00 AA - rmsk
00 AB - rmss
00 AC - rmt2
00 AD - rmtr
00 AE - rmw
00 AF - rwrd
00 B0 - sFdT
00 B1 - sLdT
00 B2 - sadt
00 B3 - sbsp
00 B4 - scen
00 B5 - scmb
00 B6 - scnr
00 B7 - sddt
00 B8 - sdzg
00 B9 - sefc
00 BA - sfx+
00 BB - sgp!
00 BC - shit
00 BD - sidt
00 BE - siin
00 BF - sily
00 C0 - sirp
00 C1 - sky*
00 C2 - skya
00 C3 - smap
00 C4 - smdt
00 C5 - sncl
00 C6 - snd!
00 C7 - snde
00 C8 - snmx
00 C9 - spk!
00 CA - sqtm
00 CB - srad
00 CC - ssao
00 CD - ssce
00 CE - sslt
00 CF - stli
00 D0 - stse
00 D1 - styl
00 D2 - term
00 D3 - trak
00 D4 - trg*
00 D5 - ttag
00 D6 - udlg
00 D7 - ugh!
00 D8 - uise
00 D9 - unic
00 DA - unit
00 DB - uttt
00 DC - vehi
00 DD - vmdx
00 DE - vtgl
00 DF - vtsh
00 E0 - wadt
00 E1 - wave
00 E2 - wdst
00 E3 - weap
00 E4 - wetn
00 E5 - wezr
00 E6 - wgtz
00 E7 - whip
00 E8 - wigl
00 E9 - wind
00 EA - wpdp
00 EB - wpdt
00 EC - wrdt
00 ED - wsdt
00 EE - wxcg
00 EF - zone

 

Edit:

 

 

Just a heads up to anyone trying to duplicate on Condemned, Highlands, or Installation 04, a new "patg" class was introduced on those maps, which throws everything in the class index off by 0x01 after where it was inserted. Here's the fixed Class Index for the said maps:

00 00 - .rmc
00 01 - .rmp
00 02 - $#!+
00 03 - *cen
00 04 - *eap
00 05 - *ehi
00 06 - *fsc
00 07 - *igh
00 08 - *ipd
00 09 - *qip
00 0A - *rea
00 0B - *sce
00 0C - /**/
00 0D - <fx>
00 0E - BooM
00 0F - LMgS
00 10 - Lbsp
00 11 - ZZAP
00 12 - achi
00 13 - adlg
00 14 - ai**
00 15 - aigl
00 16 - airs
00 17 - ant!
00 18 - atgf
00 19 - avat
00 1A - bbcr
00 1B - bdpd
00 1C - beam
00 1D - bink
00 1E - bipd
00 1F - bitm
00 20 - bloc
00 21 - bsdt
00 22 - cddf
00 23 - cfxs
00 24 - chad
00 25 - char
00 26 - chdg
00 27 - chdt
00 28 - chgd
00 29 - chmt
00 2A - cin*
00 2B - cine
00 2C - cisc
00 2D - citr
00 2E - clu*
00 2F - clwd
00 30 - cmoe
00 31 - cntl
00 32 - coll
00 33 - colo
00 34 - comg
00 35 - coms
00 36 - cook
00 37 - coop
00 38 - cpem
00 39 - cpgd
00 3A - cptl
00 3B - crea
00 3C - csdt
00 3D - ctrl
00 3E - cub*
00 3F - cusc
00 40 - cust
00 41 - dc*s
00 42 - dctr
00 43 - dec*
00 44 - decs
00 45 - devi
00 46 - devo
00 47 - dgr*
00 48 - dmp*
00 49 - dobc
00 4A - draw
00 4B - drdf
00 4C - ebhd
00 4D - effe
00 4E - effg
00 4F - efsc
00 50 - eqip
00 51 - flck
00 52 - fldy
00 53 - fogg
00 54 - foot
00 55 - form
00 56 - frms
00 57 - fxtt
00 58 - gcrg
00 59 - gegl
00 5A - gint
00 5B - gldf
00 5C - glps
00 5D - glvs
00 5E - gmeg
00 5F - goof
00 60 - gpix
00 61 - gptd
00 62 - grfr
00 63 - hcfd
00 64 - hlmt
00 65 - hlsl
00 66 - hsc*
00 67 - igpd
00 68 - iimz
00 69 - impo
00 6A - ingd
00 6B - item
00 6C - jmad
00 6D - jmrq
00 6E - jpt!
00 6F - ldsc
00 70 - lens
00 71 - lgtd
00 72 - ligh
00 73 - locs
00 74 - lsnd
00 75 - lswd
00 76 - ltvl
00 77 - mach
00 78 - matg
00 79 - mdlg
00 7A - metr
00 7B - mffn
00 7C - mgls
00 7D - mlib
00 7E - mode
00 7F - motl
00 80 - mply
00 81 - msit
00 82 - mulg
00 83 - muxg
00 84 - nclt
00 85 - obje
00 86 - pach
00 87 - patg
00 88 - pcec
00 89 - pecp
00 8A - perf
00 8B - pfmc
00 8C - pfpt
00 8D - pggd
00 8E - phmo
00 8F - pixl
00 90 - play
00 91 - pmcg
00 92 - pmdf
00 93 - pmov
00 94 - pphy
00 95 - prf*
00 96 - proj
00 97 - prt3
00 98 - rain
00 99 - rasg
00 9A - rm
00 9B - rmb
00 9C - rmbl
00 9D - rmcs
00 9E - rmct
00 9F - rmd
00 A0 - rmdf
00 A1 - rmfl
00 A2 - rmfs
00 A3 - rmfu
00 A4 - rmgl
00 A5 - rmhg
00 A6 - rmlv
00 A7 - rmmm
00 A8 - rmmx
00 A9 - rmop
00 AA - rmsh
00 AB - rmsk
00 AC - rmss
00 AD - rmt2
00 AE - rmtr
00 AF - rmw
00 B0 - rwrd
00 B1 - sFdT
00 B2 - sLdT
00 B3 - sadt
00 B4 - sbsp
00 B5 - scen
00 B6 - scmb
00 B7 - scnr
00 B8 - sddt
00 B9 - sdzg
00 BA - sefc
00 BB - sfx+
00 BC - sgp!
00 BD - shit
00 BE - sidt
00 BF - siin
00 C0 - sily
00 C1 - sirp
00 C2 - sky*
00 C3 - skya
00 C4 - smap
00 C5 - smdt
00 C6 - sncl
00 C7 - snd!
00 C8 - snde
00 C9 - snmx
00 CA - spk!
00 CB - sqtm
00 CC - srad
00 CD - ssao
00 CE - ssce
00 CF - sslt
00 D0 - stli
00 D1 - stse
00 D2 - styl
00 D3 - term
00 D4 - trak
00 D5 - trg*
00 D6 - ttag
00 D7 - udlg
00 D8 - ugh!
00 D9 - uise
00 DA - unic
00 DB - unit
00 DC - uttt
00 DD - vehi
00 DE - vmdx
00 DF - vtgl
00 E0 - vtsh
00 E1 - wadt
00 E2 - wave
00 E3 - wdst
00 E4 - weap
00 E5 - wetn
00 E6 - wezr
00 E7 - wgtz
00 E8 - whip
00 E9 - wigl
00 EA - wind
00 EB - wpdp
00 EC - wpdt
00 ED - wrdt
00 EE - wsdt
00 EF - wxcg
00 F0 - zone

 

 

Next 2 bytes is the Datum Salt, which doesn't really affect anything, but needs to be a value NOT x0000 or xFFFF.

For the last 4 bytes, the memory offset, you'll want to enter the memory offset mapexpand gave you (the Blue one above).

For an example, here is what adding a new LIGH tag would look like:
tagdupe5.jpg

Part C: Cleanup
Next we have to remove 8 bytes from somewhere else so that everything lines up to counter the 8 you added. Luckily, there is an abundance of 00 bytes beyond the class list, so scroll down until you see the text "tags" and select any 8 bytes after it and hit delete on your keyboard.
tagdupe6.jpg

In addition, we also have to adjust a few things to accommodate for the new tag entry. While we are here, let's take care of the 2 values located just above where we deleted the 8 bytes.

Go to the byte after the last group of FFs and jump 8 more. This should take you to the Class Index Address...
tagdupe7.jpg

...Which we'll need to add x8 to, since we added 8 bytes for the 1 entry.
tagdupe8.jpg

This should leave you just after that address, which is the Tag Count. Add x1 to it for 1 tag.
tagdupe9.jpg

Looking good. Last things to fix are in the map's header, so go to the offset 0x10 to see a familiar value.
tagdupe10.jpg

Like before, add x8 for the new entry.
Now head to the offset x2B4 for another familiar face.
tagdupe11.jpg

Also like before, add x1 for the new entry. And Save.

--
--
--

Congratulations! You have added a tag! Only thing left now is to add meta for it!

Filling in the meta:
To make this easy, let's just copy and paste the meta of an existing tag and modify it from there with a map editor. Here's how you would go about that:

Part A: Copy/Pasting the main meta
With your modified map still open in the hex editor, pop the original map in Ascension and open the tag you are duplicating. In the "Tag Information" box, right click the offset and copy the value.
tagdupe12.jpg

Paste the offset elsewhere for safe keeping and head to the "Plugin" tab in the meta editor. Make note of the value given for "headersize" in the first line. Hopefully, the given size will be correct. If it seems very large, please post in this topic and I will help you out. (Apologies in advance if there are errors) Once you've got the offset and size, minimize Ascension.
tagdupe13.jpg

Open the hex editor back up and go to the offset mapexpand gave you in the modified map. (the Red one above).
tagdupe14.jpg

Now open the original map in the hex editor alongside the modified one and go to the offset you copied in it.
tagdupe15.jpg

From that position, select (as decimal) the size you got from the Plugin. Copy the selection. Return to the modified map.
tagdupe16.jpg

From the position you went to with the map expand offset, select the same amount of bytes as you copied and paste. Save and exit.
tagdupe17.jpg

If you've been following this tutorial correctly, you should now be able to open your map in Ascension and go to your new tag without any problems.
tagdupe18.jpg

You're almost done. At this point the only thing left is to copy reflexives and datarefs and point the main meta to them.

Part B: Copy/Pasting the other meta
There is likely to be more than one reflexive/dataref in your meta, so I'll just outline one of both and you can repeat the process if necessary.
Part B.1: Reflexives
The easier of the two. Since lights don't have reflexive's I'll use the Spartan's attachments reflexive.
tagdupe19.jpg

There are 3 things in the reflexive layout that you need to note; The size, the count, and the offset.
The offset is fine how it is, but you'll want to multiply the size and count together and save the result, that is how much you'll be copying. Close the map out of Ascension and open the map in a hex editor again.

Head to the offset you got, which will be in decimal format and select the entirety of the reflexive using the number you got from multiplying (decimal as well)
tagdupe20.jpg

Copy and paste that into a new file for safe keeping. Go back to the file offset from map expand to get back to your blank meta.

Take a look at the hex and find where the first meta you copied ends, then to be safe jump to the next offset ending in x00. In my example map, that would be offset x5CF1100. Make note of this offset.
tagdupe21.jpg

Select the size of the amount you copied, copy the meta from the spare file you made and paste it in to the blank area you selected. Save and exit, you're done in hex.
tagdupe22.jpg

Open the map in Ascension and go back to your tag/reflexive.
tagdupe19.jpg

And fill in the new offset. You'll have to convert it to decimal first, which you could do via the Windows Calulator and changing the mode to programmer via the View menu or pressing Alt+3. Tick the Hex radio button and paste in your offset, then click decimal and copy the result. Easy.
tagdupe23.jpg

Take that number and plug it into the Offset box and hit the Save button next to it. If you did it right you'll notice no change at all. You just duplicated a reflexive!

Part B.2: Tagdata/Datarefs
Datarefs are no different than reflexives, except that you'll be replacing the memory offset using a hex editor.
Go to your tag and right click the dataref you'll be copying and choose "Display Information". Only worry about the size and file offset that spits out.
tagdupe24.jpg

Make a note of that then go to the "Info" tab so we can grab the map magic. Copy that somewhere safe and close the map.
tagdupe25.jpg

Back in the hex editor we go, this time going to the offset of the dataref's reference. We'll have to do some more math before we get to the offset of the actual data. Once there, make note of the 4 bytes directly in front, which is the size, then jump ahead x0C/12 bytes more to get to the memory offset of the data and copy it.
tagdupe26.jpg

Paste that into the Windows Calcluator you set up in the reflexive part above with the Hex option ticked. Now subtract the map magic from it and copy the result elsewhere. Then jump there in the hex editor.
tagdupe27.jpg

At that offset, select the amount you got from the size (Hex) and paste it into a new file. Go back to the file offset from map expand to get back to your blank meta.

Take a look at the hex and find where the meta you copied ends, then to be safe jump to the next offset ending in x00. In my example map, that would be offset x5CF1200. Make note of this offset, you'll be adding maths to it soon.
tagdupe28.jpg

Select the size of the amount you copied, copy the meta from the spare file you made and paste it in to the blank area you selected. Almost done.

Go to the tagdata reference offset you got from Ascension again and jump x0C/12 bytes more again to the memory offset.

Open the Calculator back up and paste in the offset you pasted the data to (Hex), now ADD the map magic to it. Copy the result.
tagdupe29.jpg

Paste the result over the old memory offset and Save. You're done!
tagdupe30.jpg

Opening back in Ascension one last time to check your work, you should see a valid dataref still. If so, then you just duplicated a dataref!

Getting Duplicated Objects Working
If you are duplicating an object, it will not load ingame until you modify the global object pool to allow for it. If you are not duplicating an object, you should be okay skipping this step.
 

Make sure your plugins are updated!

 

Open the ZONE tag in your modified map.
Scroll until you see the "Global Pool" reflexive, then the "Objects" reflexive inside it. (Invisibles are OFF in the following pic)
tagdupe31.jpg

The fix is very simple; jump to the last chunk in "Objects", set the value to -1 and save. Simple as that.
tagdupe32.jpg

What remains is referencing your new tag wherever you plan on implementing it, but I'm sure you know how to do that.

SnipeStyle, JaSpeR, Zone and 8 others like this

Share this post


Link to post
Share on other sites

dang... With adding tags to the global pool like this, could you eventually have a memory issue?

Share this post


Link to post
Share on other sites

dang... With adding tags to the global pool like this, could you eventually have a memory issue?

Perhaps, but I figure you'd have to add a lot for it to be a problem.

Share this post


Link to post
Share on other sites

Awesome tutorial. A few things that I want to point out though:

  • Make sure the map is not open in any other program while you run mapexpand. It changes the map magic of the file as a side effect, and this could result in your map becoming severely corrupted if it's open in another editor such as Ascension.
  • You can technically even go without mapexpand if you can find enough free space at the end of a partition. This technically isn't reliable, however.
  • The datum salt isn't related to the tag's name at all. It's just a debug value that forms the first two bytes of the tag's identifier (in fact, the engine doesn't even use it in release builds). Rather, the tag name table runs parallel to the tag table and names are determined based upon a tag's position in the tag table.

Lord Zedd and 0xdeafcafe like this

Share this post


Link to post
Share on other sites

nice to see you finally make a tutorial for this. hopefully it'll help others with further progress to injecting.

surprised you didn't use your cone in the example.

Share this post


Link to post
Share on other sites

nice to see you finally make a tutorial for this. hopefully it'll help others with further progress to injecting.

surprised you didn't use your cone in the example.

I was going to but I decided to include tuts for duplicating structures and datarefs so I went with ligh to be simple.

Share this post


Link to post
Share on other sites

It's weird, I don't see anything in that explanation that I didn't do when I tried it myself last month, yet it always just sends me to the main menu when I try to load the map. Oh well, guess I'll try again. Maybe there was an unmapped dataref or something I missed.

Edited by MBP

Share this post


Link to post
Share on other sites

It's weird, I don't see anything in that explanation that I didn't do when I tried it myself last month, yet it always just sends me to the main menu when I try to load the map. Oh well, guess I'll try again. Maybe there was an unmapped dataref or something I missed.

What xex are you using?

The use of mapexpand changes the header in a way that standard RSA-only xexs cannot handle. You'll need the blue flames one.

Gonna add that to OP because I totally forgot about that.

Share this post


Link to post
Share on other sites

Just wondering. when you have a reflexive within a reflexive, do you have to duplicate the reflexive on the inside for every chunk of the reflexive on the outside?

Share this post


Link to post
Share on other sites

Just wondering. when you have a reflexive within a reflexive, do you have to duplicate the reflexive on the inside for every chunk of the reflexive on the outside?

 

Every chunk will likely have a different location for the inner reflexive, so yes.

Share this post


Link to post
Share on other sites

Every chunk will likely have a different location for the inner reflexive, so yes.

well say good bye to duplicating a model. I would literally have to do this over 100 times.

Share this post


Link to post
Share on other sites

well say good bye to duplicating a model. I would literally have to do this over 100 times.

 

Well, it depends on the extent that you want to duplicate the tag to. You only need to duplicate the reflexives that you plan on changing in only one of the tags. For example, if you only wanted to mess with a duplicated model's nodes, but make it inherit everything else from the original model, then you only would have to duplicate the Nodes reflexive - everything else could stay the same because the memory addresses would still line up.

 

If you want to inject that tag into another map though, then everything would have to be duplicated.

Share this post


Link to post
Share on other sites

Well, it depends on the extent that you want to duplicate the tag to. You only need to duplicate the reflexives that you plan on changing in only one of the tags. For example, if you only wanted to mess with a duplicated model's nodes, but make it inherit everything else from the original model, then you only would have to duplicate the Nodes reflexive - everything else could stay the same because the memory addresses would still line up.

 

If you want to inject that tag into another map though, then everything would have to be duplicated.

I'm trying to inject. So far so good just that the damn markers reflexive has 74 chucks each with a different nested reflexive. Not sure if this is a dumb question, but is the Markers reflexive absolutely necessary to load a model? I noticed some models don't even have a Markers reflexive.

Share this post


Link to post
Share on other sites

I'm trying to inject. So far so good just that the damn markers reflexive has 74 chucks each with a different nested reflexive. Not sure if this is a dumb question, but is the Markers reflexive absolutely necessary to load a model? I noticed some models don't even have a Markers reflexive.

Not necessary if you know you won't use them.

Share this post


Link to post
Share on other sites

Just a heads up to anyone trying to duplicate on Condemned, Highlands, or Installation 04, a new "patg" class was introduced on those maps, which throws everything in the class index off by 0x01 after where it was inserted. Here's the fixed Class Index for the said maps:

00 00 - .rmc
00 01 - .rmp
00 02 - $#!+
00 03 - *cen
00 04 - *eap
00 05 - *ehi
00 06 - *fsc
00 07 - *igh
00 08 - *ipd
00 09 - *qip
00 0A - *rea
00 0B - *sce
00 0C - /**/
00 0D - <fx>
00 0E - BooM
00 0F - LMgS
00 10 - Lbsp
00 11 - ZZAP
00 12 - achi
00 13 - adlg
00 14 - ai**
00 15 - aigl
00 16 - airs
00 17 - ant!
00 18 - atgf
00 19 - avat
00 1A - bbcr
00 1B - bdpd
00 1C - beam
00 1D - bink
00 1E - bipd
00 1F - bitm
00 20 - bloc
00 21 - bsdt
00 22 - cddf
00 23 - cfxs
00 24 - chad
00 25 - char
00 26 - chdg
00 27 - chdt
00 28 - chgd
00 29 - chmt
00 2A - cin*
00 2B - cine
00 2C - cisc
00 2D - citr
00 2E - clu*
00 2F - clwd
00 30 - cmoe
00 31 - cntl
00 32 - coll
00 33 - colo
00 34 - comg
00 35 - coms
00 36 - cook
00 37 - coop
00 38 - cpem
00 39 - cpgd
00 3A - cptl
00 3B - crea
00 3C - csdt
00 3D - ctrl
00 3E - cub*
00 3F - cusc
00 40 - cust
00 41 - dc*s
00 42 - dctr
00 43 - dec*
00 44 - decs
00 45 - devi
00 46 - devo
00 47 - dgr*
00 48 - dmp*
00 49 - dobc
00 4A - draw
00 4B - drdf
00 4C - ebhd
00 4D - effe
00 4E - effg
00 4F - efsc
00 50 - eqip
00 51 - flck
00 52 - fldy
00 53 - fogg
00 54 - foot
00 55 - form
00 56 - frms
00 57 - fxtt
00 58 - gcrg
00 59 - gegl
00 5A - gint
00 5B - gldf
00 5C - glps
00 5D - glvs
00 5E - gmeg
00 5F - goof
00 60 - gpix
00 61 - gptd
00 62 - grfr
00 63 - hcfd
00 64 - hlmt
00 65 - hlsl
00 66 - hsc*
00 67 - igpd
00 68 - iimz
00 69 - impo
00 6A - ingd
00 6B - item
00 6C - jmad
00 6D - jmrq
00 6E - jpt!
00 6F - ldsc
00 70 - lens
00 71 - lgtd
00 72 - ligh
00 73 - locs
00 74 - lsnd
00 75 - lswd
00 76 - ltvl
00 77 - mach
00 78 - matg
00 79 - mdlg
00 7A - metr
00 7B - mffn
00 7C - mgls
00 7D - mlib
00 7E - mode
00 7F - motl
00 80 - mply
00 81 - msit
00 82 - mulg
00 83 - muxg
00 84 - nclt
00 85 - obje
00 86 - pach
00 87 - patg
00 88 - pcec
00 89 - pecp
00 8A - perf
00 8B - pfmc
00 8C - pfpt
00 8D - pggd
00 8E - phmo
00 8F - pixl
00 90 - play
00 91 - pmcg
00 92 - pmdf
00 93 - pmov
00 94 - pphy
00 95 - prf*
00 96 - proj
00 97 - prt3
00 98 - rain
00 99 - rasg
00 9A - rm
00 9B - rmb
00 9C - rmbl
00 9D - rmcs
00 9E - rmct
00 9F - rmd
00 A0 - rmdf
00 A1 - rmfl
00 A2 - rmfs
00 A3 - rmfu
00 A4 - rmgl
00 A5 - rmhg
00 A6 - rmlv
00 A7 - rmmm
00 A8 - rmmx
00 A9 - rmop
00 AA - rmsh
00 AB - rmsk
00 AC - rmss
00 AD - rmt2
00 AE - rmtr
00 AF - rmw
00 B0 - rwrd
00 B1 - sFdT
00 B2 - sLdT
00 B3 - sadt
00 B4 - sbsp
00 B5 - scen
00 B6 - scmb
00 B7 - scnr
00 B8 - sddt
00 B9 - sdzg
00 BA - sefc
00 BB - sfx+
00 BC - sgp!
00 BD - shit
00 BE - sidt
00 BF - siin
00 C0 - sily
00 C1 - sirp
00 C2 - sky*
00 C3 - skya
00 C4 - smap
00 C5 - smdt
00 C6 - sncl
00 C7 - snd!
00 C8 - snde
00 C9 - snmx
00 CA - spk!
00 CB - sqtm
00 CC - srad
00 CD - ssao
00 CE - ssce
00 CF - sslt
00 D0 - stli
00 D1 - stse
00 D2 - styl
00 D3 - term
00 D4 - trak
00 D5 - trg*
00 D6 - ttag
00 D7 - udlg
00 D8 - ugh!
00 D9 - uise
00 DA - unic
00 DB - unit
00 DC - uttt
00 DD - vehi
00 DE - vmdx
00 DF - vtgl
00 E0 - vtsh
00 E1 - wadt
00 E2 - wave
00 E3 - wdst
00 E4 - weap
00 E5 - wetn
00 E6 - wezr
00 E7 - wgtz
00 E8 - whip
00 E9 - wigl
00 EA - wind
00 EB - wpdp
00 EC - wpdt
00 ED - wrdt
00 EE - wsdt
00 EF - wxcg
00 F0 - zone
JJIJR likes this

Share this post


Link to post
Share on other sites

 

Just a heads up to anyone trying to duplicate on Condemned, Highlands, or Installation 04, a new "patg" class was introduced on those maps, which throws everything in the class index off by 0x01 after where it was inserted. Here's the fixed Class Index for the said maps:

 

Thanks! I edited that into the OP.

OrangeMohawk likes this

Share this post


Link to post
Share on other sites