Share this project

Done

Share this project

Done
A Nintendo 64 to GameCube and Wii Virtual Console controller adapter - the first with accurate analogue stick correction for every game
A Nintendo 64 to GameCube and Wii Virtual Console controller adapter - the first with accurate analogue stick correction for every game
Created by
21 backers pledged £688 to help bring this project to life.

About

N64 - WiiVC Controller Adapter with Full Stick Correction project video thumbnail
Replay with sound
Play with
sound

N64 - WiiVC Controller Adapter with Full Stick Correction

£688

21

What is a prototype?

A prototype is a preliminary model of something. Projects that offer physical products need to show backers documentation of a working prototype. This gallery features photos, videos, and other visual documentation that will give backers a sense of what’s been accomplished so far and what’s left to do. Though the development process can vary for each project, these are the stages we typically see:

Proof of Concept

Explorations that test ideas and functionality.

Functional Prototype

Demonstrates the functionality of the final product, but looks different.

Appearance Prototype

Looks like the final product, but is not functional.

Design Prototype

Appearance and function match the final product, but is made with different manufacturing methods.

Production Prototype

Appearance, function, and manufacturing methods match the final product.

467d6ade47a5afc6467012c43f0bc078 original.png?ixlib=rb 1.1

Prototype Gallery

These photos and videos provide a detailed look at this project’s development.

No More Left!? How to still get one

Sorry, these sold out faster than I expected! Also, 20 is a good limit for now since I am making these all by hand. If you missed out and still want to buy one, please let me know by registering your interest here:


If enough people still want one, I will very likely make more! You only need to enter a name (or nickname), however if you give your email, I will add you to a list so I can personally email you to let you know as soon as more become available to buy!

Please note that doing this gives you no obligation to buy one... it is purely so see whether it is worth me looking into making more.

Thanks!


Website

I am currently in the process of setting up a website about the adapter. When finished, it will contain details about the adapter, including the information already on this page, updates to the project, as well as detailed instructions on how to use the adapter:



Overview

