A decompilation of Pikmin 2 (USA) brought to you by fans of the series.
Go to file
2023-10-17 20:19:53 -04:00
.github/workflows Link EXIBios.c and update build actions 2023-09-27 13:01:09 +10:00
.vscode Link mtx.c, mtx44.c, mtxvec.c, CircleBuffer.c 2023-10-15 20:38:15 +11:00
asm prune assembly and link JPAExTexShape.cpp 2023-10-17 19:34:11 -04:00
docs update object-particle.cpp 2023-10-17 20:19:53 -04:00
include update object-particle.cpp 2023-10-17 20:19:53 -04:00
sha1 Initial commit 2021-09-27 21:57:49 +01:00
src update object-particle.cpp 2023-10-17 20:19:53 -04:00
tools prune assembly and link JPAExTexShape.cpp 2023-10-17 19:34:11 -04:00
.clang-format Misc. tweaks 2022-10-26 01:12:41 +01:00
.gitattributes Create .gitattributes 2022-01-27 22:30:48 -05:00
.gitignore Generate objdiff.json 2023-09-25 20:20:26 -04:00
aoi.exe Revert aoi changes (for now) 2023-09-15 14:55:26 +10:00
asmdiff.sh ninja OK 2023-01-31 01:25:12 -05:00
configure.py prune assembly and link JPAExTexShape.cpp 2023-10-17 19:34:11 -04:00
genasm.sh Update genasm.sh with --no-strip and some smarts. 2022-07-03 17:28:06 -04:00
genasmNoStrip.sh JPATexture, gameIconTexture, and random progress! 2021-12-05 19:22:31 -05:00
include_link.mk JAudio2 -> JAudio 2023-03-05 18:26:54 +11:00
ldscript.lcf purge nonexistent files from lcf 2023-03-10 20:17:50 -05:00
LICENSE.MD Rename LICENSE to LICENSE.MD 2022-01-21 21:35:01 -05:00
linker-map.txt recreated source filesystem 2021-09-29 17:30:58 -04:00
Makefile Use patched 1.2.5n, delete frank/franklite 2023-07-15 10:39:28 -04:00
obj_files.mk asm cleanup 2023-02-01 23:20:03 -05:00
README.MD Update README.MD 2023-10-11 21:03:02 -04:00

Pikmin 2 Build Status Code Progress Data Progress

A decompilation of Pikmin 2.

This repository builds the following DOLs:

90d328bf8f190c90472e8c19e7e53c6ad0fe0d1a  build/pikmin2.usa/main.dol
3730939092688902af4866be66d4a8404ae752c7  build/pikmin2.usa.demo/main.dol

Note


The ROM this repository builds can be shifted. You are able to add and remove code as you see fit, for modding or research purposes.

Building

Required Tools

Instructions

  • WINDOWS ONLY STEP:

    • Launch msys2 (provided by devkitPro) and run the following command:
    pacman -S msys2-keyring
    
  1. Clone the repo using git clone https://github.com/projectPiki/pikmin2/

  2. Download GC_WII_COMPILERS.zip and extract the contents of the GC folder to tools/mwcc_compiler/. For example, your directory structure should look like pikmin2/tools/mwcc_compiler/2.6/ (along with the other versions).

  3. Run make -j in a command prompt or terminal.

    • -j Allows make to use multiple threads, speeding up the process.
    • If just -j gives errors on your setup, try specifying a set number of threads, e.g. make -j 4.
  • OPTIONAL STEPS:

    • Obtain a clean DOL of Pikmin 2 USA 1.0 and place it in the base working directory and rename it to baserom.dol.
    • To generate a linker map (takes a considerable amount of time), run make MAPGENFLAG=1 -j.
    • The project uses clang-format for a consistent style. Download the correct version and place in the main repo directory (e.g. pikmin2/clang-format.exe).
  • See this video for a walkthrough of the steps on Windows (thanks Altafen for making this!).

Decompilation workflow

  • The project is compatible with objdiff, which is highly recommended for local decompilation testing. Objdiff can be built from source, or the latest stable build obtained from GitHub actions (recommended).

  • To obtain the latest stable build:

    1. Navigate to the Actions tab of the objdiff repo.
    2. Select the latest main workflow.
    3. Scroll to the bottom of the page and download the stable release for your platform (Mac, Linux, Windows).
    4. Extract contents of .zip to obtain an executable version.
  • To set up objdiff for this project:

    1. Run objdiff.exe.
    2. Set:
      • Build config: None.
      • Select project dir: /path/to/cloned/pikmin2
      • Select target build dir: /path/to/cloned/pikmin2/build/pikmin2.usa/asm
      • Select base build dir: /path/to/cloned/pikmin2/build/pikmin2.usa/src
        • NB: you may have to specify a custom make path if the desired make version is not the default. On Windows, this is likely: /path/to/devkitPro/msys2/usr/bin/make.exe
    3. Select desired object file to diff (likely from pikmin2/build/pikmin2.usa/asm/LIBRARY/OBJECTFILE.o).
    4. Decomp it!

Generating Context for decomp.me Scratches

(NB: The generator requires Python 3 to run)

  • decomp.me is an online decompilation sharing hub, allowing 'scratches' of functions to be generated and collaborated on.
  • Stand-alone decompilation packages and tools such as decomp.me require information on the functions and structures of the project in order to parse extracted blocks correctly. The easiest way to do this is to pass the tool just the necessary 'context' for the file, i.e. a set of all the headers used by the file that's being worked on.
  • A recursive context processing script is included in the repo (tools/decompctx.py), which generates a ctx.c file in the root directory.
    • The contents of this can then be copied and pasted into the 'Context' section of a decomp.me scratch or similar.
  • To use, call the generator via the terminal/command line from the root directory (replacing DIRECTORY and FILE as required): python3 tools/decompctx.py src/DIRECTORY/FILE.cpp
  • Credit to encounter and the Metroid Prime decomp project for the script!