Halo: The Master Chief Collection

Halo: The Master Chief Collection

View Stats:
Basic Guide to Modding Halo with Assembly
I see mostly the same boring topics about people fighting over aim assist, DMR starts, the ranking system, and so. I'm hoping to add a bit of light in the threads by sharing some stuff I've learned about basic modding for Halo Reach.

Being that there are hardly any guides on how to use Assembly, it took me quite a while. I've got weeks worth of experience modding games like Fallout and Skyrim, GTA 5, and even old games like Lego Rock Raiders and Lego Island 2. But Assembly was alien to me.

I got a decent foothold thanks to Crimson on YouTube. I'd link his channel, but I'm pretty sure that's against discussion rules. He's made a few guides on using Assembly that helped get me started, and I didn't even want to do all the cool stuff he shows.

Anyway, the main problems I ran into were changing weapon damage and just generally finding 'tags'.

To start, grab Assembly from the Nexus. All you have to do is unpack it and you're good to go.

The thing with Assembly is that before you start changing things, you need to load into the level you want to edit. This is because, for God-knows-why, each object has a different entity per map in the game. For example - let's say you load up the first mission and make changes to the assault rifle. When you save those changes, the assault rifle will only be different for that map. It'll be normal for all the others. So if you want the assault rifle to modified consistently through the entire campaign, then you have load up each campaign .map file and edit the assault rifle entity.

