Overview: Difference between revisions

Jump to navigation Jump to search
no edit summary
imported>Leoetlino
(overview on the implementation of BotW - an initial, incomplete draft)
 
imported>Leoetlino
No edit summary
Line 2: Line 2:


== Framework and engine ==
== Framework and engine ==
{{Link to article|link=Executable|include=}}
''Breath of the Wild'' is a modern Nintendo game which was released in March 2017 for the Wii U and the Switch. Thus, it shares a lot of code with contemporary first-party Nintendo games such as ''Splatoon 2'' and ''Super Mario Odyssey'', notably the '''sead''' (Nintendo's in-house framework and utilities for first-party titles) and '''NintendoWare''' (GFX, audio, effects, and UI) [[Software libraries|libraries]].
 
''BotW'' is the first major Nintendo game to use '''XLink''' (EffectLink and SoundLink) as a system to make briding code and graphics or sound effects easier, and also marks the first significant use of event flows and the EventFlow/'''evfl''' library to implement in-game events such as cutscenes and NPC interactions.
 
A completely custom engine – which Nintendo seemingly calls [[KingSystem]] – is used for ''Breath of the Wild''. It appears to have been written from scratch as nothing significant is shared with previous Zelda games or even older Nintendo games. In particular, ''Breath of the Wild'' does '''not''' use LunchPack or ''SMO''<nowiki/>'s engine, even though games using the former appear to use a ''BotW''-inspired ROM structure.
 
 


{{Link to article|link=Software libraries|include=}}
The game relies on the [[Havok]] physics engine for [[wikipedia:Ragdoll physics|ragdoll physics]], collision (Physics2012), navigation (NavMesh), and [[wikipedia:Cloth modeling|cloth modeling]]. ''Breath of the Wild'' does not use Nintendo's KCL library.


''Breath of the Wild'' is a modern Nintendo game which was released in March 2017 for the Wii U and the Switch. Thus, it shares a lot of code with contemporary first-party Nintendo games such as ''Splatoon 2'' and ''Super Mario Odyssey'', notably the '''sead''' (Nintendo's in-house framework and utilities for first-party titles) and '''NintendoWare''' (GFX, audio, effects, and UI) [[Software libraries|libraries]].
== Architecture ==
Just like any other Switch game, executable code is stored in the ExeFS – with the game code in the main [[executable]] – and [[content]] files or assets are stored in the RomFS. The latter is referred to as the game ROM.


''BotW'' is the first major Nintendo game to use '''XLink''' (EffectLink and SoundLink) as a system to make briding code and graphics or sound effects easier, and also marks the first significant use of event flows and the EventFlow/'''evfl''' library to implement in-game events such as cutscenes and NPC interactions.
=== Code ===
''BotW'' is written in C++ with almost no hand-written assembly code and with no usage of the C++ standard library. Standard structures such as strings and associative maps are implemented in the '''sead''' library. Standard RTTI is not used; instead the game relies on Nintendo's own implementation of RTTI in '''sead''', which does not leak symbols at all.
The codebase appears to be compiled with high levels of optimisation enabled for both Wii U and Switch releases, with code on the latter platform being better optimised. Since 1.6.0 (Switch only), the game is additionally built with [[Wikipedia:LTO|LTO]] enabled, which results in massive amounts of code bloat. All known public releases are stripped, i.e. don't contain any debugging symbol.


A completely custom engine – which Nintendo seemingly calls [[KingSystem]] – is used for ''Breath of the Wild''. It appears to have been written from scratch as nothing significant is shared with previous Zelda games or even older Nintendo games. In particular, ''Breath of the Wild'' does '''not''' use LunchPack or ''SMO''<nowiki/>'s engine, even though games using the former appear to use a BotW-inspired ROM structure.
The game is divided into several components and makes heavy use of managers, which are singletons that are usually responsible for one specific task (e.g. PlacementMgr for actor placement, EventMgr for in-game events, etc.)


The game relies on the [[Havok]] physics engine for [[Wikipedia:Ragdoll physics|ragdoll physics]], collision (Physics2012), navigation (NavMesh), and [[Wikipedia:Cloth modeling|cloth modeling]]. ''Breath of the Wild'' does not use Nintendo's KCL library.
=== ROM ===
<br />


== Concepts ==
== Concepts ==
<br />
While ''Breath of the Wild'' shares core concepts such as actors, scenes and flags with most (all?) Zelda games since ''Ocarina of Time'', most of them are implemented in radically different ways. New concepts have also been introduced.
 
=== Actors ===
'''Actors''' are in-game objects. Link, enemies, scenery, weapons, NPCs, shrine interiors are all examples of actors.
 
In ''Breath of the Wild'', actors are implemented through a combination of code and data such as parameter files ([[ActorParam]]), models, physics data, etc. Unlike actors in older Zelda games, ''BotW'' actors are composed of reusable components and large parts of functionality can be configured via parameter files.
 
=== AI system ===
 
=== Event flows ===
 
=== Demos and cutscenes ===
 
=== GameData flags ===
 
=== Map units ===
 
=== AutoPlacement ===
 
=== Resource system ===
 
== File formats ==
[[AAMP]] and [[BYML]] are extremely common file formats, as they are most notably used for actor parameter ([[ActorParam]]) files, map units and more generally configuration files. They can be found in the ROM with various file extensions.
 
[[SARC]] (along with the [[Yaz0]] compression format) is also omnipresent as it is used for all data archives which BotW heavily relies on. SARC archives have several file extensions.
 
Large numbers of [[BFEVFL]] (binary event flows) files are stored in [[Content/EventFlow]].


== Comparisons with other Zelda games ==
Other commonly seen file formats include [[BFRES]] (models), [[BFSTM]] (sound streams), [[BFLYT]] (layouts) and various other standard NintendoWare formats.
<br />
Anonymous user

Navigation menu