Release Fakemote: A cIOS module that fakes Wiimotes from the input of USB game controllers

xerpi

.
Joined
Sep 13, 2021
Messages
6
Likes
16
Location
Barcelona
Fakemote is A Wii cIOS module that fakes Wiimotes from the input of USB game controllers.

It currently supports DS3 and DS4 controllers, with the following features:
  • DS3 and DS4 support includes LEDs, rumble, and the accelerometer
  • DS4's touchpad is used to emulate the Wiimote IR Camera pointer (only tested with the sensor bar configured on top of the screen)
  • Both controllers emulate a Wiimote with the Nunchuk extension connected
Download
Installation instructions
GitHub page

Notes:
You can install it to any (empty) slot, using IOS 57 as base (it will also probably work with base IOS 58 and other base IOSes). For now, I recommend not installing it to cIOS 249 (keep this slot with plain d2x) but installing it to an empty slot such as 252 for example. Since loaders have the option to change under which IOS slot to run the loader itself and the games, it's easy to switch between slots.


I would like to thank @Aurelio, without his tremendous help this project wouldn't have been possible!
 
Last edited:

xerpi

.
Joined
Sep 13, 2021
Messages
6
Likes
16
Location
Barcelona
Version 0.2.0 released: https://github.com/xerpi/fakemote/releases

Version 0.2.0 changes:
  • Fix dynamic extension switching
  • Add Classic controller extension support
  • Make adding and changing input mapping configuration much easier (still requires recompiling)
  • DS3: add two default input mappings: one simulating a Nunchuk, another one simulating a Classic controller. Press R3 to toggle between them dynamically
  • DS4: add two default input mappings: one simulating a Nunchuk, another one simulating a Classic controller. Press R3 to toggle between them dynamically
Version 0.1.1 changes:
  • Fix when to send HCI Number of Completed Packets event: they were sent too often, causing high CPU usage.
 

xerpi

.
Joined
Sep 13, 2021
Messages
6
Likes
16
Location
Barcelona
Version 0.3.0
  • Fix random button presses when switching extensions
  • Support sensor bar bottom position
Version 0.3.1
  • Fix Wiimote crypto: this fixes broken/random buttons and input when simulating Nunchuk/Classic controller extensions
  • More improvements to dynamic extension swapping
Version 0.4.0
Added IR pointer emulation through right analog stick:
  • Three IR pointer emulation modes: direct (touchpad, only for DS4), analog axis relative (move the pointer with the right analog) and analog axis absolute (the pointer is moved proportionally to the right analog starting from the center). Press R1+R3 to switch between them
Changed button combo to switch extension (Nunchuk<->Classic Controller) to L1+L3
 
Joined
Aug 13, 2020
Messages
5
Likes
5
This is really neat, thanks! Took me a while to (re-)learn how to use d2x cIOS Installer to get this set up. Maybe this will help others: cIOS, cIOS base, and cIOS slot all have to be set on the initial selection screen. "cIOS base" and "cIOS slot" should be set as directed above. "cIOS" must correspond to the directory into which you placed FAKEMOTE.app. Base must also be set to the same value inside ciosmaps.xml. I recommend you configure only games to use Fakemote (and not the loaders themselves, etc.) until you're confident you have it working to your satisfaction.

I find that the combination of a DualShock 4 controller and fakemote (even in this beta stage) are already a significant improvement over a wiimote held sideways for 2-D platformers. Tilting and shaking work perfectly in New Super Mario Bros. Wii! The thumbstick works well for pointing the Wiimote cursor, and the touchpad (in that mode) works well enough.

Occasionally fakemote starts out stuck in a state for me where it's registering a constant phantom directional input. But if I jog it by pressing L1+L3 a couple of times, it begins working correctly. Maybe my USB connection is loose?

I didn't know what L3 and R3 were: it turns out they're the "buttons" you actuate by pressing down on the left and right thumbsticks.

