Overview: Difference between revisions
GRAnimated (talk | contribs) mNo edit summary |
GRAnimated (talk | contribs) mNo edit summary |
||
Line 5: | Line 5: | ||
=== Code === | === Code === | ||
The game's executable is stripped, only containing symbols for exported functions and typeinfo for a statically linked ''nn::pia''. The game also makes use of clang's [https://en.wikipedia.org/wiki/Profile-guided_optimization Profile Guided Optimization] to optimize function calls. This makes ''Super Mario Bros. Wonder'' and ''The Legend of Zelda: Tears of the Kingdom'' the only [[ModuleSystem|ModuleSystem]] games to not use [https://www.llvm.org/docs/LinkTimeOptimization.html Link Time Optimization], which acts much more aggressively for a bigger boost in performance. | The game's executable is stripped, only containing symbols for exported functions and typeinfo for a statically linked '''nn::pia'''. The game also makes use of clang's [https://en.wikipedia.org/wiki/Profile-guided_optimization Profile Guided Optimization] to optimize function calls. This makes ''Super Mario Bros. Wonder'' and ''The Legend of Zelda: Tears of the Kingdom'' the only [[ModuleSystem|ModuleSystem]] games to not use [https://www.llvm.org/docs/LinkTimeOptimization.html Link Time Optimization], which acts much more aggressively for a bigger boost in performance. | ||
The optimization applied to the recent games may be in response to the influx of modding and reverse engineering on Nintendo's most important switch games. PGO and LTO act as a layer of obfuscation, which is a total opposite from the earliest switch games like `Splatoon 2` and `Super Mario Odyssey` releasing with full symbols and typeinfo. | The optimization applied to the recent games may be in response to the influx of modding and reverse engineering on Nintendo's most important switch games. PGO and LTO act as a layer of obfuscation, which is a total opposite from the earliest switch games like `Splatoon 2` and `Super Mario Odyssey` releasing with full symbols and typeinfo. |
Revision as of 05:03, 15 October 2023
Super Mario Bros. Wonder's internal project name is Secred.
Framework
Super Mario Bros. Wonder is a first-party game developed by Nintendo EPD. This wiki refers to the game's engine as ModuleSystem, based on one of the heaps created by the executable. This engine has also been used in Splatoon 3, Nintendo Switch Sports, and The Legend of Zelda: Tears of the Kingdom. It's currently unknown where this game's development lies in a timeline of these games.
Code
The game's executable is stripped, only containing symbols for exported functions and typeinfo for a statically linked nn::pia. The game also makes use of clang's Profile Guided Optimization to optimize function calls. This makes Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom the only ModuleSystem games to not use Link Time Optimization, which acts much more aggressively for a bigger boost in performance.
The optimization applied to the recent games may be in response to the influx of modding and reverse engineering on Nintendo's most important switch games. PGO and LTO act as a layer of obfuscation, which is a total opposite from the earliest switch games like `Splatoon 2` and `Super Mario Odyssey` releasing with full symbols and typeinfo.
The game was compiled with NintendoSDK 16.2.0, linking in NintendoWare and several middleware libraries in relation to online.
Libraries | Package | Usage |
---|---|---|
NPLN |
NPLN-1_16_4-Release Google_APIs_For_NPLN-1_16_4-Release gRPC_For_NPLN-0_0_0-Release OpenSSL_For_NPLN-0_0_0-Release |
|
libcurl | libcurl-16_2_0-Release | |
Pia |
PiaClone-6_30_0 PiaCommon-6_30_0 Pia-6_30_0 PiaLocal-6_30_0 PiaLan-6_30_0 PiaSession-6_30_0 PiaSync-6_30_0 PiaTransport-6_30_0 PiaNpln-6_30_0 |
|
NintendoWare |
NintendoWare_Vfx2-16_2_0-Release NintendoWare_Font-16_2_0-Release NintendoWare_Ui2d-16_2_0-Release NintendoWare_G3d2-16_2_0-Release |
|
libz | libz-16_2_0-Release |
In addition to middleware, the game's engine also links in some notorious libraries used in a majority of first-party Nintendo games, like sead, agl, gsys, and XLink2.
In the refactoring that created the engine, several classes were moved from BOTW into their own namespaces. al::ByamlIter, a class borrowed from Super Mario Odyssey, was present in Breath of the Wild and exists in this game as byaml::ByamlIter.
The namespace pp was introduced in Super Mario 3D All Stars as hardcoded parameters in pp::TypedParam classes within .bgyml files (and are BYAMLs), generated by an intermediate format .gyml. The library continues to be used in this game.