Code Monkey home page Code Monkey logo

sbk-decomp's Introduction

Snowboard Kids Decompilation Project

This project attempts to create exact decompilations of the Snowboard Kids games released on the Nintendo 64: Snowboard Kids and its sequel, Snowboard Kids 2. For me, this is an attempt to learn more about these games, the decompilation process, and (eventually) to experiment with porting features and content between these two games.

Project Goals

  1. The goal of this decompilation project is to have (almost) all code in C as clear and concise as possible, and all assets such as textures, models, sounds and music sequences separated out into distinct files. This is in service of allowing anyone to modify either of the two games and build a fully functional N64 ROM file that includes their changes. If no changes are made to the files, the resulting ROM files shall completely match the original ROM file it was decompiled from.
  2. The goal of managing a decompilation of both Snowboard Kids 1 and Snowboard Kids 2 together is to help encourage communication around and consistency in the code of the two projects.

This project still is in its earliest stages and does not (yet) allow re-creating a ROM file for either of these games.

About Snowboard Kids

Snowboard Kids and Snowboard Kids 2 are snowboarding racers released for the Nintendo 64 and developed by Racdym. An enhanced port of the original Snowboard Kids, known as Snowboard Kids Plus, was also released for Sony's Playstation exclusively in Japan. Snowboard Kids Plus included a new title screen, updated menus, additional characters, and animated video sequences.

Here is a list of the various releases of Snowboard Kids and Snowboard Kids 2:

  • Snowboard Kids [N64, NTSC-J]: December 12, 1997
  • Snowboard Kids [N64, NTSC-U]: March 13, 1998
  • Snowboard Kids [N64, PAL]: March 16, 1998
  • Snowboard Kids Plus [PS1, NTSC-J]: January 21, 1999
  • Snowboard Kids 2 [N64, NTSC-J]: February 19, 1999
  • Snowboard Kids 2 [N64, NTSC-U]: March 1, 1999
  • Snowboard Kids 2 [N64, PAL]: April 30, 1999

Project structure

  • /tools/ ← tools within this directory are automatically downloaded
    • m2c/
    • splat/
    • ultralib/
  • /sbk1/ ← Snowboard Kids 1 decompilation
    • decomp/ ← generated by this project
      • asm/ decompiled ASM code
      • assets/ binary assets (everything but code)
      • src/ C code converted from assembly
    • calltree.sbk1.txt
    • sbk1.us.z64 ← You must provide your own copy of this ROM file
    • snowboardkids.yaml ROM data locations
    • symbol_addrs.txt
  • /sbk2/ ← Snowboard Kids 2 decompilation
    • decomp/ ← generated by this project
      • asm/ ← decompiled ASM code
      • assets/ ← binary assets (everything but code)
      • src/ ← C code converted from assembly
    • sbk2.us.z64 ← You must provide your own copy of this ROM file
    • snowboardkids2.yaml ROM data locations
  • Makefile

Project setup

This project is being developed in Linux and it makes extensive use of Linux command line tools. As such, Linux is recommended, WSL may work as well but is not tested or supported by me at this time.

Managing dependencies

As this project makes use of splat and python, you will need to prepare a virtual environment to handle the python dependencies you will be installing.

To create and activate your virtual environment:

python3 -m venv .venv
source .venv/bin/activate

After creating your virtual environment for this project you will only need to run the command source .venv/bin/activate when opening a new terminal window.

Next, run make check-requirements. This will validate that your environment has git, python3, and pip3, that your virtual environment is active, and validate (or install if they are missing) splat's python dependencies.

Managing ROM files

In order to decompile you will need to provide a NTSC-U ROM file of one or both of the following games. Place your ROM files into the project's root directory, and ensure that the filenames and sha1sums expected by this project match with the files you are providing:

  • Snowboard Kids 1 (NTSC-U) rom file sbk1.us.z64 with sha1sum: 583bacc9046a360df8ea4d536942155247e154c
  • Snowboard Kids 2 (NTSC-U) rom file sbk2.us.z64 with sha1sum: 5ce896fd64276948bc2b8cccd8cd51c25a9f32aa

If your sha1sums do not match, depending on how you've backed up your ROM file you may need to byteswap it. The versions in use by this project are in the big endian format. A tool such as hack64's Rom Swapper can be used to convert from other formats (such as little endian).

Decompiling

With your ROMs in place you are ready to get started.

  • make decomp_all for creating a (work in progress) decompilation of both game's ROMs.
    • make decomp_sbk1 will decompile only Snowboard Kids 1.
    • make decomp_sbk2 will decompile only Snowboard Kids 2.
  • make clean_all will clear all decomp files produced in both projects.

Tools

This decompilation project makes use of the following external tools:

  • splat - extracts sections from ROM file into assembly and binary asset files
  • m2c - assembly to C converter
  • ultralib - a reverse engineering of libultra

sbk-decomp's People

Contributors

awbuchanan7 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.