Jump to content

Anniversary Edition/Framework: Difference between revisions

partial rewrite, spelling out more clearly that enviro TXMPs are *not* globalized
(partial rewrite, spelling out more clearly that enviro TXMPs are *not* globalized)
Line 1: Line 1:
The Anniversary Edition Seven introduced a revised framework which installs from scratch, separate from any previous Editions. Following is a rundown of what the Installer is doing, from start to finish. To learn how to make your own mod package, which is required in order for the AE Installer to handle your mod properly, see [[Making a mod package]]. To understand the material below, you should first be familiar with Oni's .dat files on a general level, so [[OBD]] is recommended reading.
The Anniversary Edition Seven introduced a revised framework which installs into the directory Oni/AE/, separate from any previous Editions, which installed into Oni/Edition/. Following is a rundown of what the Installer is doing, from start to finish. To learn how to make your own mod in the package format used by the AE Installer, see [[Making a mod package]]. To understand the material below, you should first be familiar with Oni's data files on a general level, so [[OBD]] is recommended reading.


==Initialization==
==Initialization==
When first running the Installer, this is a one-time process that uses [[OniSplit]] to break the .dat/.raw(/.sep) files in Oni's [[GDF]] and breaks them into their constituent resources, yielding thousands of .oni files. These files are stored in temporary folders, one for each level. Next, the Installer performs what is called globalization: in order to allow modders access to (nearly) all data in all levels, it moves the .onis from each game level's folder to level 0, discarding duplicates (for instance, instead of making all characters available globally, BWest would put the [[ONCC]]s in each level for the characters they needed, to save memory; this means that the same character data can occur many times throughout the game data). The exception to this globalization is each level's [[AKEV]] and all child resources, its title, fail and win screens, and its [[LSI]]. Finally, the Installer recombines those folders of .oni files into the .dat/.raw(/.sep) files for each level, in AE/AEInstaller/vanilla/. Note that no data has been modded yet, just reformatted.
When first running the Installer, you will be required to initialize the AE. This is a one-time process that uses [[OniSplit]] to break the .dat/.raw(/.sep) files in Oni's [[GDF]] into their constituent resources, yielding thousands of .oni files. These files are stored in temporary folders, one for each level. Next, the Installer performs what is called globalization. When developing Oni, in order to save memory, [[BWest]] put in each level's data files only the characters, textures, sounds, etc. that were needed. Since we have far more RAM these days, we can make this data available in all levels in order to allow more versatile modding. To do this, the Installer moves many of the .onis that it exported to each specific level's folder into the folder for level 0, discarding duplicates in the process (since many of the same resources were duplicated throughout the original levels' data).
 
There is a major exception to this globalization, however. Each level's [[AKEV]] and all child resources (e.g. all environmental textures), as well as the levels' title, fail and win screens, and [[LSI]], are <u>left</u> in that level's folder. Not only would globalized environmental textures gobble up memory unnecessarily, but if a modder replaced an environmental TXMP that had been globalized into level 0, it would show up in all levels, which can have undesirable aesthetic side effects. So, what data <u>is</u> globalized? Primarily, all characters, their animations (even the ones for specific cutscenes), all sounds, all particles, and any unused textures that were not connected to AKEVs.
 
Finally, the Installer recombines those re-shuffled folders of .oni files into the .dat/.raw(/.sep) files for each level, saving them in AE/AEInstaller/vanilla/. Note that no data has been altered yet, just the resources reorganized.


==Installation==
==Installation==
After this, the user can choose some mods to install. When the Install button is clicked, the Installer starts off by deleting the existing .dat/.raw(/.sep) files in AE/GDF to start from a blank slate. It then iterates through each mod package you selected, and sends a command to OniSplit to combine the .dat for that level (in AEInstaller/vanilla/) with the .oni files from whichever packages have files meant for that level. The final .dat/.raw(/.sep) files are then created in AE/GDF.
After this, the user can choose some mods to install. When the Install button is clicked, the Installer starts off by deleting the existing .dat/.raw(/.sep) files in AE/GDF to start from a blank slate. It then iterates through each mod package you selected, and sends a command to OniSplit to combine the .dat for that level (in AEInstaller/vanilla/) with the .oni files from whichever packages have files meant for that level. The final .dat/.raw(/.sep) files are then created in AE/GDF.


When one package overlaps with another in some way, such as two packages that provide new textures for the same character, which one will take precedence? The answer is that the Installer goes in ascending order by package number. If five copies of the same .oni file are encountered one after another, only the last-encountered one will be used. Thus, a package numbered 11111 will override package 11110 wherever their files conflict, when they are both installed. Note that this is on a file-by-file basis, so package 11111 could be used intentionally to override only certain files in 11110, say, to improve or fix them. On the other hand, this might be an undesirable interaction. It's left as an exercise to the modders to be aware when there's an unwanted interaction and to mark their mod as being incompatible with the other one.
When one package overlaps with another in some way, such as two packages that provide new textures for the same character, which one will take precedence? The answer is that the Installer goes in ascending order by package number, so if five copies of the same .oni file are encountered one after another in five packages, only the last-encountered one will be used. Thus, a package numbered 11111 will override package 11110 wherever their files conflict, when they are both installed. Note that this is on a file-by-file basis, so package 11111 could be used intentionally to override only certain files in 11110, say, to improve or fix them. On the other hand, this might be an undesirable interaction. It's the responsibility of the modders to be aware when there's an unwanted interaction and to mark their mod as being incompatible with the other one.


==XML patching==
==XML patching==