Introduction to Assembly

Assembly, created by the XboxChaos modding community, enables the modification of tag information and other data in the .map files designed for Halo game engines. Halo .map files are in the hexadecimal format. All graphics, textures, sounds, models, and characters (bided's) are located in the map files represented as series of values between 0-9 and A-F.

Many games separate map files from the other resources; every map references the same resources. Halo does not work this way, every resource is duplicated in every map file. To save space and shorten loading times, unused resources are not implemented into the maps. Example, The Pillar of Autumn (m70.map) mission does not have a falcon. Its related textures, animations, models, and sounds are not present within the .map file.

Assembly allows easier editing of the hexadecimal format transposing it into an easy to read format. Every game object has a block of corresponding hexadecimal code. The developers, through trial and error learned which blocks correspond to which objects and the area they are located within the file. Then they labeled each block and designed Assembly to display the information in a palatable format.

Blocks of code or objects are organized as tags. Every weapon, vehicle, sound, animation, and object are tags. Assembly adds, removes, or edits blocks of code and overwrites the opened file based on the changes the operator makes.

Getting Started
The first crucial step requires creating a copy of the original maps folder. The maps are located under %Steam install location%\SteamLibrary\steamapps\common\Halo The Master Chief Collection\haloreach\maps. It is recommended to create a new folder in the maps folder, naming it "backup" and then copying all of the original unmodded map files into it.

You can download and compile the source of Assembly here at it's Github Page or you can download it already compiled from the MCC Mod Nexus

Once you have a backup of all of your maps you are ready to start messing around with stuff! the quickest way to get acquainted with Assembly is to open up the game, start playing a map, loading that map in Assembly, and messing around with different values on the tags you want to modify.

A list of in-game map names along side internals names are located under the help drop-down menu.



When a map is loaded into assembly you will be met with the "map header".

This level metadata contains basic information about the map such as map-name, singleplayer or multiplayer, and other data related to the beginning of the map file.

Tags
To start altering game objects, click the "Tags" button; located above the search bar.

This list encompasses the abbreviations for important objects or tags used in the game. You can also go to the Tags page to view all existing tags.

Globals = matg Scenario = scnr

Scenery = Scen

Vehicle = vehi

Weapon = weap

Crate = bloc

Model = hlmt

Shader = rmsh

Sound = snd!

Sound Looping = lsnd

Sound Environment = snde

Sound Cache File = ugh! (Do not import this tag it will crash the game)

This is where all the vital information about everything from what projectile your weapon fires to how much base health player and enemies have to death barrier and more. It can be pretty overwhelming at first glance, but you will quickly learn which tags are important to you depending on what sort of change you are trying to accomplish. Some of the most important tags are scnr for scenario, where barriers and kill triggers are, and matg for globals, where all sorts of player and AI properties can be tweaked.

The most important tag in Assembly is the Scenario (.scnr) tag. This tag contains the placement of objects, AI units, vehicles, environment (plants), and much more. It also contains the map ID and map type (singleplayer or multiplayer). This tag also contains the sandbox_palette and the Sandbox Budget. The palette is the in-game forge editor menu. Objects placed in the palette show up in-game (Campaign maps require a series of steps to enable forge mode). Much fiddling is required to make tags work in the palette. Whether an object already exists in the map or was imported.

Poking versus Saving
If you are currently playing the game, and have made changes in Assembly that you want to see, you simply have to press the "poke" button located at the bottom of the tag you are modifying. Pressing this button will apply the changes you have made in Assembly to your game running IN MEMORY. What this means is that when you press poke, the changes are committed to the game that is currently running, but not the game files saved on your computer. This means that if you go back to another menu, then load the same level again, any changes you poked into the game will no longer be applied.

The same is true of Assembly itself; if you poke a bunch of changes into the game, then close the map you are working on and open it again, those changes will not be found, they have not been saved to the map file. If you are happy with modifications you have made, you can press the save button to permanently apply those changes to the file, but keep in mind that you cannot save a file with Assembly while it is currently running in Halo. Simply back out to the main menu and then commit your save. Once the file is saved, your changes will be there in Halo and Assembly every time you load the map. This is why we created backups earlier, so that if we mess something up terribly and can't figure out how to reverse the changes, we can revert to a completely vanilla version of the map.

There are certain functions that cannot be performed in Assembly while the map is loaded in Halo, mainly editing the length of an array, something important for doing more advanced modifications, and importing tags, which is how you would move a weapon or vehicle or other object from one map into another map. Also you most likely cannot duplicate tags within the same map while it is open, but I have not personally tested this.

Poking is very useful for when you are trying to learn about how different parameters of a tag function in the game, or if you are trying to polish certain aspects of a more complicated mod you are working on. It can also be used to make simple, silly changes to campaign maps just for having a good time. Just remember to permanently save any changes you make after you are satisfied.

Network Poking can also be achieved so that you and your friends can all modify Halo in real time together.