Project Yasiki
Go to github repo Go to progress page

  • Luigi's Mansion

    Build Status Code Progress Functions Wiki


    This decomp project has been stopped due to lost interest and a drama that pushed it. If you feel like contacting me, just contact me on discord. If I should take down this repo, or anyone gained interest in it, or really just anything you feel like asking, you can just tell me.
    Thanks, moddi out.


    Project Yasiki was a work-in-progress decompilation project of Luigi's Mansion for the Nintendo GameCube.

    The focus is currently laid on the Japanese release (GLMJ01), but configurations exist for all available versions.
    The original creator first focused on the North American release (GLME01), and it's symbols.txt was copied to a backup file.

    Note:

    this will not produce a playable game, if you do not supply it beforehand.

    This repo will get updates, but I have personal stuff to do, and so I/t wont be active all the time.

    Warning

    This game does not ship with symbols, so information is scraped together from RTTI and connected games.
    Not as simple as most projects, but possible.

    Discord / Contact

    For this project specifically:
    Yasiki Parlor: Discord Badge
    For general, other gc/wii purposes:
    GC/Wii Decompilation: Discord Badge OG
    All about modding the game:
    Luigi's Bigger Mansion: Discord Badge MOD

    Index

    Available versions

    Config ID Region Variant Active? Release Date Build Date SDK Rev. SDK Build Apploader Build
    GLMJ01 Japan Release Yes Sep. 14 2001 Aug. 28 2001 37 Jul. 19 2001 Apr. 04 2001
    GLME01 USA Release [No] Nov. 18 2001 Sep. 24 2001 37 Jul. 19 2001 Aug. 9 2001
    GLME01_1 USA Demo No Oct. 2001 Sep. 28 2001 45 Sep. 08 2001 Sep. 08 2001
    GLMP01 Europe Demo No Mar. 2002 Jan. 21 2002 49 Dec. 17 2001 Nov. 30 2001
    GLMP01_1 Europe Release No May 3 2002 Mar. 2002 49 Dec. 17 2001 Nov. 30 2001
    GLMP01_2 Europe Release No May 17 2002 Mar 2002 49 Dec. 17 2001 Nov. 30 2001

    note that the Europe Release Rev. 1 left the DOL identical, only changing the movie rating. furthermore, the USA Release had previously been the decomp target, but now the active one is the Japan Release.

    About this project

    This project uses the Decomp-Toolkit template.

    Progress state

    Rather early. I was trying to fill out the symbols in the Ghidra repository (read further to learn how to connect to the server), but decided to start with matching libraries instead, as the game code uses them, and it is better to go step for step rather than losing the sight of progress.

    Folder structure

    The folders are split by categories in the project's root, where non-category folders are lowercase. As follows:
    ./CategoryName/... ./config/... ./tools/...

    Most modules in a library rely on the modular scheme used originally, such as:
    ./JSystem/System/JKernel/{src|include},
    ./JSystem/System/JSupport/{src|include},
    ./JSystem/JAudio/JAInterface/{src|include},
    ./Project/Kawamoto/{src|include},
    ./Project/Sotoike/{src|include},
    ./Project/Koga/{src|include}, and so on.

    My goal is to stay as original as possible, while still making it possible to work with for the decompiling efforts.

    Documents

    I’ve also included some small private notes in /docs/game/*.txt, which may contain useful information (if needed).

    Misc

    Contributing

    You are welcome to contribute, even pointing out small mistakes/issues counts as contributing!

    The guidelines for contributing have yet to be written, but that hopefully won't stop you.

    Setting up build

    Windows:

    On Windows, it's highly recommended to use native tooling. WSL or msys2 are not required.
    When running under WSL, objdiff is unable to get filesystem notifications for automatic rebuilds.

    macOS:

    After OS upgrades, if macOS complains about Wine Crossover.app being unverified, you can unquarantine it using:

    sudo xattr -rd com.apple.quarantine '/Applications/Wine Crossover.app'
    

    Linux:

    Building

    Diffing

    Once the initial build succeeds, an objdiff.json should exist in the project root.

    Download the latest release from encounter/objdiff.

    Under project settings, set Project directory to the root, aka the file containing the objdiff.json file. The configuration should be loaded automatically, and if not, ensure that the build generated no errors. If it did, resolve these and try again.

    Select an object from the left sidebar to begin diffing. Changes to the project will rebuild automatically: changes to source files, headers, configure.py, splits.txt or symbols.txt.

    Screenshot of Objdiff

    Setting up Ghidra

    Ghidra is a tool that automatically decompiles code. Although Ghidra's output is not accurate enough to be directly copy-pasted into this decompilation project, it can still be helpful for understanding functions and decompiling them faster. You are free to use other decompilation methods, such as IDA, m2c or manually, but ghidra was chosen as the preferred tool in the gamecube/wii decomp scene.

    I've got a shared Ghidra project for LuigisMansion already set up, that I usually update. To get access to this server:

    Then wait for an admin to approve your request. Once you have access, you can set up the Ghidra project like so:

    Now you have Ghidra set up and ready to use.

    For an introduction on how to use Ghidra, you can read this section of the Twilight Princess decompilation's guide.

    Timeline

    Game

    Project

    Detailed progress

    Project Yasiki
    ProjectCode ProjectData ProjectFunc ProjectUnits
    Main App
    MainAppCode MainAppData MainAppFunc MainAppUnit
    JSystem Framework
    JSysCode JSysData JSysFunc JSysUnit
    Dolphin SDK
    SDKCode SDKData SDKFunc SDKUnit
    CodeWarrior Runtime
    CWCode CWDATA CWFunc CWUnit

    Credits

    ~Moddimation