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.

Rob

.MAP
Expanding Forge_Menus / Making Forge Menus That Don't Suck.

12 posts in this topic

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.6Tzfndn.png

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". 

vSwom5Q.png

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.

i85PC8o.png

Search for "Sandbox Palette", this is the forge menu itself.

hp3gn8X.png

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.)

IRCCGW0.png

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. 

QjG7Uof.png

Having calculated our memory addresses that we're going to be using, let's move onto the next step. 

m3dsdaW.png

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.

wi39RS0.png

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.

mK2jSRX.png

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".

Y8ARYAz.png

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.

fk20yQh.png

Let's save our modified locale strings! 

TfSxoY6.png

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.

utYw0sp.png

We're nearly done! Let's save our hard work and get outta here! :biggrin:

mPreFKn.png

Transfer it over to your XDK/JTAG/RGH/H4k3rb0x

HBSbejI.png

Restart the game.

4XOOfsN.png

Ta-da! If you've done everything correctly, you should see a BEAUTIFUL forge menu, and the ability to spawn your objects.

UMbls1v.png

Edited by SnowyMohawk
new pic links for compaitibility

Share this post


Link to post
Share on other sites

good tutorial however some things appear to be a little out of line. but more or less on the right track

for where you are replacing the existing vehicles list that contains your 9 different vehicle types you actually didnt need to even move in the first place, since you aren't adding anything directly to that you could of left it the same and simply changed the existing strings.

that said using the blank meta is a great way for your new vehicles. and you could of only changed the offsets of the ones that needed changing in order to add in more room for their new variants. in this case what i would of done is left the mongoose, scorpion, ghost, banshee, and wraith at their existing offsets which since you didnt change their parent reflexives offset will continue to line up for them in the future.

then for the falcon, warthog, and shade turret simply move them to new addresses. which in this case using the same variants as you i would of put the falcon at 0xBE0C0000, warthog at 0xBE0C0048, and lastly the shade at 0xBE0C00A8. using these values means the you will only need to use 0xF0 space of new data conserving more for later. especially since if i can see properly you have your vehicle list is that your setting it to start at the space 0xBE0C0180 which means that before this you left 0x180 bytes blank with no data being used. i enjoy to utilize all bytes used to save more for later.

so with this said the address that is being shown is where it starts and if you calculate the size for it how you did you will be getting its ending address, which is important for the next item that you intend on putting in that that end address will actually be the next ones start address. and for strings you are using an area that doesn't cause much problems for people but there is also other areas that you can change that you wouldnt notice at all in game, an example of this is every one of the xxspacerxx strings. they are never seen in game and you could change each of them if you need new strings. as well you made a new string for falcons when you could of edited the existing falcon string.

all of this information is just to help you along with conserving space and to help you along the way as you learn more.

Share this post


Link to post
Share on other sites

that said using the blank meta is a great way for your new vehicles. and you could of only changed the offsets of the ones that needed changing in order to add in more room for their new variants. in this case what i would of done is left the mongoose, scorpion, ghost, banshee, and wraith at their existing offsets which since you didnt change their parent reflexives offset will continue to line up for them in the future.

then for the falcon, warthog, and shade turret simply move them to new addresses. which in this case using the same variants as you i would of put the falcon at 0xBE0C0000, warthog at 0xBE0C0048, and lastly the shade at 0xBE0C00A8. using these values means the you will only need to use 0xF0 space of new data conserving more for later.

That's a very good point, one which I hadn't thought of, so I tip my hat to you for spotting it. 

 

if i can see properly you have your vehicle list is that your setting it to start at the space 0xBE0C0180 which means that before this you left 0x180 bytes blank with no data being used.

That's not quite the case, the memory address for the list needs to come after the final entry. As you can see in the image below, there are only 4 bytes wasted, and those are padding (I believe). 180-false.png

 

for strings you are using an area that doesn't cause much problems for people but there is also other areas that you can change that you wouldnt notice at all in game, an example of this is every one of the xxspacerxx strings. they are never seen in game and you could change each of them if you need new strings

 

Ultimately, the ability to create new locale strings would solve this problem, but until then we face the problem of string scavenging. I didn't want to touch the xxspacerxx strings incase those were important to the engine for whatever reason, but now I know that they're not important, so I can use them in future. 

 

you made a new string for falcons when you could of edited the existing falcon string.

 

That's what happens when you write up a tutorial at 2am :tongue: 

Thanks for your input, I'll remember those points for future notice. ^^

Edited by Rob
Faultiplayer likes this

Share this post


Link to post
Share on other sites

The hexadecimal and maths things confuse to me to hell, anyone able to simplify it more? I don't understand hex anything.

Think of an address or an offset as a location in the .map file. When you mapexpand, you add free space to the map where you can add blocks. Assembly tells you the size of every block (entry size) and how many times it is repeated (count). It also tells you where it is located (Address). Keep in mind the entry size and count are in decimal (in other words regular numbers, not hex). Also you need to subtract the map magic (Assembly should tell you in the map information tab) from the address assembly gives you before you go to it on the map. 

 

That's really as simple as you can explain it.

Rob likes this

Share this post


Link to post
Share on other sites