Howdy, y'all!
This is my first ever tutorial, so please don't shoot me if it's not up to scratch.
Colour code:
Orange - Steps
Blue - Information
Red - Potential pitfalls
As a wise man (Xerax) once said, "Segoe UI makes everything beautiful."
Nota bene: Expanding maps increases the loading time, so use infrequently. If you wish to be a smart modder, note down your final memory address for future use, then you can use the remaining space without needing to expand the map again. I only used 384/65536 bytes produced from expanding the map, so you could easily remake every forge menu without hitting the boundary.
First, we need to expand our map to allow for extra data to be inserted into it.
So, let's open command prompt and run the command to expand our map. The command format is as follows: "mapexpand.exe <map_name> <number_of_pages>". So having placed my map in the same directory as mapexpand, my command becomes: "mapexpand.exe forge_halo.map 1".
Having jotted down the blue underlined values, let's move onto the next step. Navigate to the "scnr" tag in the map you wish to mod, this is where the forge menu is kept.
Search for "Sandbox Palette", this is the forge menu itself.
Increase our chunk count by one, then move to the newly created chunk. (Or replace an existing one, which uses the same method, but I won't be following that route in this tutorial.)
Now for a bit of basic maths :3, Windows Calculator will suffice in aiding with these arithmetic operations. Ensure that you're in hexadecimal mode. I should probably mention, "18" is a magic number which is the memory space allocated to each forge item entry, so when we're adding multiples of "18", this is because we're allowing for the menu entries in that chunk.
Having calculated our memory addresses that we're going to be using, let's move onto the next step.
Now comes the fun part, we're going to fill in the forge menu with our chosen objects. We'll be using the memory addresses we calculated earlier, starting at the base memory address, then moving onto the next address that we calculated.
Because the items we're placing require strings (text) which isn't existent in the game, we'll need to add in our own custom text messages; this is called locale editing.
You may think, "Oh wonderful! Loads of unused strings, I'm just going to use some of those.", but that's a bit of a pitfall. You're limited to using strings within the same category, in our situation, it's those in "ui\cui\strings\forge_strings".
Find some strings which aren't crucial to game-play, such as help messages, then edit their values to provide the desired message. I'm hoping that Lord_Zedd or someone similar will figure out how to add new locale strings.
Let's save our modified locale strings!
I probably should have used a modified locale as an example, but it's the same principal, take the name of the locale (not the value) and use it as I have below.
We're nearly done! Let's save our hard work and get outta here!
Transfer it over to your XDK/JTAG/RGH/H4k3rb0x
Restart the game.
Ta-da! If you've done everything correctly, you should see a BEAUTIFUL forge menu, and the ability to spawn your objects.