ec98ac4c24 Bit more menu identification (#251)
* Squashed commit of the following:

commit 3ab4716110
Author: Fazana <52551480+FazanaJ@users.noreply.github.com>
Date:   Mon May 23 23:11:46 2022 +0100

    Mostly misc labelling, but also weather too (#232)

    * bit more labelling

    * identify some weather stuff

    * Update sound_ids.h

    * yum

    * more random identification

    * last weather stuff for now

    * Update README.md

    * Update README.md

    * Fix non equivalent

* I found the 60fps button

* match func_80052B64

* match racer_attack_handler

* match func_80048C7C

* buncha function declaring

* e

* tweak

* match func_8004DE38

oh man oh man

* Small bit of labelling

* Merge remote-tracking branch 'upstream/master' into the-many-against-the-few

* Update README.md

* Fix monumentally poor bout of misinformation in the readme

we wouldn't want to mislead the readers, would we?

* github please

* Update README.md

* requested changes

kinda funny because I knew this struct existed, and knew it was used for this, but never made the connection lol

* Update objects.c

* match racer_enter_door

A nice easy one after the pure hellscape of the last few days :)

* names

* renames

* match func_8005250C

* heehee

* Update racer.c

* identify some misc asset calls

* identify some surface types

* match func_8005492C

* Delete func_8005492C.s

* match func_80052D7C

* move some enums

* label all existing misc asset calls

granted I know what almost none of them are lmao, buut will make things slightly easier in the long run

* Update README.md

* requested changes

pain

* Update README.md

* just a bit of labelling

* labbel

* more

* Update structs.h

* file select

* file struct

* Update menu.c

* multiplayer box

* texture naming

* realised why there's 3 indices lol

* rounding

* Update menu.c

* identify textures

* pain

* fix non equiv

* Update src/menu.c

Co-authored-by: Ryan Myers <ryan.p.myers@gmail.com>

* Update src/unknown_078050.c

Co-authored-by: Ryan Myers <ryan.p.myers@gmail.com>

* Update src/menu.c

Co-authored-by: Ryan Myers <ryan.p.myers@gmail.com>

* more texture identification

* character select bytes

actually hate this so much

* Update menu.c

* I aged about 50 years doing this

* character select data

* fix conflicts

Co-authored-by: Ryan Myers <ryan.p.myers@gmail.com>
2022-10-04 16:01:27 +01:00
2022-10-04 16:01:27 +01:00
2022-04-02 18:15:49 -04:00
2022-10-04 16:01:27 +01:00
2022-10-02 21:35:54 -04:00
2021-10-27 17:21:17 -04:00
2021-10-24 22:09:53 -04:00
2022-03-10 09:01:18 -05:00
2022-04-10 16:52:42 -04:00
2020-08-04 19:38:58 -05:00
2021-10-27 17:21:17 -04:00
2020-08-24 19:56:30 -05:00
2022-02-13 10:52:06 -05:00

Diddy Kong Racing

This repo contains a work-in-progress decompilation of Diddy Kong Racing for the N64. You will need to have a original copy of the ROM to extract the game's assets.

Currently, only the US 1.0 version of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time.


Dependencies

  • libcapstone-dev
  • libssl-dev
  • gcc, Version 8.0 or higher
  • make, Version 4.2 or higher
  • python3
  • wget

sudo apt install build-essential pkg-config git python3 libssl-dev wget libcapstone-dev

binutils

You are not required to install a binutils package, but it does speed up the initial setup if you do have it installed.

  • Ubuntu/Debian (x86): sudo apt install binutils-mips-linux-gnu

Setup / Building

  1. Install the dependencies
  2. Place the ROM file within the baseroms directory.
    a. The name of the ROM file does not matter, but it must end with one of these extensions: .z64, .v64, .n64, or .rom. It will be detected automatically from an md5 checksum.
    b. If you use a byte-swapped or little-endian ROM, then it will automatically be converted to a big-endian (.z64) ROM file.
  3. Run make in the main directory.
    a. Use the -jN argument to use N number of threads to speed up building. For example, if you have a system with 4 cores / 4 threads, you should do make -j4.

Modding

If you are modifying the code in the repo, then you should add NON_MATCHING=1 to the make command.
Example: make NON_MATCHING=1 -j4

The NON_MATCHING define will include the functions that don't exactly match one-to-one, but should be no different functionality-wise. If you do notice any bugs that occur in a NON_MATCHING build that are not in the vanilla game, then please file an issue describing the bug. It would be helpful if you can track down which function is causing the bug, but that is not required.

Style Guide

The style guide for the project can be found here: https://docs.google.com/document/d/1euQf8nwynGcCZL1MfoMaLs-XRvx3ejjj8fIfykUZ-NQ

If you see variables/functions/structs/etc. that doesn't follow these rules, then file an issue and we'll try to fix them.

Scripts

There are some useful scripts that should be kept in mind when working on this repo.


./extract.sh <version>

This script will extract all the assets from a DKR ROM and place them into /assets/ folder according to the config file within the /extract-ver/ folder. The version parameter should either be us_1.0, us_1.1, eu_1.0, eu_1.1, or jp.

Example: ./extract.sh us_1.0


./diff.sh <function_name>

Compares the assembly output of a function from a built ROM to the base ROM. Useful for decompiling.

Example: ./diff.sh menu_init


./rename.sh <old_name> <new_name>

This script will rename an existing symbol, file name, and/or folder name within the repo with a new one.

Example: ./rename.sh D_A4001000 SP_IMEM


./get_symbol.sh <ram_address>|<symbol>

Given either a RAM address or symbol, returns its (symbol, address) pairing as defined in /build/us_1.0/dkr.map. If specified, the RAM address must be in base 16. The 0x prefix is not required.

Example:

./get_symbol.sh 0xA4001000
0xA4001000 = SP_IMEM

./get_symbol.sh osCicId
0x80000310 = osCicId

./score.sh

Prints out the current completion percentage of the decomp. You do need to have an OK build for this to work properly.

The scoring is split into 2 sections:

  1. Assembly to C Decompilation (Adventure One)
  2. Cleanup and Documentation (Adventure Two)

Show scores for Adventure One & Adventure Two: ./score.sh
Show score for Adventure One only: ./score.sh -a 1
Show score for Adventure Two only: ./score.sh -a 2
Show top 10 files remaining: ./score.sh -t 10

To make progress in Adventure 2, a function must be properly named (must not start with func_) and also include a doxygen comment above it.

For example:

/**
 * Returns 1 if Drumstick is avaliable to use, or 0 if not.
 */
s32 is_drumstick_unlocked(void) {
    return gActiveMagicCodes & 2;
}

As of October 3rd, 2022, this is our current score:

 ======================================================== 
          ADVENTURE ONE (ASM -> C Decompilation)          
 ------------------- 32.49% Complete -------------------- 
               # Decompiled functions: 1283               
               # GLOBAL_ASM remaining: 550                
               # NON_MATCHING functions: 14               
            # NON_EQUIVALENT WIP functions: 99            
 --------------------- Game Status ---------------------- 
        Balloons: 17/47, Keys: 2/4, Trophies: 1/5         
          T.T. Amulets: 1/4, Wizpig Amulets: 1/4          
 -------------------------------------------------------- 
           We are racing the walrus boss Bluey.           
 ======================================================== 
          ADVENTURE TWO (Cleanup & Documentation)         
 -------------------  5.48% Complete -------------------- 
               # Documented functions: 197                
              # Undocumented remaining: 1636              
 --------------------- Game Status ---------------------- 
         Balloons: 3/47, Keys: 0/4, Trophies: 0/5         
          T.T. Amulets: 0/4, Wizpig Amulets: 0/4          
 -------------------------------------------------------- 
 We are collecting the fourth balloon on Timber's Island. 
 ========================================================

TODO list

Major

What should be focused on.

  • Decompiling the non-matching asm files into matching C functions.
  • Documenting variables & functions

Minor

What can be done, but not essential.

  • Figuring out the formats for the assets in the /assets/ folder.
  • Creating tools to modify assets

Future

These features won't be complete anytime soon.

  • Add support for the other 4 versions.
S
Description
No description provided
Readme
30 MiB
Languages
C 63.9%
C++ 31.4%
Assembly 3.2%
Python 1.2%
Makefile 0.2%
Other 0.1%