The next thing, which confused the absolute hell out of me (and I'm still not 100% sure, I just know that it works), is how to save the changes. You'll notice 2 different lines of 'tabs' when you open new .map files or edit tags within them. You'll see the .map tabs on the top row, and you'll see tags under them. For a good while, I was hitting the Save button once, and then restarting the map to test changes...to no avail. I discovered (I'm pretty sure), this is because you have to hit Save for EVERY tag that you edit.

Another example - Say you're editing Installation 04, so you have the .map open. You then have multiple sub-tabs for the warthog, ODSTs, and spawn points. You'll have to click Save for EACH of these open tabs in order for it to work. Once I figured this out, things finally came together.

Okay, so you have Assembly open and you know which map/s you want to edit, but how do you know what the name is? Easy! Pretty awesome, go to the Help tab and click Map Names. Assembly will show you the map names for every single map across each Halo game.

Before you open a .map file, you need to actually load into that map in-game (or so I was told).

So now you're in-game on the map you want, and have the map that you want to edit opened up in Assembly. What now? Click on the Tags tab, and you'll see a list of entries. Each of these entries contain different properties. I'm not going to go into details because I'm still a noob myself. Check out Crimson's videos for better detail. But for a simple guide on how to change weapon magazine size and damage like I did, you'll need two tags, with a few sub-tags.

You'll want "weapons" and "damage effects". So another thing I learned is that the bullets you fire count as their own entity in Assembly. So when you go to Weapons and find the assault rifle, about halfway down you can change the magazine size properties...but you won't find damage values anywhere. This is because the assault_rifle_bullet entity controls the damage. You'll find damage values for everything in the game under Damage Effects. Once you find the assault_rifle_bullet entry, you can change the values. Default is around 5.5 I think. I upped it to 7.5 myself. Not much, but seems much closer to the original Halo 1 assault rifle.

Alright, so you've made changes and want to test and save them. So near the bottom of each sub-tag, you'll see Save and Poke. I don't know why it's call Poke. Don't ask. Just know that this basically injects your changes real-time into the game for you test. You'll need to do this for each tag you edited. So Poke the changes, Alt+Tab back in-game, and test it out. Once you're satisfied, you'll need to quit the level in-game and go back to the menu to save.

Once back at the menu, go back to Assembly and click Save for each tag/sub-tag you edited. The changes will now be permanent. WARNING - DO NOT CLICK SAVE WHILE STILL IN-GAME. You'll get a warning about corrupting data, I dunno if this is accurate because I haven't done it, but I know that even if you choose cancel, Assembly will close out entirely, and you may have to make your changes all over again.

I think this pretty much covers it!
< >
Showing 1-13 of 13 comments
MartensoftWorld Dec 28, 2019 @ 12:23am 
sounds good
JrB908 Dec 28, 2019 @ 1:07am 
Great Post
Bassrex100 Jan 6, 2020 @ 11:28am 
Thanks for summing up the whole saving part on assembly, i was so confused on why it wasn't working too.
BuketOBoatTrash Jan 11, 2020 @ 9:37pm 
@bassrex100 Glad I could help!
Arcturus Jan 12, 2020 @ 1:51pm 
Originally posted by BuketOBoatTrash:
The thing with Assembly is that before you start changing things, you need to load into the level you want to edit. This is because, for God-knows-why, each object has a different entity per map in the game. For example - let's say you load up the first mission and make changes to the assault rifle. When you save those changes, the assault rifle will only be different for that map. It'll be normal for all the others. So if you want the assault rifle to modified consistently through the entire campaign, then you have load up each campaign .map file and edit the assault rifle entity.

The next thing, which confused the absolute hell out of me (and I'm still not 100% sure, I just know that it works), is how to save the changes. You'll notice 2 different lines of 'tabs' when you open new .map files or edit tags within them. You'll see the .map tabs on the top row, and you'll see tags under them. For a good while, I was hitting the Save button once, and then restarting the map to test changes...to no avail. I discovered (I'm pretty sure), this is because you have to hit Save for EVERY tag that you edit.
So I'm not an engineer at Bungie, I don't know specifically how the engine was made but I can infer a few things from the way the tags work and why they designed it this way:

The usage of several tags for the same thing across levels is mostly due to memory concerns. When saving the map, it actually takes all the tags you've used and says "the level is dependent on these" and saves them *in* the level data at specific lines. As an example; a marine may use an assault rifle, when saving the file it will simply replace the "weapon" slot with a line number where the rifle is. This means that when loading that marine in, it can almost instantly load in the rifle because its part of the same file that is already loaded into memory. Compare this to modern commercial engines like Unity or Unreal, where all the assets are saved externally to the level and then require being loaded in as their own files (more memory usage, longer load times) and require a parser to read them (same issue; memory usage and load time, plus more CPU usage).

There's also the matter of encapsulation, aka restriction of access to data. By allowing people to edit assets outside of the level, it means you can accidentally make the wrong datatypes (a marine's weapon is now a wraith, the game breaks trying to achieve this). To prevent this, more effort is require in ensuring that it IS the right data type, thus eating up more processing power and taking more time to run, which isn't good for efficiency. In Halo's editor tools, they put the data-type checking in there to prevent you putting in the wrong data, and then the level itself can assume with high confidence that the weapon being read is in fact a weapon. If you edit the level itself to change the weapon, you're likely to break the file anyways, so that's on you.

So the main benefit is memory efficiency. Secondary benefit is that it allows unique versions of the asset to be used in each level that is balanced for THAT level without having to create an entirely *new* asset based on the old (though there are programming techniques that make that easier). This is because the level isn't reading from an outside file, its reading its own data, it doesn't KNOW this is a different version of the assault rifle to the other levels, hell it isn't even aware the other levels exist.

This means that you can have situations such as all enemies in the first level having lower health than comparable enemies of same difficulty in later missions, without having to make a new "enemy_firstMission" asset and then changing everything that depends on that enemy to now use the new one instead. Biiig time saver during development as you're not trawling through data making sure everything is using a specific variant.

The saving of individual tags is just the way that Assembly handles data, I think. When it saves, it has to ensure that the data it is saving is the correct datatypes to prevent the earlier mentioned file-breaking. Save the weapon tag, Assembly says "okay, this is acceptable". Then save the mission, Assembly says "okay, all assets used by this level are acceptable".

Halo's engine is pretty interesting in how its designed, very different to other games and more commercially available ones, I actually prefer how it handles data.
Arcturus Jan 12, 2020 @ 1:51pm 
Also sorry for the rant ._.
BuketOBoatTrash Jan 17, 2020 @ 8:32pm 
@angryboy, All good lmao. I don't know either, but I'd say what you described is probably pretty damn accurate. Nice analysis.
Devist8er 117 Jul 19, 2020 @ 4:06pm 
where do they save to. I hit save but when i load back in all may changes a reverted back to default
BuketOBoatTrash Jul 19, 2020 @ 5:04pm 
@devist8er * haven't used Assembly pretty much since I posted this, so I don't really remember. However, I'm PRETTY sure it is done and real-time, and when you hit save, it saves the file in real-time. I could be wrong though.
Arcturus Jul 20, 2020 @ 4:01am 
Originally posted by devist8er:
where do they save to. I hit save but when i load back in all may changes a reverted back to default
It saves to the file you opened. However I don't believe it will work during runtime, you have to restart the game.
Anyway to get Assembly to work on a computer running Linux (Ubuntu)?
Shaheer 999 May 30, 2023 @ 9:55am 
Why not use the official mod tools?
Arcturus May 30, 2023 @ 10:54pm 
Originally posted by Shaheer 999:
Why not use the official mod tools?
Because the official tools weren't out when this guide was written, and anyone who finds this guide first would be none the wiser to that fact.
< >
Showing 1-13 of 13 comments
Per page: 1530 50

Date Posted: Dec 28, 2019 @ 12:09am
Posts: 13