All Projects → XorTroll → emuiibo

XorTroll / emuiibo

Licence: GPL-2.0 License
Virtual amiibo (amiibo emulation) system for Nintendo Switch

Programming Languages

C++
36643 projects - #6 most used programming language
rust
11053 projects
C#
18002 projects

Projects that are alternatives of or similar to emuiibo

Wakxy
Wakxy is a Wakfu packet sniffer (MITM). Written in C++/Qt with Javascript scripting support.
Stars: ✭ 12 (-97.95%)
Mutual labels:  emulation, mitm
flare-emu
No description or website provided.
Stars: ✭ 561 (-3.94%)
Mutual labels:  emulation
nova-horizon-link
Smart Link for Laravel Nova to Horizon Dashboard.
Stars: ✭ 24 (-95.89%)
Mutual labels:  horizon
mitm-python
A simple as possible man in the middle written in python using scapy
Stars: ✭ 6 (-98.97%)
Mutual labels:  mitm
retro-home
Retro Home; your home for retro-gaming 🕹
Stars: ✭ 76 (-86.99%)
Mutual labels:  emulation
gdbstub
An ergonomic and easy-to-integrate implementation of the GDB Remote Serial Protocol in Rust, with full no_std support.
Stars: ✭ 158 (-72.95%)
Mutual labels:  emulation
megado
A SEGA Genesis/Mega Drive emulator in C
Stars: ✭ 16 (-97.26%)
Mutual labels:  emulation
Raven-Storm
Raven-Storm is a powerful DDoS toolkit for penetration tests, including attacks for several protocols written in python. Takedown many connections using several exotic and classic protocols.
Stars: ✭ 235 (-59.76%)
Mutual labels:  mitm
khedgb
Experiments in Game Boy emulation
Stars: ✭ 15 (-97.43%)
Mutual labels:  emulation
retro-computing
🤓🕹💾 This hobby project contains software implementations of old microprocessors and complete computer systems. I'm very interested in retrocomputing and this is how I learn about the inner workings of these old, classic and amazing computers and game consoles.
Stars: ✭ 15 (-97.43%)
Mutual labels:  emulation
MockDataStoreService
Emulation of Roblox's DataStoreService for seamless offline development & testing
Stars: ✭ 39 (-93.32%)
Mutual labels:  emulation
mupen64plus-input-sdl
Input plugin for Mupen64Plus v2.0 project using SDL. This is derived from the original Mupen64 blight_input plugin.
Stars: ✭ 36 (-93.84%)
Mutual labels:  emulation
chimera
A web interface for managing Steam remotely
Stars: ✭ 113 (-80.65%)
Mutual labels:  emulation
blessed-xterm
XTerm Widget for Blessed Curses Environment
Stars: ✭ 37 (-93.66%)
Mutual labels:  emulation
Emuloader
Emuloader is an application that allows easy management of game backups locally or on the cloud and one-click installs of emulator enivronments
Stars: ✭ 55 (-90.58%)
Mutual labels:  emulation
mupen64plus-rsp-cxd4
Exemplary MSP communications simulator using a normalized VU.
Stars: ✭ 26 (-95.55%)
Mutual labels:  emulation
FEX
A fast usermode x86 and x86-64 emulator for Arm64
Stars: ✭ 650 (+11.3%)
Mutual labels:  emulation
FCEUX-Lua-Script-Collection
Lua scripts for FCEUX (an NES emulator). Multiple games including River City Ransom, Battle Kid
Stars: ✭ 20 (-96.58%)
Mutual labels:  emulation
Kotlin-Gameboy-Emulator
A GameBoy emulator written in Kotlin
Stars: ✭ 12 (-97.95%)
Mutual labels:  emulation
iyov
Web proxy for http(s) for developers to analyze data between client and servers based on workerman, especailly for app developers.
Stars: ✭ 27 (-95.38%)
Mutual labels:  mitm

Logo

emuiibo

Virtual amiibo (amiibo emulation) system for Nintendo Switch

Table of contents

Usage

Build or download the latest release of emuiibo and extract the contents of 'SdOut' directory (inside 'emuiibo-v*.zip') in the root of your SD card.

emuiibo comes bundled with a Tesla overlay to control it quite easily.

For more detailed information of how to use emuiibo, check the usage wiki.

SD layout

  • Emuiibo's directory is sd:/emuiibo.

  • Virtual amiibos go inside sd:/emuiibo/amiibo. For instance, an amiibo named MyMario would be sd:/emuiibo/amiibo/MyMario/<amiibo content>.

  • However, categories are supported by placing amiibos inside sub-directories (only inside a directory, like 3DS menu categories inside categories are not supported) - for instance: sd:/emuiibo/amiibo/SSBU/Yoshi would be a Yoshi amiibo inside SSBU category.

  • A virtual amiibo is detected by emuiibo based on two aspects: a amiibo.json and a amiibo.flag file must exist inside the virtual amiibo's folder mentioned above. If you would like to disable a virtual amiibo from being recognised by emuiibo, just remove the flag file, and create it again to enable it.

  • Every time the console is booted, emuiibo saves all the miis inside the console to the SD card. Format is sd:/emuiibo/miis/<index> - <name>/mii-charinfo.bin.

