fattwam Posted November 22, 2007 Report Posted November 22, 2007 Made by xbox7887 In this tutorial I will explain to you in detail, the basics of hex editing and its applications, as well as some more advanced approaches to hexing. First off, what exactly is hexing u askÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦? Well hex is short for hexadecimal and it is composed of numbers 0-9 and letters A-F with a number system of 16 as its base. It is a step up from binary (1Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s and 0Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s). I will spare you with all of the boring hex conversions and instead teach you how to convert values by using either a windows calculator or the tools included in Hex Workshop. Hex Workshop is the best hex editor out there and it is what I will be using for all of my examples so I suggest you go and download it. You will also need to read up on zuluÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s hexing tutorial. It is by far one of the best hexing tutorials out there and he does a great job explaining the basic technical aspects of hexing. I canÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t do any better in explaining it myself so familiarize yourself with the things explained in his tutorial first before reading mine cause I wonÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t even bother to write anything that his already covers. Using Hex Workshop You can start by opening up the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??coagulation[sky].metaÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? file in Hex Workshop. This is a meta file of the sky tag in coagulation and it was created using ADI. There are two main parts of a hex editor. The hex part is on the left, and the ACII part is on the right. If you click somewhere in the hex side, it will also show you where you are at in the ACII side. For the most part you will be editing in hex but I will switch back between the two throughout this tutorial. In the bottom left-hand corner there is a table of values and it will change as you select different parts of the meta. Above that table is your hex and decimal offsets. Then in the lower right-hand corner is a box that is used when finding or comparing meta. And the toolbar at the top contains all of your basic tools and configurations. ItÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s okay if you still donÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t completely understand everything up to this point. All of this information means nothing until you go out and actually do it. Converting Hex/Dec Values With A Windows Calculator Open up your windows calculator, select Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??viewÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? from the toolbar and click Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??scientificÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬?. From there you can do all sorts of different conversions. You will notice 2 tables of ids towards the top. They indicate what format the values are in. I will explain below the different hex data lengths. Byte= 00 Word= 0000 Dword (double word)= 0000 0000 Qword (quadruple word)= 0000 0000 0000 0000 So say you want to convert the hex value 0x1B4 to a decimal value. First you would select the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??HexÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? bubble, then type in Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??1B4Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? using the keypad. Then all you need to do is select the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??DecÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? bubble and it will automatically be converted to the decimal value, which is 436. The same thing applies when you want to convert a value from Dec->Hex. You can also use this to add or subtract Hex/Dec values. This will come in handy later on. DonÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t worry about the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??OctÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? and Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??BinÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? bubbles. You wonÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t ever use those when editing halo. Tag Dependencies If you look closely at the ACII side you will notice several tag names spelled backwards. This is how Halo lists all of their tags. Ex. edom=mode; mtib=bitm; snel=lens You will also notice that after each tag name there is a dword of meta. This is called a tag dependency and it is what every halo map editor uses when swapping dependencies. Each tag has its own dependency. If a tag has a dependency that is Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??Nulled OutÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? then that just means that its tag dependency is followed by a dword of FÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s. Using Map Editors Map Structure Injection/Extraction PLUGINS Plugins are used by map editors to edit tag values. They are made by hexing tag meta and looking for values. A map editor will open up the map, go into a tag, and select a corresponding plugin for the tag. Then you can change values, based on whatÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s listed in the plugin. Every tag in Halo has a certain structure and it will always follow that structure. ThatÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s why plugins work. Plugins are created through notepad and then saved as an Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??.xmlÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? file. And their plugin names should be the same as the Halo tag names. Ex. [weap] = Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??weap.xmlÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? [sky ] = Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??sky .xmlÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? Plugin Structure Every plugin needs to follow a certain structure so map editors can successfully recognize them as plugins. Some map editors use different types of plugin systems, but in this tutorial I will be talking mostly about .xml plugins. Below is the coding of what a basic .xml plugin structure would look like. As you can see, they are very similar to HTML coding, because they have beginning and ending tags. weap Main 0 short 0x000 Value Plugins accept many different types of values and below I will explain what each one does and include a brief description on how to find them, along with some examples of how they should look in an .xml plugin. Shorts Shorts are words of meta that translate into decimal values. short 0x000 Short 1 Floats Floats are dwords of meta that translate into decimal values. float 0x000 Float 1 Integers Integers areÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦.? integer 0x000 Integer 1 IDs There are two different types of ids, id16, and id32. An id16 indicates a short, and an id32 indicates a float. Most of the time you will just be using id16 and they will look like this in hexÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦ Ex. 0100= 1; 0200= 2 ; 0300= 3 id16 0x000 ID Type 0 Type 1 64 Type 2 128 Type 3 Strings Strings are data which spells out words or text in the ACII side. They come in many different sizes but the most common types are string32 and string256. string32 0x000 String 1 string256 0x000 String 2 Unicodes Unicodes mainly come in sizes of 64 and 256 and are very similar to strings, because they spell out words, but they are mostly used for in-game text. The reason behind this is that each letter takes up a word of meta, consisting of a letter followed by a byte of zeros. This example was taken from a gamesave and the purpose of Unicode is to allow other special characters or pictures, which require using the entire word of meta, to be referenced through it. Ex. Slayer (text) = 5300 6C00 6100 7900 6500 7200 (hex) S L A Y E R unicode64 0x000 Unicode 1 unicode256 0x000 Unicode 2 Bitmask32 Bitmasks, or flags, are kind of tricky to locate and they require some educated guessing in order to correctly identify them. Bitmasks are dwords of meta and they are broken down into big endian binary and read by a map editor as bits. There is a maximum of 32 bits for each bitmask. Below is a bitmask listed in hex and in binary. Ex. 0000 4200 (32nd bit) 00000000000000000100001000000000 (1st bit) The bits are read backwards as shown above. For plugins, a zero indicates an unchecked box and a 1 indicates a checked box. So for this particular bitmask, bits 10 and 15 would have a checked box because they are the only bits with a 1 for its value. bitmask32 0x000 Flags 0 Flag 1 1 Flag 2 2 Flag 3 Reflexives You might want to take a couple of seconds to prepare yourself for what youÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢re about to mentally experienceÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦j/k, they really arenÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t as bad as you may think. First IÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢ll start off with telling you what they are. Reflexives are dwords of meta that are used to point to other parts of meta and will almost always end in 80 so its pretty easy to identify them. Editing reflexives can be very useful and they have many different types of applications. This approach to linking meta is actually quite efficient and it is also very convenient for us modders to edit. Below is a labeled example of a reflexive listed in hex. Ex. Chunk count-> 0100 0000 6C1F 5B80 <-Reflexive All reflexives will follow the pattern showed above. First will be the chunk count (in blue), followed by the reflexive (in red). A chunk count tells a reflexive how many things to look for and you can find that out by taking the chunk counts short valueÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦so in hex, 0100 = 1. This particular reflexive would only point to one thing. Another big misconception is that most people think that the chunk count is the reflexive, when in fact the reflexive follows the chunk count. This is mostly due to the way that plugins list their reflexives. In a plugin you list the reflexives chunk count offset, instead of its actual reflexive offset, but we will get more into that later. Now you need to know how to find out what it is that they point to. One way would be to take the reflexive and endian swap it, then subtract its map magic, but this will give you a map offset, not a tag offset. So what I suggest you do is start by opening up the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??coagulation[sky].meta.dataÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? file in notepad, or just refer to the picture below. The meta.data file saved from ADI lists some basic tag information as well as all of its reflexives and tag references. ADI always lists their reflexives like above with their numbers in decimal. The first number listed is the reflexives location, and the second number is the starting offset of where the reflexive points to. And the reflexives chunk count is always located 4 decimal bytes before the reflexive. What this means is that there is a reflexive located at the decimal offset 32 (0x20), it points to the decimal offset of 172 (0xAC), and its chunk count is located at 28 (0x1C). Below I have mapped out each of the reflexives just like we did above. Ex. Reflexive|32|172 Reflexive at 32 (0x20) and it points to 172 (0xAC) and its chunk count is at28 (0x1C) Reflexive|76|184 Reflexive at 76 (0x4c) and it points to 184 (0xB8) and its chunk count is at 72 (0x48) Reflexive|124|208 Reflexive at 124 (0x7C) and it points to 208 (0xD0) and its chunk count is at 120 (0x78) Reflexive|256|260 Reflexive at 256 (0x100) and it points to 260 (0x104) and has a chunk count at 252 (0xFC) Now that you know where each reflexive points to you can also decide where each one ends. This can be very tricky for a number of reasons, but for now I will show you the most basic way of dealing with these. First you are going to want to know the offset of where the first reflexive points to, which in our case is 172 (0xAC). Then you are going to want to know the offset of where the next reflexive points to, which is 184 (0xB8). This means that the first reflexives meta spans from 172 (0xAC) to 184 (0xB8), so everything between those two offsets goes under the first reflexive. Now that you know how to find the total amount of meta that a reflexive points to, you can find out how much meta each chunk points to. So say youÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢re looking at the warthogs vehicle meta and its seat reflexive points to a total amount of 1056 bytes. You also notice that it has a chunk count of 6. Now take the total amount of 1056 and divide it by 6. This will give you the size of meta per chunk, or seat in this case, which comes out to be 176. This means that each seat has a meta size of 176. Listed below is how a basic plugin structure would look with one reflexive and a value added underneath the reflexive weap Main 0 reflexive 0x000 Reflexive 1 Reflexive 1 0 float 0x000 Float 1 When you add reflexives you will need to do 2 things. First you will always need the reflexives offset listed under the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??MainÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? structure. Then you need to make a completely different structure, and the structure MUST have the same name as the reflexives name or it will not work. Value Types Distances Colors Angles Making Plugins There are lots of different techniques that will go into making plugins and I will explain some of the more common ones below. Making plugins isnÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t that hard to do. Sometimes it requires a little educated guessing, while other things can be fairly obvious. One technique would be to compare the meta from Halo 1 with the Halo 2 tag meta, referencing it with the Halo 1 plugin for that specific tag. Although they are different, they do have some similarities within the tags. Another way to make plugins would be to compare an original map with a modded map that someone else made. You can do this by comparing entire map files in a hex editor. Another easier way would be to extract an original tag meta along with the modded meta from the corresponding tag. Then use Hex Workshop to compare the two files and see what has changed. This can also be considered stealing and you should always give credit where credit is due. Another way is to open up meta in a hex editor and just search for short and float values and then just list their offsets in a plugin, but this isnÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t always the best way to do things for a number of reasons. A huge drawback to this approach is that you completely ignore all existence of reflexives, which isnÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t a good idea. Reflexives are your friends, and without them you will need to do lots of extra work listing each value individually, and when you got to the end, the values would only apply to certain things because of the size difference between the tags. This is how most beginners start out (including myself), but I highly recommend you learn the reflexive approach. The best way to make plugins would be to map out the tags reflexives like I showed you how under the reflexive section so you know what offsets go under which reflexive. Now you know where the reflexive meta startsÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦and you also know where the regular meta ends. The meta before the reflexive meta can be put under the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??MainÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? structure, and the reflexive meta needs to be put in their corresponding reflexive structures. Now that you are familiar with the basics, I will walk you through a step by step process on how to make a plugin for the [sky ] tag. First off, you can start by again opening up the Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??coagulation[sky].metaÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? file in Hex Workshop and below I have listed the mapped out reflexives for easier reference. Reflexive|32|172 Reflexive at 32 (0x20) and it points to 172 (0xAC) and its chunk count is at28 (0x1C) Reflexive|76|184 Reflexive at 76 (0x4c) and it points to 184 (0xB8) and its chunk count is at 72 (0x48) Reflexive|124|208 Reflexive at 124 (0x7C) and it points to 208 (0xD0) and its chunk count is at 120 (0x78) Reflexive|256|260 Reflexive at 256 (0x100) and it points to 260 (0x104) and has a chunk count at 252 (0xFC) Okay so the first thing that you want to do is map out where each reflexive starts and also list the size of meta that they point to. Then make a basic plugin, with each of those reflexives listed, making sure that you list the reflexives chunk count offset for the reflexive values. It should look something like thisÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦ sky Main 0 reflexive 0x01c Reflexive 1 reflexive 0x048 Reflexive 2 reflexive 0x078 Reflexive 3 reflexive 0x0fc Reflexive 4 Reflexive 1 12 Reflexive 2 24 Reflexive 3 52 Reflexive 4 28 Now you are ready to find values to go underneath everything. When you are looking for values, it is easiest to see them when your hex editor has rows of 4 dwords (it should look like the picture above). Do this because values are always located at offsets with a multiple of 4. So lets start with the meta thatÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s not under any reflexive. If the first reflexive points to 0xAC, then everything under that offset belongs under the main structure. Okay so you look at the sky meta, and notice that the first 8 bytes contain a tag name and its dependency, and those arenÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢t values that weÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢re lookin for, so lets move on. You also should notice that the next 8 bytes contain a bunch of FÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s. This is usually an indication of something being nulled out, but itÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s still not what weÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢re lookin for. Now you come across offset 0x10 and it looks like Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??0200 0000Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬?. This is most likely an id but it is easier to list them as shorts for now, I will explain more about this later. So this is what you would add under the main structure so farÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦ short 0x010 0x010 (ID) Now we move onto offset 0x14, remembering that you should be looking for values every 4 bytes. This time we come across a float value that looks like this Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??0000 F042Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬?. Add this to the plugin as well. float 0x014 0x014 (Float) Now I think you can take it from hereÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦keep doing this until you get to 0xAC. Also keep in mind of where your reflexives and their chunk counts areÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦those are NOT values. Below I have listed all of the other offsets that should be listed in the plugin. 0x018 (Float) 0x034 (Float) 0x038 (Float) 0x03c (Float) Now we are ready to add offsets under the reflexives. Okay so you have your first reflexive which has a chunk count at 0x1C and it points to 0xAC and ends at 0xB8. I suggest that you temporarily delete everything after 0xB8 and then everything before 0xAC because you should treat the offset of where the reflexive points to as 0x00. This is how the map editors recognize offsets under a reflexive. An offset of 0x04 means 4 bytes from where the reflexive points to, not 4 bytes into the actual meta. After youÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢ve done this you should just be seeing the meta that belongs under the first reflexive. Now itÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s time to list more values by using the same approach as before. So again we see that the first 8 bytes contain a tag name and its dependency, so keep moving on. Now we are at offset 0x08, which contains a float value. Below is an example of how what the first reflexives structure should look like when you add a value to it. Reflexive 1 12 float 0x008 0x008 (Float) And since 0x08 is the last possible value in the meta, we move onto the next reflexive which has a chunk count at 0x48 and points to 0xB8 and ends at 0xD0. Now quit out of the meta and open it back up again and DONÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢T save when you quit. Then do the same thing as above and delete everything after 0xD0 and everything before 0xB8. Now start looking for values. Below I will list what offsets you should have come up with as well as what it should look like in the plugin. 0x000 (Float) 0x004 (Float) 0x008 (Float) 0x00C (Float) 0x010 (Float) 0x014 (Float) Reflexive 2 24 float 0x000 0x000 (Float) float 0x004 0x004 (Float) float 0x008 0x008 (Float) float 0x00c 0x00c (Float) float 0x010 0x010 (Float) float 0x014 0x014 (Float) Now just do the same for the remaining two reflexives. Map out their meta and find the values. Keep in mind that you only looked at CoagulationÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s sky meta, and in order to make a Ã?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Â¦Ã?¢ââ??¬Ã?â??completeÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬? plugin, you will need to compare many other sky metas. Listed below is everything that you should of gotten out of CoagulationÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s sky. I have took the liberty of labeling a few things for you, but thereÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¾Ã?â??Ã?¢s one last thing I forgot to explainÃ?Æ?Ã?â??Ã?â??Ã?¢Ã?Æ?Ã?¢Ã?¢ââ??¬Ã?¡Ã?â??Ã?¬Ã?Æ?ââ?¬Å¡Ã?â??Ã?¦once you find the values, you will have one hell of a time finding out what each of them means. sky Main 0 short 0x010 0x010 float 0x014 0x014 float 0x018 0x018 float 0x034 0x034 float 0x038 0x038 float 0x03c 0x03c reflexive 0x01c Reflexive (0x1C) reflexive 0x048 Outdoor Fog reflexive 0x078 Reflexive (0x78) reflexive 0x0fc Reflexive (0xFC) Reflexive (0x1C) 12 float 0x008 0x008 (Float) Outdoor Fog 24 float 0x000 Outdoor Fog Color Ã?Æ?Ã?â??Ã?¢ââ??¬Ã?¡Ã?Æ?ââ?¬Å¡Ã?â??Ã?® float 0x004 Outdoor Fog Color (G) float 0x008 Outdoor Fog Color (cool.gif float 0x00c % Thickness float 0x010 Start Distance float 0x014 Solid Distance Reflexive (0x78) 52 float 0x000 0x000 (Float) float 0x004 0x004 (Float) float 0x008 0x008 (Float) float 0x00c 0x00c (Float) float 0x010 0x010 (Float) Reflexive (0xFC) 28 short 0x000 0x000 (Short) float 0x004 0x004 (Float) float 0x008 0x008 (Float) float 0x00c 0x00c (Float) float 0x010 0x010 (Float) float 0x014 0x014 (Float) float 0x024 0x024 (Float)
Recommended Posts
Archived
This topic is now archived and is closed to further replies.