Install Steam
login
|
language
简体中文 (Simplified Chinese)
繁體中文 (Traditional Chinese)
日本語 (Japanese)
한국어 (Korean)
ไทย (Thai)
Български (Bulgarian)
Čeština (Czech)
Dansk (Danish)
Deutsch (German)
Español - España (Spanish - Spain)
Español - Latinoamérica (Spanish - Latin America)
Ελληνικά (Greek)
Français (French)
Italiano (Italian)
Bahasa Indonesia (Indonesian)
Magyar (Hungarian)
Nederlands (Dutch)
Norsk (Norwegian)
Polski (Polish)
Português (Portuguese - Portugal)
Português - Brasil (Portuguese - Brazil)
Română (Romanian)
Русский (Russian)
Suomi (Finnish)
Svenska (Swedish)
Türkçe (Turkish)
Tiếng Việt (Vietnamese)
Українська (Ukrainian)
Report a translation problem
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.