Overview: Difference between revisions
no edit summary
imported>Leoetlino |
imported>Leoetlino No edit summary |
||
Line 8: | Line 8: | ||
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. | 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 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. | The game relies on the [[Havok]] physics engine for [[wikipedia:Ragdoll physics|ragdoll physics]], [[Wikipedia:Collision detection|collision]] (Physics2012), navigation (NavMesh), and [[wikipedia:Cloth modeling|cloth modeling]]. ''Breath of the Wild'' does not use Nintendo's KCL library. | ||
== Architecture == | == Architecture == | ||
Line 15: | Line 15: | ||
=== Code === | === 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. | ''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 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 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. | ||
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.). Unlike older Zelda games, most managers are dynamically allocated, not stored in BSS. In general, ''Breath of the Wild'' makes use of the heap and virtual functions a lot more. | |||
In total, there are 130+ [[subsystems]]. | |||
=== ROM === | === ROM === |