I recently had an idea that could be useful for Forge, assuming that it is not overly cumbersome to implement. I vaguely recall some statements from Bungie in which they noted that they couldn’t add more Forge objects to Forge World; resources were too limited. I think I may have a solution to this problem.
What’s the problem?
Memory is described as the primary limiting factor on how many objects can be in a map’s palette, though performance costs also influence a palette’s size and contents. The amount of memory available for the map palette is in turn influenced by the complexity of the map itself – particularly with respect to textures, which is why Forge World is as bland as it is. This is why every Reach map has as many Forge objects as memory limits allow, despite many of their palettes being absolutely pitiful.
Memory limits are creativity limits. They limit what the developers can give us to work with, and that is a problem.
What’s the solution?
There may yet be a way to give Forgers more to work with than even Forge World did. What if we could choose a specific set of objects to work with?
Let’s say, for example, that we’re given a memory-efficient canvas map like Forge World. Enough memory is left free for the game to load, say, 100MB worth of Forge object types. 343i could simply design roughly 100MB worth of Forge Objects specific to this canvas map. The result would be that we have to use the objects we are given, even when that set of objects isn’t particularly useful for the specific map variant we have designed and are trying to build.
What if 343i did something else, though? What if they designed more objects than would fit in that 100MB limit, but made it so that objects are no longer tied directly to the canvas maps? What if they give us a huge library of objects, and for each map variant we design, we could choose which ones we use? What if we could choose our own palette for each map we build?
What I am proposing is the application of a tag system feature (that has been used in the past) to the Forge system. Technical details:
In Halo, all objects and all of their data are stored as “tags” – basically, scraps of data. Tags are stored in map files. To give a few examples, every single texture in Forge World is its own tag. The lightmap used to shade objects based on their locations is also a tag. Each object is a tag, which in turn contains links to other tags that define textures, models, hitboxes, etc.
Most tags are tied to specific maps. However, it is possible for one map file to “borrow” tags from another map file. If, for example, you have Halo PC installed, you can browse to the directory where the game stores its files. Open the “maps” folder, and you’ll see one file for every map – bloodgulch.map, ratrace.map… But there are two files in there that clearly aren’t maps, and that are way larger than every other map: sounds.map and bitmaps.map.
These are not maps at all. They’re just containers for tags: for every sound in the game, and for every reused texture in the game. So when Halo 1 loads a map, that map can direct the game to pull tags from these containers – tags being shared across map files. So devs don’t need to copy and paste (all of) the Assault Rifle data for every single map; they can define the sounds and textures once, and use that data in each map.
What I am proposing is simple: take the functionality that allows one MAP file to link to resources in another MAP file, and apply it to Forge objects. Put Forge objects in a set of isolated MAP files, and let any other map pull from those files.
So when a player Forges on any map, they’d have two options:
Basic Mode
This is Forge as we know it today: we load up a map, press “X”, and we have a list of some predefined, map-specific objects. Those objects are loaded when the map is loaded, and appear instantly when we select them.
Advanced Mode
When you load up a map in Advanced Forge, only the map will be loaded – no Forge objects (besides the standard ones, like weapons).
You will have access to a menu: the Resource Menu. The Resource Menu is little more than a list of every single Forge object in the game, each item being adorned with a checkbox and identified by its name. When you close the Resource Menu, all checked items will be loaded into RAM, after which point you may spawn and manipulate them as you please. Items that you uncheck will be removed from RAM.
When you save your map, it will be flagged with a piece of data that indicates that you’ve specifically chosen what objects are available. The next time it is loaded, the game will simply scan through the objects you’ve placed and selectively load those objects.
For extra utility, you can save this “object set” (custom palette). When in the Forge lobby, you can enable Advanced Forge, and then edit the Forge settings and specify any of your saved object sets to be loaded by default when you start your session. There could also be a few predefined object sets (including one for each map). So speaking in Reach terms, we could have a number of object sets: “FORGE WORLD”, “SWORD BASE”, “RAMPS ONLY”, “METAL ONLY”, “OBJECTS THAT LOOK LIKE CATS”, et cetera.
And the point of all this is…?
The point of all this is that memory will be less of an issue, and Forgers will have more to work with.
Let’s go back to the example of the map that leaves enough memory free for 100MB worth of Forge Objects. In Halo 3 and Reach, you would simply be left with what 343i gives you: whatever they choose to design with those 100MB, that’s what you use.
But with this system, they could design a ton more objects, and you could specifically pick the objects you need for your map variant. They could design a gigabyte’s worth of items, and you could cherry-pick only the ones you want. Do you want 100MB worth of ramps? You got it. Or perhaps you’d prefer 100MB worth of different explosives? Go for it.
Here are the main benefits:
- We can cherry-pick the objects that we specifically need, on a per-map-variant basis, allowing us to utilize the memory for objects however we see fit
- If we choose not to utilize all available memory, then we’d actually reduce loading times by preventing the loading of superfluous, unused object data
- All maps’ palettes could be part of this shared repository of objects. Speaking in Reach terms: if you want Solitary decor in Sword Base, you can have Solitary decor in Sword Base.
- Depending on how the object-dedicated MAP files are named, the palette could be extended post-release, allowing new objects to work in old maps. If each file is named like FO01, FO02, FO03, for example, then 343i could simply rig the engine to check for that pattern, and release DLC Forge objects as part of files whose names match that pattern.
continued in next post