If you want to know the basics, without understanding how it works... here is the overview of the adapter. This adapter will allow you to play Nintendo 64 Wii Virtual Console releases on the Wii, but with the original Nintendo 64 controller that was intended. This makes playing on the Wii Virtual Console feel near-identical to playing on the Nintendo 64. Here are some of the features of this adapter:

  • The ONLY adapter with near-perfect joystick mapping for every N64 Wii VC release
  • No input lag compared to a Nintendo GameCube controller
  • Only 7 mappings cover ALL Wii VC releases - Easy to use!
  • Additional generic mapping for GameCube games - with toggled C-button functionality (C-stick or X,Y,Z)
  • Compatible with the Rumble Pak - Rumbles whenever a GameCube controller otherwise would
  • Uses a CPLD, not a microcontroller - Very high reliability
  • Built-in N64 input display feature - works with NintendoSpy software (you'll likely need a separate serial to usb adapter)

The reason this is not the case for other adapters is that the joystick is indirectly mapped by the Wii via a complex function mapping in both x and y. Since other adapters crudely "fix" the problem by simply adjusting the joystick range, and linearly scaling to adjust sensitivity... many games are going to feel very different, and games where precise joystick positioning, and aiming is required are going to be much more difficult to play. My adapter is different, as it knows value-for-value the mapping performed by the Wii Virtual Console, allowing an inverse mapping to be performed, prior to passing the x and y values through to the Wii. This makes playing on the Wii Virtual Console feel exactly like the real thing!

The Video Demonstration

The video demonstrates the adapter being used for 3 different games on the Wii Virtual Console, all of which use different analogue stick mappings: The Legend of Zelda - Ocarina of Time, The Legend of Zelda - Majora's Mask, and Super Mario 64. Many different joystick positions are tested throughout the video, and two different button mappings are used, one for SM64, and one for OOT and MM.

The video shows the initial N64 analogue stick values, and an input display of the controller (using NintendoSpy). With the use of the OOT practice ROM, the final values in-game are able to be shown also for Ocarina of Time, allowing a comparison between the desired values, and the final values which the adapter manages to map them to. 

Since ESS position is fairly precise, and angle changing is made much more difficult by the Wii VC remapping, plenty of HESSes and angle-changes are shown in the video for both Zelda titles, as well as aiming with the hookshot.

Background

The Wii Virtual Console was a brilliant addition to the Nintendo Wii! Being able to play classics, with near-perfect emulation, zero input-lag, and no video lag all on one system was one of Nintendo's greatest ideas. Many popular speedrunners even play on the Wii VC now, and many runners used to playing the Nintendo 64 version, experience little or no trouble switching over to the Wii VC, due to the excellent quality of the emulation.

However... there is a catch! The Wii Virtual Console does not allow you to play using the controllers from the original games. This means you MUST play using either a Nintendo GameCube controller, Wii Remote, or the Wii Classic Controller. While this seems like not a huge problem for many titles, such as NES and SNES releases... it is a surprising pain for Nintendo 64 releases. A couple of minor differences when using a GameCube controller are:

  • Using either X, Y and Z or the C-stick, rather than the 4 C-buttons (depends on the game)
  • Pushing the analogue triggers all the way down for a digital Z or R press to trigger

For this reason, others have already built Nintendo 64 controller to GameCube / Wii adapters, which allow you to use the original N64 controller to play Wii Virtual Console titles. So what's wrong with those? What makes my adapter better than theirs? Well, it's all to do with the analogue stick, and the way in which Nintendo decided to solve the problem of having to use a GameCube joystick, rather than a Nintendo 64 one.

What's wrong with the analogue stick?

In order to make playing with a Nintendo GameCube controller work with every Nintendo 64 release, Nintendo decided to implement a mapping function for the analogue stick, in order to allow the full range of motion that you would get with a Nintendo 64 controller. This means there is a large imposed deadzone in the middle of the joystick's range, and the full range of the joystick is squashed down into a smaller set of values. This makes holding precise angles and aiming in certain games either difficult, or near-impossible.

One other big problem is that the shape of each joystick's range is different... with the diagonals of a Nintendo 64 joystick being further than that of a GameCube controller. Nintendo's solution to this, was to perform a 2-dimensional function mapping on the GameCube controller's inputs based on both x and y. This means that even is you hold x still, and only move the stick in the y direction... both the x and y values will change.

This as you can imagine, is a huge headache when trying to create an adapter for a Nintendo 64 controller... as passing the N64 stick values directly through would not only cause the range to be restricted... the diagonals will be completely wrong! This means both axes have to be mapped to a pair of x, y values together, as they can't be viewed independently.

To complicate matters further... Nintendo didn't use the same joystick mapping for every Wii Virtual Console release. While many games share one mapping, I've come across a total of 3 different mappings across all N64 Wii VC titles, plus another mapping for Ocarina of Time + Master Quest for the Nintendo GameCube! This means that while only one inverse mapping function needs to be able to be performed in real-time... 4 full 2-dimensional mapping functions need to be stored in the adapter in order for it to work with every game.

I've plotted each of the four analogue stick mappings done by the Wii Virtual Console, and the Ocarina of Time / Master Quest disk... these can be seen below:

Just for reference... the ideal mapping would look like this:

The Solution

Rather than approximating each mapping function, I decided I wanted certainty that the mapping would be as close as is possible to the original N64 value, with no anomalous values, or strange edge-cases. For this reason, I methodically tested all 65536 different GameCube joystick values in an emulator, and read out the Nintendo 64 joystick values they got mapped to. This was repeated for all games that appeared to use a different mapping function. I then wrote a program to create an inverse mapping from these values, meaning I would know exactly what GameCube values are required to produce each Nintendo 64 value.

Unfortunately, since the range is shrunk by the forward mapping, this means many Nintendo 64 values are not possible, leaving some holes that need to be filled-in with the closest approximate values. This was done differently depending on the shape of the inverse mapping, and whereabouts the holes were. For example, this would mean that if a value of (25, 10) is not possible on the Wii Virtual Console... inputting that exact joystick value would be remapped to a nearby value, such as (24, 10). The utmost care was taken to ensure that the holes were filled in with the most appropriate values, and thorough testing has not seen any problems so far.

I've plotted the final (in-game) N64 X values against the controller X and Y values for all 4 mappings when using the adapter... the area inside real N64 stick range (roughly -80 to +80) looks remarkably linear! No deadzone, Y doesn't vary with X, and they look very close to the ideal (one-to-one) mapping. On the left is the original Wii VC (or OOT / MQ disk) mapping (without the adapter), and on the right is the same mapping, but when using the adapter:

Here are the same plots, but showing only values inside the possible N64 stick range for clarity:

The Prototype

The prototype is very easy to use. Simply select the mapping that is appropriate for the game you want to play. The appropriate joystick and button mappings are then automatically chosen by the adapter. The appropriate mapping is chosen by holding down a button combination (L+Z+R+all C-buttons at once) and pressing up or down on the D-pad. This cycles through the 8 different overall mappings, including the 5 different joystick mappings shown below:

  • General Mapping (useful for non-VC games, such as most GC games)
  • Super Mario 64 + Mario Kart 64 (Wii VC)
  • Ocarina of Time (Wii VC)
  • All other Wii VC titles (including Majora's Mask)
  • Ocarina of Time and Master Quest (GameCube)

The general mapping is simply a linear mapping in x and y, but with a step around the origin (0,0) to account for the deadzone required when playing with a GameCube controller. This is useful for playing non-VC games with a Nintendo 64 controller which don't have any sort of mapping function built-in. The button mapping is special in this case, as the L-button will toggle whether the C-buttons are mapped to the C-stick, or the X,Y and Z buttons. This allows all the functionality of a GameCube controller with a Nintendo 64 controller... although, it does mean digitising the C-stick and triggers. To account for this, when the L-button is held, the triggers act as a smaller press, rather than a full press. This allows you to move and spray in Super Mario Sunshine for example.

The selected overall joystick mapping is displayed using a RGB LED in the middle of the device. The colour of the LED determines the mapping which is chosen.

The prototype uses a CPLD, rather than a microcontroller. This allows a large number of operations to be performed in parallel, making it ideal for communicating with both the Nintendo 64 controller, Nintendo Wii / GameCube, and performing the appropriate button and joystick mappings exactly when required. It is also extremely reliable for both long-term and short-term use.

The Nintendo 64 controller is polled for information as late as possible, and only after a request is received from the Nintendo GameCube. This means there is practically zero input lag when compared with a Nintendo GameCube controller.

If you are interested in the specifics, any lag will be very consistently in the order of 0.1ms... or rougly 1/160th of a single input frame at 60Hz! For comparison... other adapters which are microcontroller-based, have varying input lag depending on poll rate. The raphnet adapter polls every 5ms by default... meaning it can have up to 5ms of input lag... which is just under 1/3rd of an input frame at 60Hz, or around 50 times as much lag!

The board is a small 2-layer PCB, custom designed by me, and manufactured in China by a reputable manufacturer.

The mappings are stored on a serial flash chip on the top of the board.

The case is 3D printed, and is made of ABS plastic.

Here is the prototype labelled. Ignore the wires sticking out the side - these are purely for programming and testing the prototype, and will not be in the one you receive:

Why Crowdfund This?

In order for the price of manufacture to be reasonable, I would need to buy the parts in bulk. For this reason, I don't want to begin ordering more parts until I'm know there will be enough interest in this for it to be worthwhile. At £25 sale price (the same ballpark as other adapters), I would be looking to make at least 20 units initially.

I was honestly amazed that nobody has come up with this before me, which is why I resorted to making one for myself. Having used it plenty, and finding no problems, or discernible difference to playing on the Nintendo 64... I decided I would at least see if it is something others would be interested in.

How Do I Get One?

In order to receive an adapter, you must donate a minimum of £25, and select the perk "One Version 1.0 Adapter". You will only receive an adapter if and when the campaign reaches it's goal, otherwise you will be automatically refunded. Donating less than this means you will not receive anything. If you have custom requirements for your adapter, such as different mappings, colours, button combinations, etc... please message me first, and I'll see what I can do. Please note, than I cannot order the parts until I am sure the campaign will reach it's goal... for this reason, it may take a month or two before you receive your adapter.

Questions

If you have any questions, or queries... please feel free to message me!

Please note - Wii, GameCube and Nintendo 64 are registered trademarks of Nintendo. All other trademarks are the propriety of their respective owner(s). I am in no way affiliated with Nintendo.

Risks and challenges

While it was a pain to discover that not all games used the same mapping... I'll admit it was a huge relief to find that the vast majority of Wii VC releases all use the same mapping. This meant that it didn't have to take months to plot each mapping, calculate the inverse, fill the holes appropriately, and then test and verify that the mapping worked on real hardware by reprogramming the flash chip each time.

Each stick mapping was found by running each game in an emulator. This meant that I could write a script to hook into the emulator process, and once found, modify each memory value for the input (GameCube) X and Y coordinates, logging the memory values for the X and Y (N64) coordinates in-game. This had to be done for 65535 values (256 X values by 256 Y values), and a delay had to be inserted in order to allow the game to process the input values, before the in-game values were read. This meant that each mapping took well over an hour to log, and many times the mapping came out with incorrect values (which hadn't updated) due to lag spikes from the emulator.

Once the GC->N64 mappings were logged to a text file, a I wrote a C++ program to read a full mapping into an array, search for every possible N64 X and Y value, and record which GC X and Y values were needed in order to reproduce those N64 values in-game. This allowed me to get the majority of the inverse mapping exactly right... however some in-game values are not possible to reproduce... no-matter what the GC input values are. This poses the problem that the inverse mapping is littered with holes which need to be filled with the closest approximation in-terms of either x,y position, or angle (for edges). Many of the holes occur around the edge, as these values are not possible in normal N64 gameplay anyway... so these values are not as important. Interestingly, this is why the final surface plots (with the adapter) look almost perfect inside the N64 range... but seem to level off slightly around the edges.

Learn about accountability on Kickstarter

Questions about this project? Check out the FAQ

Support

  1. Select this reward

    Pledge £5 or more About $6

    Dual Inputs - Additional GameCube Input

    Warning: DO NOT pledge if you are not one of the 20 people who already pledged and are getting an adapter by selecting the other reward! If you pledge, and are not one of those 20 people, you will NOT receive anything.

    ##########################
    EDIT: It looks like Kickstarter might not allow backers to select multiple rewards for some reason. So instead, I'll see to it that all you have to do to get the dual input upgrade, is increase your pledge amount by £5. You don't have to change your reward option. I'll then check your pledge amount manually at the end of the campaign, and sort out the upgrade options manually. Sorry for the confusion!
    ##########################

    If you are one of the 20 people who pledged enough for an adapter, this reward option will add an additional GameCube controller input to your adapter, as well as the Nintendo 64 controller input. This is useful only if you want to play Wii VC games (or OOT/MM/MQ on the GameCube) using a GameCube controller, but without the awful Wii VC (or OOT/MQ/CE) mapping function.

    Please note - this option will remove the Rumble Pak support from your adapter, and the input display feature! In order to get dual inputs to work, I had to strip the Nintendo 64 controller interface down to it's bare bones... meaning no Rumble Pak feature anymore, and no input display feature.

    The reason this feature costs slightly more is due to the costs of additional hardware, plus additional manufacture time and testing time.

    Less
    Estimated delivery
    0 backers
    £
    Kickstarter is not a store.

    It's a way to bring creative projects to life.

    Learn more about accountability.
  2. Reward no longer available

    Pledge £25 or more About $31

    One Version 1.0 Adapter

    Provided the goal is reached, you will get one fully-functional verion 1.0 adapter, complete in a 3D-printed ABS enclosure.

    Includes:
    • One Version 1.0 Adapter
    Less
    Estimated delivery
    Ships to Only certain countries
    Reward no longer available 20 backers
    £
    Kickstarter is not a store.

    It's a way to bring creative projects to life.

    Learn more about accountability.

Funding period

- (60 days)