mirror of
https://github.com/perfect-dark-pc-port/perfect_dark.git
synced 2026-10-23 15:52:41 +02:00
Reorganise repository and rename globals to setup
This commit is contained in:
1 parent
66e581a77c
commit
0994436231
9 files changed
+105
-117
No files matched your search
@@ -1,10 +1,27 @@
|
||||
# Perfect Dark Decompilation (WIP)
|
||||
|
||||
This repository contains a work-in-progress decompilation of Perfect Dark for the Nintendo 64. So far only the stage setup files and lang files are decompiled.
|
||||
This repository contains a work-in-progress decompilation of Perfect Dark for the Nintendo 64.
|
||||
|
||||
## I have no idea what you're talking about
|
||||
## Roadmap
|
||||
|
||||
Go have a look at the level scripts in the src/setup directory. Here's a mapping table for your convenience:
|
||||
| Section | Progress |
|
||||
| --------------- | ----------------------------------------- |
|
||||
| 0x40 rspboot | Won't disassemble as source is likely ASM |
|
||||
| 0x1000 boot | Not started |
|
||||
| 0x3050 library | Not started |
|
||||
| 0x39850 setup | About 50% identified |
|
||||
| 0x4e850 rarezip | 2/8 functions done |
|
||||
| 0x5032e game | Not started |
|
||||
| Lang files | Done |
|
||||
| Setup files | Done |
|
||||
| Prop files | Not started |
|
||||
| Character files | Not started |
|
||||
| Gun files | Not started |
|
||||
| BG files | Not started |
|
||||
| Pad files | Not started |
|
||||
| Tile files | Not started |
|
||||
|
||||
If you want to browse the stage setup files, use this table to find the filename:
|
||||
|
||||
| Stage | File |
|
||||
| ---------------- | ------------------------------------ |
|
||||
@@ -30,17 +47,11 @@ Go have a look at the level scripts in the src/setup directory. Here's a mapping
|
||||
| WAR! | [setupstat.c](src/setup/setupstat.c) |
|
||||
| The Duel | [setupate.c](src/setup/setupate.c) |
|
||||
| CI Training | [setupdish.c](src/setup/setupdish.c) |
|
||||
| Global Functions | [globals.c](src/globals.c) |
|
||||
| Common Functions | [setup.c](src/setup.c) |
|
||||
|
||||
There is also a stagetable.txt in the repository root which includes multiplayer stages.
|
||||
|
||||
## What can I do with this?
|
||||
|
||||
You can read and modify the level scripting easily, then recompile it into a playable ROM file. Assuming you have a ROM already of course (it's not included in the repo). The only supported version is the NTSC 8.7 final version. Other versions will be supported eventually.
|
||||
|
||||
You can use this to make mods without having to deal with the GE Setup Editor's interface. Or you can use it for practicing speedruns (eg. start a level at a particular location with particular objectives completed). Or you could make ROMs to help figure out how certain commands work.
|
||||
|
||||
## Okay, how? Show me how to make an edit
|
||||
## Compiling
|
||||
|
||||
Install the following:
|
||||
|
||||
@@ -51,43 +62,10 @@ Install the following:
|
||||
Then:
|
||||
|
||||
1. Save your existing ROM file into the root of the repository with the name `pd.ntsc-final.z64`. It should not be byteswapped (the first four bytes should be `0x80371240`).
|
||||
2. Edit a setup file. Open up `src/setup/setupame.c` (Defection), find the symbol `func0422_intro` and add `explosions_around_chr(CHR_JOANNA)` as the first statement.
|
||||
2. Run `make extract`. This will create an `extracted/ntsc-final` containing assets from your ROM.
|
||||
3. Make edits to the C files in the `src` directory if desired.
|
||||
3. Run `make rom`. This will create a ROM file at `build/ntsc-final/pd.z64`.
|
||||
4. Play the ROM.
|
||||
5. Start Defection, watch the intro and admire Joanna jumping from the dropship into a sea of explosions to her fiery death.
|
||||
|
||||
## Where's the list of commands? Is there a reference?
|
||||
|
||||
See `src/include/commands.h` and `src/include/constants.h` for a start.
|
||||
|
||||
## Whats with all this beginloop and endloop stuff?
|
||||
|
||||
All scripting is a series of labels and gotos. To give some structure to the code, I made a macro called `beginloop` that replaces a `label` + `yield`, and a macro called `endloop` that replaces a `goto_first` when used in this context. Most loops use the label and yield consecutively which allows this to work.
|
||||
|
||||
I don't think Rare had constructs like this though. There's a few rare places where yields are done at the end of the loop, and some where there's a dprint (comment) between the label and yield. In these cases my macros can't and aren't used.
|
||||
|
||||
I also added a `reloop` macro, which is selectively used to replace a `goto_first` within a loop. It's basically a `continue` statement for those familiar with programming.
|
||||
|
||||
## Can I edit global functions?
|
||||
|
||||
Well, yes but no. They won't be injected into the ROM because I'm lazy and haven't written code to do that. The stage files will though.
|
||||
|
||||
The global functions are at src/globals.c.
|
||||
|
||||
## How much stuff can I add before I run out of space?
|
||||
|
||||
Lots. If all the usual file space is exhaused, there's about 300KB of unused ROM space from other locations which will also be used. Considering each command averages only a couple of bytes, you're looking at about 10,000 to 100,000 commands you can add before you run out.
|
||||
|
||||
## How do I know the built files are matching?
|
||||
|
||||
1. With your ROM in place from earlier, run `make extract`. This will create an `extracted/ntsc-final` directory and populate it with the binaries from your ROM.
|
||||
2. Without making any modifications to the setup files, run `make` to build them as usual. These will be compiled at `build/ntsc-final/files`.
|
||||
3. Run `make test`. This will compare the setup binaries in `extracted` with the ones in `build`. If you get no output then they're matching. Try making a change to a file and repeat the `make` and `make test` steps again to see it identify the mismatching files.
|
||||
|
||||
## I want to see support for PAL, JAP and other versions
|
||||
|
||||
It's next on my to do list.
|
||||
|
||||
## Can you do the same for GoldenEye?
|
||||
|
||||
I might do, but my focus is on PD for now.
|
||||
Run `make` followed by `make test`. If `make test` produces no output then everything is matching.
|
||||
Reference in new issue
Block a user