With some effort, I was also able to compile Fakemote on my own in order to change the button assignments to be more Nintendo-like. A few things that confused me along the way:
  1. Maybe devkitARM used to be a project in its own right, but today it appears to be merely one particular toolchain of devkitPro.
  2. What's with all this ARM stuff, anyway? Doesn't the Wii have a PowerPC chip in it? Turns out, it has both!
  3. I'm on Linux. I setup the devkitPro pacman package manager from devkitPro's provided Debian package (!), updated, and installed wii-dev with it. Initially, I couldn't figure out where arm-none-eabi-gcc was supposed to come from. Turns out (even though I don't think the docs currently say it anywhere) that you also need to dkp-pacman install default-arm7.
  4. Do not try and use gcc-arm-none-eabi installed with apt… it won't work!
  5. Some recommend against installing more than one package manager on a single system. Doesn't seem to have caused any problems for me so far, but this might be a good use case for a Raspberry Pi booting off a removable SD card, etc.
  6. After all this, my devkitARM directory was in /opt/devkitpro/devkitARM, not /opt/devkitARM. So I had to change DEVKITARM in both of fakemote's Makefiles to reflect that.
  7. I also had to change the path to stripios in those Makefiles to include $DEVKITPRO/tools/bin
 
Last edited:

xerpi

.
Joined
Sep 13, 2021
Messages
6
Likes
16
Location
Barcelona
This is really neat, thanks! Took me a while to (re-)learn how to use d2x cIOS Installer to get this set up. Maybe this will help others: cIOS, cIOS base, and cIOS slot all have to be set on the initial selection screen. "cIOS base" and "cIOS slot" should be set as directed above. "cIOS" must correspond to the directory into which you placed FAKEMOTE.app. Base must also be set to the same value inside ciosmaps.xml. I recommend you configure only games to use Fakemote (and not the loaders themselves, etc.) until you're confident you have it working to your satisfaction.

I find that the combination of a DualShock 4 controller and fakemote (even in this beta stage) are already a significant improvement over a wiimote held sideways for 2-D platformers. Tilting and shaking work perfectly in New Super Mario Bros. Wii! The thumbstick works well for pointing the Wiimote cursor, and the touchpad (in that mode) works well enough.

Occasionally fakemote starts out stuck in a state for me where it's registering a constant phantom directional input. But if I jog it by pressing L1+L3 a couple of times, it begins working correctly. Maybe my USB connection is loose?

I didn't know what L3 and R3 were: it turns out they're the "buttons" you actuate by pressing down on the left and right thumbsticks.

With some effort, I was also able to compile Fakemote on my own in order to change the button assignments to be more Nintendo-like. A few things that confused me along the way:
  1. Maybe devkitARM used to be a project in its own right, but today it appears to be merely one particular toolchain of devkitPro.
  2. What's with all this ARM stuff, anyway? Doesn't the Wii have a PowerPC chip in it? Turns out, it has both!
  3. I'm on Linux. I setup the devkitPro pacman package manager from devkitPro's provided Debian package (!), updated, and installed wii-dev with it. Initially, I couldn't figure out where arm-none-eabi-gcc was supposed to come from. Turns out (even though I don't think the docs currently say it anywhere) that you also need to dkp-pacman install default-arm7.
  4. Do not try and use gcc-arm-none-eabi installed with apt… it won't work!
  5. Some recommend against installing more than one package manager on a single system. Doesn't seem to have caused any problems for me so far, but this might be a good use case for a Raspberry Pi booting off a removable SD card, etc.
  6. After all this, my devkitARM directory was in /opt/devkitpro/devkitARM, not /opt/devkitARM. So I had to change DEVKITARM in both of fakemote's Makefiles to reflect that.
  7. I also had to change the path to stripios in those Makefiles to include $DEVKITPRO/tools/bin
Thank you for the detailed review!
Regarding devkitARM installation location, instead of changing the Makefile you just need to add to the ~/.bashrc:
Code:
source /etc/profile.d/devkit-env.sh
This will also add $DEVKITPRO/tools/bin to $PATH, so stripios will also be found without editing the Makefile.
 
Top