Go to file
2018-02-10 17:08:18 +01:00
example_plugin [example_plugin] Changed to example_plugin to hook into FS_INIT 2018-02-10 17:05:32 +01:00
loader [Loader] Added support for the init hook. 2018-02-10 17:05:11 +01:00
plugins/padcon [Plugins] Added a simple padcon plugin! 2018-02-10 17:06:42 +01:00
tools/udp_debug_reader [Tools] Added the UdpDebugReader 2018-02-04 10:40:20 +01:00
wups_include [WUPS] Added Macro for the Initialization hook 2018-02-10 17:00:17 +01:00
.gitignore [Plugins] Added a simple padcon plugin! 2018-02-10 17:06:42 +01:00
.travis.yml [Travis] Added padcon to nightly release 2018-02-10 17:08:18 +01:00
gitrev.sh [General] Moved gitrev.sh 2018-02-04 11:17:01 +01:00
LICENSE Create LICENSE 2018-02-03 09:27:57 +01:00
Makefile [General] Updated travis script to build to example_plugin 2018-02-04 10:29:04 +01:00
README.MD [Tools] Added the UdpDebugReader 2018-02-04 10:40:20 +01:00
wups_elf.ld [WUPS] Added Macro for the Initialization hook 2018-02-10 17:00:17 +01:00
wups.ld [WUPS] Added Macro for the Initialization hook 2018-02-10 17:00:17 +01:00

Plugin system for the Wii U. (WIP) Build Status

I decided to make this entirely public, so everbody can contribute.

Goal

The goal is provide a mechanism to modifiy your Wii U experience in a modular way. Currently each features has it's own application (TCPGecko, SwapDRC, HIDtoVPAD, SDCafiine) and you can only start one applicationa the same time. This means, you can't mix any of these features. One way would be to create an own App for each feature combination (like geckiine) or create one app that has all features. Both approaches have the same disadvantage, it's nearly impossible (and time consuming) to support everthing requested/possible.

The idea is now:

  • Each feature will be deployed as an individual module/plugin
  • These modules will be loaded with ONE generic loader
  • And can be mixed in any way
  • A GUI can (de)activate them without any new compiling
  • Everything can be handled easily on the console itself

Planned features

Short-term goals

Possbile to create a plugin which:

  • can override existing system function
    • provide a hook function which will be called
    • on each start of an application
    • everytime a application will be closed
    • on each frame
  • can be combined with other plugins

With an simple, generic loader which:

  • Loads the plugins from the SDCard
  • Combines them and use them ALL at the same time.

General:

  • Port some currently available tools.

Mid-term goals

General:

  • Port all common applications like TCPGecko etc.

Loader:

  • Allow to patch the currently loaded RPX
    • This would lead game binaries

More advanced plugin loader:

  • Create configuration system:
    • (de)activate certain plugin only in set applications.
    • (de)activate plugins completly without removing them from the SDCard.

Long-term goals

Even more advanced plugin loader:

  • Downloading plugins directly on the console
  • Updatin existing plugins
  • Share configurations with other user
  • Allow the plugin to have an own configuration window.

Technical problems

To achieve this, serveral "problems" need to be resolved (feature need to be implemented). This is just an short overview. Look at the issued for detailed information.

plugin

  • Create an stable interface the plugins will use.
    • with hooks for
    • application start
      • application end
      • each frame
      • functions
    • some way to configure them?
  • Prodivde the plugin as a .elf?
    • Keep the file ending?
    • Compress/zip it?
  • How to add meta information?
    • Compatibility with
      • Plugin loader
      • Wii U FW
    • Information about the plugin
      • Author(s)
      • Version
      • Description
  • Linking / building
    • How to link the files
    • Write a proper (base) makefile
    • Is position independent code possible?
      • Is it reliable?
    • If not, how does elf relocation work?

function patching

  • (elf relocation)
  • use the information from the plugin
    • parse it
      • HOW to store it?
  • save the patching order
  • add basic disable/enable mechanism

general

  • provided general hooking points
  • How to store the plugins
    • Where is enough, unused space
  • keep tracking of the plugins
  • simple gui?
  • provide functions?
    • like libfat, libiosu activated
    • kernel copy function
  • pass information into the plugins
    • Running on which FW
    • arguments?
    • ???

How to build

For building you need:

Also install this plugin system with.

make

then you can build the example_plugin.

Logging

For logging you need to start the UdpDebugReader. This has been created by @dimok789 and can be found in the tools folder.

Similar projects

function-patcher-example

Platform: Wii U Notes: TODO https://github.com/Maschell/function-patcher-example

COSSubstrate

Platform: Wii U Notes: TODO https://github.com/QuarkTheAwesome/COSSubstrate

brainslug-wii

Platform: Wii Notes: TODO https://github.com/Chadderz121/brainslug-wii

substitute

Platform: IOS Notes: TODO https://github.com/comex/substitute

Credits

Some files are based on brainslug by Chadderz: https://github.com/Chadderz121/brainslug-wii