Controlling emuiibo

  • Emulation status (on/off): when emuiibo's emulation status is on, it means that any game trying to access/read amiibos will be intercepted by emuiibo. When it's off, it means that amiibo services will work normally, and nothing will be intercepted. This is basically a toggle to globally disable or enable amiibo emulation.

  • Active virtual amiibo: it's the amiibo which will be sent to the games which try to scan amiibos, if emulation is on. Via tools such as the overlay, one can change the active virtual amiibo.

  • Virtual amiibo status (connected/disconnected): when the active virtual amiibo is connected, it means that the amiibo is always "placed", as if you were holding a real amiibo on the NFC point and never moving it - the game always detects it. When it is disconnected, it means that you "removed" it, as if you just removed the amiibo from the NFC point. Some games might ask you to remove the amiibo after saving data, so you must disconnect the virtual amiibo to "simulate" that removal. This is a new feature in v0.5, which fixed errors, since emuiibo tried to handle this automatically in previous versions, causing some games to fail.

All this aspects can be seen/controlled via the overlay.

Virtual amiibo creation

Emuiibo no longer accepts raw BIN dumps to emulate amiibos. Instead, you can use emutool PC tool in order to generate virtual amiibos.

Screenshot

For developers

emuiibo hosts a custom service, also named emuiibo, which can be used to control amiibo emulation by IPC commands.

The overlay's code can be a good example to see how to control emuiibo from IPC and C++.

Raw dumps and encryption

When using raw dumps, emuiibo doesn't save everything they have onto the new format, since some bits are encrypted. This is, for instance, why 20-heart Wolf Link amiibo dumps won't work with emuiibo, since the amiibo's app-area, where the console/game saves amiibo savedata, is an encrypted field, and it contains the information BOTW needs in order to recognize the feature.

You can manually extract it, using amiitool. You'll need to find the retail amiibo key to use it.

Running the following will decrypt the raw dump:

amiitool -d -k <key-file-bin> -i <amiibo-raw-dump-bin> -o <out-decrypted-bin>

You'll have the decrypted app-area section at offset 0xDC on the decrypted dump, of length 0xD8. By saving that as <game-access-id>.bin inside the /areas folder of a virtual amiibo being used by emuiibo, you can actually import the dump's savedata, which would allow for such things to work. Check below for a list of per-game access IDs.

Amiibo format

Amiibos are, as stated above, directories with an amiibo.json and an amiibo.flag file. The flag is mainly there in case people would like to disable an amiibo and then re-enable it later.

The JSON file contains all the aspects and data an amiibo needs to provide to games, except a few aspects (per-game savedata, protocol and tag type...)

This are the properties an amiibo has:

  • Name: the amiibo's name (max. 40 characters)

  • UUID: it's a unique identifier for the amiibo, composed of 10 bytes. If the "uuid" field is not present in the JSON, emuiibo will randomize the UUID everytime amiibo data is sent to a game. This has potential benefits in certain games, like in BOTW, where amiibos can only be used once per day, but with randomized UUIDs this can be bypassed, and one can get infinite rewards scanning this amiibo infinite times.

  • Mii: every amiibo has a mii associated with it (it's "owner"). Internally, miis consist on a 88-byte structure known as "charinfo", so emuiibo stores this data in a file (typically mii-charinfo.bin). For new amiibos, emuiibo uses the console's services to generate a random mii, but for those who would like to use a mii from their console, emuiibo dumps in miis directory the console's miis, so it's just a matter of copying and pasting/replacing charinfo bin files. NOTE: emuiibo contains the charinfo file's name in the JSON (mii_charinfo_file), so if the file ever gets renamed, don't forget to rename it in the JSON too, or emuiibo will generate a random mii for the file name in the JSON.

  • First and last write dates: these are (as if it wasn't obvious) the first and last time the amiibo was written/modified. When a virtual amiibo is created with emutool, the current date is assigned to both dates, and when the amiibo is modified in console, emuiibo updates the last write date.

  • Write counter: this is a number which is increased everytime the amiibo is modified (and emuiibo does so, imitating Nintendo), but when the number reaches 65535, it is no longer increased (the number is technically a 16-bit number)

  • Version: this value technically represents the version of Nintendo's amiibo library (NFP), so emuiibo just defaults it to 0.

Areas

Areas (application areas, technically) are per-game amiibo savedata. Technically, real amiibos can only save data for a single game, but emuiibo allows as many games as you want (since savedata is stored as files). This savedata is quite small, and tends to be 216 bytes or smaller.

emuiibo saves this data inside bin files at areas directory inside the amiibo's directory, and the bin file's name is the game's area access ID in hex format.

An access ID is a unique ID/number each game has for amiibo savedata, used to check if the game actually has savedata in an amiibo. Here's a list of games and their access IDs:

Per-game access IDs

A list is maintained at Switchbrew.

License exemption

  • The Ryujinx project/team is exempt from GPLv2 licensing, and may make use of emuiibo's code licensing it under their current license.

Credits

  • Everyone who contributed to the original nfp-mitm project (forks): Subv, ogniK, averne, spx01, SciresM

  • libstratosphere project and libraries

  • AmiiboAPI web API, which is used by emutool to get a proper, full amiibo list, in order to generate virtual amiibos.

  • 3DBrew for their detailed documentation of amiibos, even though some aspects are different on the Switch.

  • LoOkYe for writing emuiibo's wiki and helping with support.

  • AD2076 and AmonRaNet for helping with the tesla overlay.

  • AmonRaNet for all the work he put into the overlay.

  • AmonRaNet, Impeeza, amazingfate and qazrfv1234 for providing/helping with default translations.

  • Thog / Ryujinx devs for reversing mii services and various of its types.

  • Citra devs for several amiibo formats used in 3DS systems.

  • Manlibear for helping with improvements and development of emutool.

  • All the testers and supporters from my Discord server who were essential for making this project progress and become what it is now :)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].