This document is meant to assist developers interested in learning about and contributing to the Slippi codebase.
What this document is:
- An overview of the various components that make up the Slippi Project.
- A collection of resources and tools.
What this document is not :
- An in-depth programming tutorial.
The Slippi project is comprised of a number of different applications, each with their own purpose. Below is an overview of each of these applications function, and their relevant technologies.
Ishiiruka - A modified version of the Dolphin emulator. This project is responsible for handling things like: communication with the matchmaking server, writing Slippi replay files, passing external data to the emulated game, and playing replays.
Languages: C++
Slippi SSBM ASM - A series of ASM mods that are applied to Melee in order make Slippi work.
Languages: PPC Assembly
Slippi Launcher - A desktop application that acts as a hub for Slippi. It handles downloading/updating Dolphin, playing back replays, watching Wii mirrors, viewing replay stats, and more.
Languages: JavaScript
Frameworks: Electron, React
slippi-js - A JavaScript library that is used to parse .slp files, and allows for the calculation of game statistics.
Languages: Typescript
Slippi Nintendont - A modified version of the popular Wii Homebrew app that supports Slippi Recording/Mirroring. It also has toggles for many common codes used for Melee tournaments.
Languages: C
The user launches Ishiiruka and selects an .iso of Melee to emulate. Upon lauching the emulation of Melee, Ishiiruka injects the modifications made by Slippi SSBM ASM . As the user interacts with the game, information is exchanged between Ishiiruka and the Slippi SSBM ASM code. As a user begins an online match, Ishiiruka starts a log of in-game state reported by Slippi SSBM ASM. This log is ultimately formatted and written to a .slp file, according to the Slippi replay file spec. These files are then viewable from the Slippi Launcher . From the launcher, a user may choose to launch the replay, in which case Ishiiruka is launched in a replay mode and plays back a file based on a json file. A user may also choose to view details or statistics about a previously played match, in order to do so, the desktop app leverages the slippi-js library.
"Where is the rollback code located?"
Rollback is accomplished by work done between the Slippi SSBM ASM code and the Ishiiruka code.
"How is data moved between the game (assembly) and the emulator?"
Via EXI communication. An example of such is demonstrated in this video by Fizzi.
"Where is the matchmaking code?"
The source code for the matchmaking server is in a private repository and is not currently planned to be open sourced.
- Fizzi Teaches Basic Assembly and Melee Modding (video) - Recorded by the creator of Slippi, this video teaches some basic assembly and demonstrates EXI communication.
- Intro to Wii Game Modding by InternetExplorer (video) - Recorded by Dan Salvato - A playlist of videos related to modding Wii games. An excellent resource for debugging with Dolphin.
- Assembler Tutorial - A wii modding specific guide to PPC, and its instructions.
- PowerPC Instruction Set - Indepth documentation about PowerPC instructions and their behavior.
- PowerPC Instruction Set Reference Card - An overview of various PowerPC instructions and their behavior.
- SSBM Data Sheet - A Google Sheet containing information about Melee's memory addresses.
- MKWii's Go From Noob to Veteran ASM Coder Guide Repo - A bunch of useful guides to learning ASM and related concepts, not necessarily PPC or Melee specific.
- VSCode PPC ASM Extension - A useful extension for syntax highlighting in VSCode
- HxD - A free Hex editor. Hex editors in general are useful for looking through memory dumps.
- SpeedCrunch - A calculator for programmers. It allows for quick conversions and operations between hex, binary, octal, and decimal.
- Ghidra - A tool originally created by the NSA - it's used for reverse engineering programs. Particularly useful, is its ability to generate C code from assembly.