Merge remote-tracking branch 'origin/master' into m_tag_ovl

This commit is contained in:
Cuyler36
2024-09-14 09:33:35 -04:00
1284 changed files with 284925 additions and 27376 deletions
+5
View File
@@ -13,6 +13,8 @@ dump/*
*.arc
*.ctx
ctx.*
!tools/orthrus.exe
!tools/sjiswrap.exe
build.ninja
ac-decomp.code-workspace
assets/
@@ -23,3 +25,6 @@ src/data/bin2
objdiff.json
src/data/item/player_room_floor
src/data/item/player_room_wall
tools/1.2.5n/
tools/1.3.2r/
tools/1.3.2/
+12 -12
View File
@@ -1,8 +1,10 @@
FROM ubuntu:22.04 as build
FROM ubuntu:24.04 as build
# --- basic package installation ---
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
cmake \
git \
ninja-build \
python3 \
@@ -12,7 +14,8 @@ RUN apt-get update && \
# --- python package installation ---
COPY ./requirements.txt /temp/requirements.txt
COPY ./tools/ppcdis/requirements.txt /temp/tools/ppcdis/requirements.txt
RUN pip install -r /temp/requirements.txt
# why bother setting up a venv for this, right? ¯\_(ツ)_/¯
RUN pip install --break-system-packages -r /temp/requirements.txt
RUN rm -rf /temp
# --- wibo installation ---
@@ -23,26 +26,23 @@ RUN rm wibo
# --- devkitpro installation ---
RUN wget https://apt.devkitpro.org/install-devkitpro-pacman
RUN chmod +x install-devkitpro-pacman
## assume yes for in-script apt commands
# assume yes for in-script apt commands
RUN sed -i 's/^apt-get.*$/& -y/g' install-devkitpro-pacman
## now do dkp-pacman installation
RUN ./install-devkitpro-pacman
RUN rm install-devkitpro-pacman
## workaround for a dumb WSL bug that happens with Windows Docker. if we don't do this, devkitPPC installation fails on Windows.
# workaround for a dumb bug that happens with Windows Docker. if we don't do this, devkitPPC installation fails on Windows.
RUN if [ ! -e /etc/mtab ]; then ln -s /proc/self/mounts /etc/mtab; fi
## and finally, we get to install devkitPPC
RUN dkp-pacman -S devkitPPC --noconfirm
## dear fucking god this is hacky but it works (needed otherwise next step fails)
RUN rm /usr/bin/cpp /usr/bin/g++
## set devkitPPC executables as the default ones
# dear fucking god this is hacky but it works (needed otherwise next step fails)
RUN rm /usr/bin/cpp /usr/bin/g++ /lib/cpp
# set devkitPPC executables as the default ones
RUN for file in $(find "/opt/devkitpro/devkitPPC/bin" -type f -name 'powerpc-eabi*'); do new_file=$(basename "$file" | sed 's/powerpc-eabi-//g'); update-alternatives --install "/usr/bin/$new_file" "$new_file" "$file" 0; done
# --- stage ultralib headers ---
RUN mkdir -p /N64_SDK/ultra/usr/
RUN git clone https://github.com/decompals/ultralib.git /N64_SDK/ultra/usr/
## dockerfile does not seem to support extglob, so this monstrous command works around it to delete all of ultralib except the headers we need.
# dockerfile does not seem to support extglob, so this monstrous command works around it to delete all of ultralib except the headers we need.
RUN cd /N64_SDK/ultra/usr/ && find -type f -maxdepth 1 -delete && find . -not -name 'include' -type d -maxdepth 1 -exec rm -r "{}" \;
## modify Gpopmtx's param member to be unsigned int
# modify Gpopmtx's param member to be unsigned int
RUN sed -i 's/unsigned char param:8;/unsigned int param:8;/g' /N64_SDK/ultra/usr/include/PR/gbi.h
# --- set up work directory and env vars ---
+25 -28
View File
@@ -7,51 +7,48 @@
Decompilation in progress of Animal Crossing (GAFE01)
A decompilation of the original N64 version of the game is being worked on [here](https://github.com/zeldaret/af).
## Cloning
Use `--recursive` when cloning to have ppcdis in the repository.
## Building
> ️ When using Windows, it's recommended to use WSL.
> [!NOTE]
> On Windows, the build is known to run disproportionately slow when ran natively, so WSL is recommended.
### Docker
1. [Dump a copy of the game](./docs/extract_game.md) and extract **main.dol** and **foresta.rel.szs**.
2. Decompress **foresta.rel.szs** with yaz0 found in *tools/* (`yaz0 -d foresta.rel.szs foresta.rel`).
3. Place **main.dol** and **foresta.rel** in *dump/*.
4. Place **forest_1st.arc** and **forest_2nd.arc** in *dump/*.
5. Download the [CodeWarrior 1.3.2 and 1.2.5n compilers](https://files.decomp.dev/compilers_20230715.zip) and extract them to *tools/1.3.2/* and *tools/1.2.5n/*, respectively.
6. Download the [CodeWarrior 1.3.2r compiler](https://mega.nz/file/WuBFTCLT#TmB5R4-1mEFkk4G1Vjn9_cHXRD9wOIH9CtOLaVSWEas) and extract it to *tools/1.3.2r/*.
7. Install Docker.
8. Build the Docker image (`docker build -t ac-decomp .`).
9. Run configure.py (`docker run --rm -v ${PWD}:/ac-decomp ac-decomp python3 configure.py`).
10. Run build.py (`docker run --rm -v ${PWD}:/ac-decomp ac-decomp python3 build.py`).
1. [Dump a copy of the game](./docs/extract_game.md) and extract all files.
2. Place **main.dol**, **foresta.rel.szs**, **forest_1st.arc**, and **forest_2nd.arc** in *dump/*.
3. Install Docker.
4. Set up the Docker image. If using MacOS or Linux (including WSL), run `chmod +x docker-setup.sh && ./docker-setup.sh`. If using Windows, run the `docker-setup.bat` file.
5. Run configure.py (`docker run --rm -v ${PWD}:/ac-decomp ac-decomp python3 configure.py`).
6. Run build.py (`docker run --rm -v ${PWD}:/ac-decomp ac-decomp python3 build.py`).
### Build manually
> ️ When building manually from a work directory originally used for Docker, you will need to run `sudo ninja -t clean` for the build to execute properly.
> [!TIP]
> When building manually from a work directory previously used for Docker, `sudo ninja -t clean` will need to be ran for the build to execute properly.
1. [Dump a copy of the game](./docs/extract_game.md) and extract **main.dol** and **foresta.rel.szs**.
2. Decompress **foresta.rel.szs** with yaz0 found in *tools/* (`yaz0 -d foresta.rel.szs foresta.rel`).
3. Place **main.dol** and **foresta.rel** in *dump/*.
4. Place **forest_1st.arc** and **forest_2nd.arc** in *dump/*.
5. Download the [CodeWarrior 1.3.2 and 1.2.5n compilers](https://files.decomp.dev/compilers_20230715.zip) and extract them to *tools/1.3.2/* and *tools/1.2.5n/*, respectively.
6. Download the [CodeWarrior 1.3.2r compiler](https://mega.nz/file/WuBFTCLT#TmB5R4-1mEFkk4G1Vjn9_cHXRD9wOIH9CtOLaVSWEas) and extract it to *tools/1.3.2r/*.
7. Install Python, pip, and [ninja](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages#package-managers) using your package manager of choice.
8. Install Python modules from requirements.txt (`pip install -r requirements.txt`).
9. Install [wibo](https://github.com/decompals/wibo)
1. [Dump a copy of the game](./docs/extract_game.md) and extract all files.
2. Place **main.dol**, **foresta.rel.szs**, **forest_1st.arc**, and **forest_2nd.arc** in *dump/*.
3. Download the [CodeWarrior 1.3.2, 1.3.2r, and 1.2.5n compilers](https://files.decomp.dev/compilers_latest.zip) and extract them to *tools/1.3.2/*, *tools/1.3.2r/*, and *tools/1.2.5n/*, respectively.
4. Install Python, pip, and [ninja](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages#package-managers) using a package manager of choice.
- If using an ARM-based device, cmake will also need to be installed.
5. Install Python modules from requirements.txt (`pip install -r requirements.txt`).
6. Install [wibo](https://github.com/decompals/wibo)
- Wibo is a lightweight Wine replacement that's tailor-made for use with decomp projects. Regular Wine can be used if preferred, but for the purposes of this guide, these instructions will use wibo.
- Download [the latest GitHub release](https://github.com/decompals/wibo/releases/latest) and run `install ./wibo /usr/bin` to install it to your system.
10. Install devkitPPC.
- To get devkitPPC, you'll need [devkitPro Pacman](https://devkitpro.org/wiki/devkitPro_pacman#Installing_devkitPro_Pacman).
- Download [the latest GitHub release](https://github.com/decompals/wibo/releases/latest) and run `install ./wibo /usr/bin` to install it to the system.
7. Install devkitPPC.
- [devkitPro Pacman](https://devkitpro.org/wiki/devkitPro_pacman#Installing_devkitPro_Pacman) is needed to get devkitPPC.
- Run `dkp-pacman -S devkitPPC` once dkp-pacman is installed to install devkitPPC.
- Set the `DEVKITPPC` environment variable to */opt/devkitpro/devkitPPC*.
11. Set the `N64_SDK` environment variable to the path of your libultra or equivalent headers. If you need headers, you can use the ones from [ultralib](https://github.com/decompals/ultralib).
8. Set the `N64_SDK` environment variable to the path of libultra or equivalent headers. Headers from [ultralib](https://github.com/decompals/ultralib) can be used.
- Headers should be located at `$N64_SDK/ultra/usr/include`.
- You may need to modify `Gpopmtx`'s `param` member to be `unsigned int` in **gbi.h**.
12. Run `python3 configure.py`.
13. Run `python3 build.py`.
- `Gpopmtx`'s `param` member must be modified to be `unsigned int` in **gbi.h**.
9. Run `python3 configure.py`.
10. Run `python3 build.py`.
## Quick Guides
- [Dumping Game Files](./docs/extract_game.md)
+5
View File
@@ -3,6 +3,7 @@ import sys
import os
import hashlib
import argparse
import common as c
# List of Ninja build targets
NINJA_BUILD_TARGETS = [ ['src/data/bin1', 'out/forest_1st.arc', 'dump/forest_1st.arc'], ['src/data/bin2', 'out/forest_2nd.arc', 'dump/forest_2nd.arc'] ]
@@ -96,6 +97,10 @@ if __name__ == "__main__":
subprocess.run(['ninja', '-v'], check=True)
else:
subprocess.run(['ninja'], check=True)
# Compress foresta.rel
if os.path.exists(c.REL_OUT):
print("Compressing foresta.rel to foresta.rel.szs")
subprocess.call([f'./{c.ORTHRUS}', 'ncompress', 'yaz0', '-c', c.REL_OUT, c.REL_SZS_OUT])
except subprocess.CalledProcessError as e:
print(f"Error running Ninja build")
sys.exit(1)
+27 -5
View File
@@ -197,6 +197,7 @@ ORDERSTRINGS = f"{PYTHON} {PPCDIS}/orderstrings.py"
ORDERFLOATS = f"{PYTHON} {PPCDIS}/orderfloats.py"
ASSETRIP = f"{PYTHON} {PPCDIS}/assetrip.py"
ASSETINC = f"{PYTHON} {PPCDIS}/assetinc.py"
BATCHASSETRIP = f"{PYTHON} {PPCDIS}/batchassetrip.py"
FORCEACTIVEGEN = f"{PYTHON} {PPCDIS}/forceactivegen.py"
ELF2DOL = f"{PYTHON} {PPCDIS}/elf2dol.py"
ELF2REL = f"{PYTHON} {PPCDIS}/elf2rel.py"
@@ -209,16 +210,18 @@ FORCEFILESGEN = f"{PYTHON} {PPCDIS}/forcefilesgen.py"
TOOLS = "tools"
CODEWARRIOR = os.path.join(TOOLS, "1.3.2")
CODEWARRIOR_RODATA_POOL_FIX = os.path.join(TOOLS, "1.3.2r")
ORTHRUS = os.path.join(TOOLS, "orthrus")
SDK_CW = os.path.join(TOOLS, "1.2.5n")
CC = os.path.join(CODEWARRIOR, "mwcceppc.exe")
CC_R = os.path.join(CODEWARRIOR_RODATA_POOL_FIX, "mwcceppc.exe")
OCC = os.path.join(SDK_CW, "mwcceppc.exe")
LD = os.path.join(CODEWARRIOR, "mwldeppc.exe")
if platform != "win32":
CC = f"wibo {CC}"
CC_R = f"wibo {CC_R}"
OCC = f"wibo {OCC}"
LD = f"wibo {LD}"
SJISWRAP = f"wibo {TOOLS}/sjiswrap.exe"
else:
ORTHRUS = os.path.join(TOOLS, "orthrus.exe")
SJISWRAP = os.path.join(TOOLS, "sjiswrap.exe")
# DevkitPPC
DEVKITPPC = os.environ.get("DEVKITPPC")
@@ -233,8 +236,6 @@ PAL16DIS = f"{PYTHON} {TOOLS}/converters/pal16dis.py"
# JSystem JKernel archive tool
ARC_TOOL = f"{PYTHON} {TOOLS}/arc_tool.py"
ICONV = f"{PYTHON} tools/sjis.py" # TODO: get actual iconv working(?)
# N64 SDK path for GBI
N64SDK = os.environ.get("N64_SDK")
assert N64SDK != None, "N64_SDK is not defined as a system environment variable"
@@ -255,6 +256,7 @@ REL_DISASM_OVERRIDES = f"{CONFIG}/rel_disasm_overrides.yml"
# Binaries
DOL = f"{ORIG}/static.dol" # read in python code
REL = f"{ORIG}/foresta.rel" # read in python code
REL_SZS = f"{ORIG}/foresta.rel.szs"
DOL_YML = f"{CONFIG}/dol.yml"
REL_YML = f"{CONFIG}/rel.yml"
DOL_SHA = f"{ORIG}/static.dol.sha1"
@@ -288,6 +290,7 @@ DOL_ELF = f"{BUILDDIR}/static.elf"
REL_PLF = f"{BUILDDIR}/foresta.plf"
DOL_OUT = f"{OUTDIR}/static.dol"
REL_OUT = f"{OUTDIR}/foresta.rel"
REL_SZS_OUT = f"{OUTDIR}/foresta.rel.szs"
DOL_MAP = f"{OUTDIR}/static.map"
REL_MAP = f"{OUTDIR}/foresta.map"
@@ -442,11 +445,28 @@ FAMICOM_BASE = CFLAGS + [
] + DOL_DEFINES
JAUDIO_BASE = CFLAGS + [
"-lang=c++",
"-char signed",
"-sdata 8",
"-sdata2 8",
"-enum int",
"-common on"
] + DOL_DEFINES
JAUDIO_FUNC_ALIGN_32 = [
"-func_align 32",
"-str readonly",
"-inline off"
]
JAUDIO_USER = [
"-d _LANGUAGE_C_PLUS_PLUS",
"-O0",
"-char unsigned",
"-fp hard",
"-lang=c++",
"-sdata 8",
"-sdata2 8",
"-enum int",
"-common on"
]
JSYSTEM_CFLAGS = ' '.join(JSYSTEM_BASE + LOCAL_CFLAGS)
JSYSTEM_JGADGET_CFLAGS = ' '.join(JSYSTEM_JGADGET_BASE + LOCAL_CFLAGS)
@@ -464,6 +484,8 @@ EXTERNAL_REL_CFLAGS = ' '.join(BASE_REL_CFLAGS)
PREPROCESS_CFLAGS = ' '.join(PREPROCESSOR_CFLAGS)
FAMICOM_CLFAGS = ' '.join(FAMICOM_BASE + LOCAL_CFLAGS)
JAUDIO_CFLAGS = ' '.join(JAUDIO_BASE + LOCAL_CFLAGS)
JAUDIO_FUNC_ALIGN_32_CFLAGS = ' '.join(JAUDIO_BASE + JAUDIO_FUNC_ALIGN_32 + LOCAL_CFLAGS)
JAUDIO_USER_CFLAGS = ' '.join(JAUDIO_USER + LOCAL_CFLAGS)
DOL_LDFLAGS = ' '.join([
"-maxerrors 1",
+3 -1
View File
@@ -4,10 +4,12 @@ blocked_pointers:
blocked_targets:
- 0x800A97E0 # boot.c local static const tbl, also start of .rodata
- 0x80008000
- 0x80018800
- 0x800189C0
- 0x801F6C7C # tcs_bad
- 0x801F6C7D # ics_bad
- 0x800a9a90
- 0x800a9838
# - 0x800a9838
- 0x800a9938
- 0x800a9a3a
- 0x800a99f6
+10060 -3
View File
File diff suppressed because it is too large Load Diff
+15
View File
@@ -1,9 +1,24 @@
trim_ctors: true
symbol_aligns:
0x80008480: 32
0x80016d20: 32
0x80018920: 32
0x800190e0: 32
0x80019380: 32
0x80019760: 32
0x8001a0c0: 32
0x80026400: 32
0x8002c920: 32 # __DSPCheckMXICBoot2__FP16STRUCT_DSP_TASK2
0x80031d80: 32
0x8001ada0: 32
0x8002cfe0: 32
0x8018f1a8: 8
0x80207458: 8 # align RunQueue to 0x001251d8
0x800b9140: 32 # align gam_win_moji1_tex to 32 bytes
0x801f71c0: 32 # align texture_buffer_data to 32 bytes
0x800daaa0: 32 # align texture_cache_data_func to 32 bytes
0x80206f30: 16 # malloc.c align 16 bytes
0x800ab260: 32
0x800d3b00: 32 # dspboot data section has alignment to 32
0x801864b0: 8 # dspbuf align 8 (not sure why this doesn't happen)
+396 -297
View File
@@ -1,297 +1,396 @@
ctors.s:
.ctors: [0x800a97b4, 0x800a97c0] # remove trailing 0s from ctor area
#dolphin/os/__start.c:
# .init: [0x80003100, 0x80003354]
dolphin/__ppc_eabi_init.cpp:
.init: [0x80003354, 0x800033a8]
.text: [0x8007fdfc, 0x8007fe90]
runtime/__mem.c:
.init: [0x800033a8, 0x800034e0]
TRK/init/mem_TRK.c:
.init: [0x800034e0, 0x80003534]
asm/__exception.s:
.init: [0x80003534, 0x80005468]
boot.c:
.text: [0x800056c0, 0x8000663c]
.rodata: [0x800a97e0, 0x800a97e8]
.data: [0x800af860, 0x800afe50]
.bss: [0x800e2280, 0x800e2318]
jsyswrap.cpp:
.text: [0x8000663c, 0x80007188]
.ctors: [0x800a9784, 0x800a9788]
.data: [0x800afe50, 0x800b05e8]
.bss: [0x800e2318, 0x800e2640]
version.c:
.data: [0x800b05e8, 0x800b0608]
initial_menu.c:
.text: [0x80007188, 0x80007e58]
.rodata: [0x800a97e8, 0x800a97f8]
.data: [0x800b0608, 0x800b0a60]
.bss: [0x800e2640, 0x800e2790]
dvderr.c:
.text: [0x80007e58, 0x800083f8]
.rodata: [0x800a97f8, 0x800a9838]
.data: [0x800b0a60, 0x800b9140]
.bss: [0x800e2790, 0x800e2b88]
bootdata/gam_win1.c:
.data: [0x800b9140, 0x800bb500]
bootdata/gam_win2.c:
.data: [0x800bb500, 0x800bd820]
bootdata/gam_win3.c:
.data: [0x800bd820, 0x800be460]
bootdata/logo_nin.c:
.data: [0x800be460, 0x800c3140]
nintendo_hi_0.c:
.data: [0x800c3140, 0x800cca40]
jaudio_NES/dummyprobe.c:
.text: [0x800083f8, 0x80008400]
# jaudio_NES/game64.c: # TODO: finish
# .rodata: [0x800a9938, 0x800a9b98]
#jaudio_NES/verysimple.c:
# .text: [0x80008400, 0x80008480]
# .sdata: [0x80217b80, 0x80217b88]
Famicom/famicom.cpp:
.text: [0x80041614, 0x80046888] # TODO: get ~J2DOrthoGraph's dtor in here somehow? 0x800468fc, also add in JUTGamePad::getPortStatus when JUTGamePad is linked?
.rodata: [0x800aa9a8, 0x800aaa30]
.data: [0x800d8778, 0x800d99a0]
.bss: [0x801ef540, 0x801f6bd8]
Famicom/famicom_nesinfo.cpp:
.text: [0x800468fc, 0x80047e40]
.rodata: [0x800aaa30, 0x800aab60]
.data: [0x800d99a0, 0x800da9c8]
.bss: [0x801f6bd8, 0x801f6c80]
GBA2/JoyBoot.c:
.text: [0x80049788, 0x8004ae00]
.data: [0x800daa08, 0x800daaa0]
.bss: [0x801f7180, 0x801f71c0]
libforest/osreport.c:
.text: [0x8005a654, 0x8005a92c]
.data: [0x800dc6d8, 0x800dc738]
.bss: [0x80206f08, 0x80206f20]
.sbss: [0x80218618, 0x80218628]
libforest/fault.c:
.text: [0x8005a92c, 0x8005adac]
.data: [0x800dc738, 0x800dc7c8]
.bss: [0x80206f20, 0x80206f30]
.sbss: [0x80218628, 0x80218630]
libforest/ReconfigBATs.c:
.text: [0x8005adac, 0x8005aed4]
libu64/debug.c:
.text: [0x8005aed4, 0x8005af30]
.data: [0x800dc7c8, 0x800dc7f0]
libu64/gfxprint.c:
.text: [0x8005af30, 0x8005b9a8]
.data: [0x800dc7f0, 0x800dc810]
.sbss: [0x80218630, 0x80218638]
libu64/gfxprint_data.c:
.data: [0x800dc810, 0x800dd090]
libu64/pad.c:
.text: [0x8005b9a8, 0x8005ba2c]
libc64/aprintf.c:
.text: [0x8005cbdc, 0x8005cc14]
libc64/math64.c:
.text: [0x8005cc14, 0x8005cccc]
.sdata2: [0x80219118, 0x80219130]
libc64/qrand.c:
.text: [0x8005cccc, 0x8005cd64]
.sdata: [0x80217de8, 0x80217df0]
.sbss: [0x80218640, 0x80218648]
.sdata2: [0x80219130, 0x80219138]
libc64/sprintf.c:
.text: [0x8005ce18, 0x8005cf08]
libc64/malloc.c:
.text: [0x8005cf08, 0x8005d01c]
.bss: [0x80206F30, 0x80206F60]
libultra/ultra.c:
.text: [0x8005d01c, 0x8005d15c]
.bss: [0x80206f60, 0x80206fa0]
#libultra/gu/scale.c:
# .text: [0x8005e7d4, 0x8005e860]
# .sdata2: [0x80219208, 0x80219210]
#libultra/gu/translate.c:
# .text: [0x8005e8ac, 0x8005e918]
libultra/gu/sins.c:
.text: [0x8005e860, 0x8005e8ac]
.data: [0x800dd360, 0x800ddb60]
#libultra/xldtob.c:
# .text: [0x8005e918, 0x8005f2a0]
# .rodata: [0x800ab110, 0x800ab158]
# .sdata: [0x80217df8, 0x80217e08]
# .sdata2: [0x80219210, 0x80219230]
#libultra/xlitob.c:
# .text: [0x8005f2a0, 0x8005f4cc]
# .data: [0x800ddb60, 0x800ddb88]
#libultra/xprintf.c:
# .text: [0x8005f4cc, 0x8005ff74]
# .rodata: [0x800ab158, 0x800ab170]
# .data: [0x800ddb88, 0x800ddd20]
# .sdata: [0x80217e08, 0x80217e10]
# .sdata2: [0x80219230, 0x80219238]
JSystem/JKernel/JKRHeap.cpp:
.text: [0x80063748, 0x80064028]
.data: [0x800ddf20, 0x800ddf98]
.sdata: [0x80217e58, 0x80217e80]
.sbss: [0x802186d8, 0x80218700]
JSystem/JKernel/JKRExpHeap.cpp:
.text: [0x80064028, 0x80065aa0]
.data: [0x800ddf98, 0x800de3a8]
.sdata: [0x80217e80, 0x80217ec0]
.sbss: [0x80218700, 0x80218720]
.sdata2: [0x80219278, 0x80219288]
JSystem/JKernel/JKRDisposer.cpp:
.text: [0x80065aa0, 0x80065b8c]
.data: [0x800de3a8, 0x800de3c0]
.sdata: [0x80217ec0, 0x80217ec8]
JSystem/JKernel/JKRThread.cpp:
.text: [0x80065b8c, 0x80065ef0]
.ctors: [0x800a978c, 0x800a9790]
.data: [0x800de3c0, 0x800de3f8]
.bss: [0x80207008, 0x80207020]
.sdata: [0x80217ec8, 0x80217ed8]
JSystem/JKernel/JKRAram.cpp:
.text: [0x80065ef8, 0x80066e84]
.ctors: [0x800a9790, 0x800a9794]
.data: [0x800de3f8, 0x800de4c0]
.bss: [0x80207020, 0x80207038]
.sdata: [0x80217ed8, 0x80217ef8]
.sbss: [0x80218720, 0x80218758]
JSystem/JKernel/JKRAramHeap.cpp:
.text: [0x80066e84, 0x80067258]
.ctors: [0x800a9794, 0x800a9798]
.data: [0x800de4c0, 0x800de4f0]
.bss: [0x80207038, 0x80207050]
.sdata: [0x80217ef8, 0x80217f08]
JSystem/JKernel/JKRAramBlock.cpp:
.text: [0x80067258, 0x800674c8]
.data: [0x800de4f0, 0x800de510]
.sdata: [0x80217f08, 0x80217f10]
JSystem/JKernel/JKRAramPiece.cpp:
.text: [0x800674c8, 0x80067a88]
.ctors: [0x800a9798, 0x800a979c]
.data: [0x800de510, 0x800de568]
.bss: [0x80207050, 0x80207080]
.sdata: [0x80217f10, 0x80217f18]
JSystem/JKernel/JKRAramStream.cpp:
.text: [0x80067a88, 0x80067ff4]
.data: [0x800de568, 0x800de608]
.sdata: [0x80217f18, 0x80217f38]
.sbss: [0x80218758, 0x80218768]
JSystem/JKernel/JKRFileLoader.cpp:
.text: [0x80067ff4, 0x800685b0]
.ctors: [0x800a979c, 0x800a97a0]
.data: [0x800de608, 0x800de670]
.bss: [0x80207080, 0x80207098]
.sdata: [0x80217f38, 0x80217f50]
.sbss: [0x80218768, 0x80218770]
JSystem/JKernel/JKRFileFinder.cpp:
.text: [0x800685b0, 0x80068744]
.data: [0x800de670, 0x800de6b0]
.sdata: [0x80217f50, 0x80217f60]
JSystem/JKernel/JKRArchivePub.cpp:
.text: [0x80068744, 0x80068ed0]
.data: [0x800de6b0, 0x800de740]
.sdata: [0x80217f60, 0x80217f78]
JSystem/JKernel/JKRArchivePri.cpp:
.text: [0x80068ed0, 0x80069530]
.sbss: [0x80218770, 0x80218778]
JSystem/JKernel/JKRMemArchive.cpp:
.text: [0x80069530, 0x80069a28]
.data: [0x800de740, 0x800de828]
.sdata: [0x80217f78, 0x80217f98]
JSystem/JKernel/JKRAramArchive.cpp:
.text: [0x80069a28, 0x8006a4fc]
.data: [0x800de828, 0x800de938]
.sdata: [0x80217f98, 0x80217fc8]
JSystem/JKernel/JKRDvdArchive.cpp:
.text: [0x8006a4fc, 0x8006add0]
.data: [0x800de938, 0x800dea70]
.sdata: [0x80217fc8, 0x80217fe8]
JSystem/JKernel/JKRCompArchive.cpp:
.text: [0x8006add0, 0x8006b8a4]
.data: [0x800dea70, 0x800deba8]
.sdata: [0x80217fe8, 0x80218008]
JSystem/JKernel/JKRDvdFile.cpp:
.text: [0x8006b8a4, 0x8006be0c]
.ctors: [0x800a97a0, 0x800a97a4]
.data: [0x800deba8, 0x800dec30]
.bss: [0x80207098, 0x802070b0]
.sdata: [0x80218008, 0x80218028]
JSystem/JKernel/JKRDvdRipper.cpp:
.text: [0x8006be0c, 0x8006c8fc]
.ctors: [0x800a97a4, 0x800a97a8]
.data: [0x800dec30, 0x800dec90]
.bss: [0x802070b0, 0x802070c8]
.sdata: [0x80218028, 0x80218030]
.sbss: [0x80218778, 0x802187a8]
JSystem/JKernel/JKRDvdAramRipper.cpp:
.text: [0x8006c8fc, 0x8006d608]
.ctors: [0x800a97a8, 0x800a97ac]
.bss: [0x802070c8, 0x802070e0]
.sdata: [0x80218030, 0x80218038]
.sbss: [0x802187a8, 0x802187e8]
JSystem/JKernel/JKRDecomp.cpp:
.text: [0x8006d608, 0x8006dd58]
.data: [0x800dec90, 0x800ded18]
.sdata: [0x80218038, 0x80218050]
.sbss: [0x802187e8, 0x802187f0]
JSystem/JSupport/JSUInputStream.cpp:
.text: [0x8006e168, 0x8006e3e4]
.data: [0x800ded18, 0x800dedb8]
.sdata: [0x80218050, 0x80218068]
#JSystem/JSupport/JSUFileStream.cpp: # JSUFileStream linkage disabled until we can resolve order of RTTI strings in .data
# .text: [0x8006e3e4, 0x8006e604]
# .data: [0x800dedb8, 0x800dee60]
# .sdata: [0x80218068, 0x80218088]
JSystem/JGadget/linklist.cpp:
.text: [0x8006e604, 0x8006e800]
JSystem/JUtility/JUTGamePad.cpp:
.text: [0x80070274, 0x800713b0]
.ctors: [0x800a97ac, 0x800a97b0]
.rodata: [0x800ab240, 0x800ab260]
.data: [0x800def60, 0x800defa0]
.bss: [0x802070e0, 0x80207268]
.sdata: [0x802180b8, 0x802180d0]
.sbss: [0x80218808, 0x80218838]
.sdata2: [0x802192c0, 0x80219300]
dolphin/BASE/ppcarch.c:
.text: [0x8007867c, 0x80078718]
dolphin/os/OSArena.c:
.text: [0x8007988c, 0x800798ac]
.sdata: [0x80218178, 0x80218180]
.sbss: [0x802188f8, 0x80218900]
#dolphin/os/OSCache.c:
# .text: [0x80079b40, 0x8007a01c]
# .data: [0x800dfa00, 0x800dfc30]
#dolphin/os/OSDisableInterrupts.c:
# .text: [0x8007ac24, 0x8007ac38]
dolphin/os/OSEnableInterrupts.c:
.text: [0x8007ac38, 0x8007ac4c]
dolphin/os/OSRestoreInterrupts.c:
.text: [0x8007ac4c, 0x8007ac70]
dolphin/os/OSRtc.c:
.text: [0x8007d050, 0x8007db20]
.bss: [0x80207400, 0x80207458]
MSL_C/rand.c:
.text: [0x8009f46c, 0x8009f494]
.sdata: [0x80218260, 0x80218268]
TRK/mainloop.c:
.text: [0x800A1FF4, 0x800A20EC]
TRK/nubevent.c:
.text: [0x800A20EC, 0x800A2314]
.bss: [0x802095C8, 0x802095F0]
#TRK/nubinit.c: #things break, fix later
# .text: [0x800A2314, 0x800A2494]
# .rodata: [0x800AF750, 0x800AF770]
# .bss: [0x802095F0, 0x802095F8]
#TRK/usr_put.c:
# .text: [0x800A3468, 0x800A34F4]
#TRK/dispatch.c:
# .text: [0x800A34F4, 0x800A3590]
# .data: [0x800E2128, 0x800E21B0]
# .bss: [0x8020AFC0, 0x8020AFC8]
dolphin/odenotstub/odenotstub.c:
.text: [0x800a9770, 0x800a9780]
dolphin/amcstubs/AmcExi2Stubs.c:
.text: [0x800a8cc0, 0x800a8cf0]
dolphin/gx/GXStubs.c:
.text: [0x800998d4, 0x800998d8]
ctors.s:
.ctors: [0x800a97b4, 0x800a97c0] # remove trailing 0s from ctor area
#dolphin/os/__start.c:
# .init: [0x80003100, 0x80003354]
runtime/__mem.c:
.init: [0x800033a8, 0x800034e0]
TRK/init/mem_TRK.c:
.init: [0x800034e0, 0x80003534]
asm/__exception.s:
.init: [0x80003534, 0x80005468]
boot.c:
.text: [0x800056c0, 0x8000663c]
.rodata: [0x800a97e0, 0x800a97e8]
.data: [0x800af860, 0x800afe50]
.bss: [0x800e2280, 0x800e2318]
jsyswrap.cpp:
.text: [0x8000663c, 0x80007188]
.ctors: [0x800a9784, 0x800a9788]
.data: [0x800afe50, 0x800b05e8]
.bss: [0x800e2318, 0x800e2640]
initial_menu.c:
.text: [0x80007188, 0x80007e58]
.rodata: [0x800a97e8, 0x800a97f8]
.data: [0x800b0608, 0x800b0a60]
.bss: [0x800e2640, 0x800e2790]
dvderr.c:
.text: [0x80007e58, 0x800083f8]
.rodata: [0x800a97f8, 0x800a9838]
.data: [0x800b0a60, 0x800b9140]
.bss: [0x800e2790, 0x800e2b88]
jaudio_NES/game/dummyprobe.c:
.text: [0x800083f8, 0x80008400]
jaudio_NES/game/audioheaders.c:
.data: [0x800cca40, 0x800ce880]
jaudio_NES/game/verysimple.c:
.text: [0x80008400, 0x80008480]
.sdata: [0x80217b80, 0x80217b88]
# jaudio_NES/game/game64.c: # TODO: finish
# .rodata: [0x800a9938, 0x800a9b98]
jaudio_NES/game/melody.c:
.text: [0x8001561c, 0x80015a4c]
.rodata: [0x800a9b98, 0x800aa500]
.sbss: [0x80218390, 0x802183a0]
.sdata2: [0x80218d58, 0x80218d60]
jaudio_NES/game/rhythm.c:
.text: [0x80015a4c, 0x800165ec]
.bss: [0x8017bdd8, 0x8017be80]
.sdata: [0x80217bd0, 0x80217bd8]
.sbss: [0x802183a0, 0x802183b0]
.sdata2: [0x80218d60, 0x80218d78]
jaudio_NES/game/radio.c:
.text: [0x800165ec, 0x8001676c]
.sdata2: [0x80218d78, 0x80218d88]
jaudio_NES/game/kappa.c:
.text: [0x8001676c,0x80016840]
.sbss: [0x802183b0, 0x802183b8]
jaudio_NES/game/staff.c:
.text: [0x80016840, 0x80016d20]
.data: [0x800cfe10, 0x800cff20]
.sbss: [0x802183b8, 0x802183c8]
.sdata2: [0x80218d98, 0x80218da0]
jaudio_NES/internal/aictrl.c:
.text: [0x80017e80, 0x80018640]
.rodata: [0x800aa500, 0x800aa518]
.bss: [0x8017cfa0, 0x8017cfc0]
.sbss: [0x802183f0, 0x80218420]
.sdata2: [0x80218da8, 0x80218db8]
jaudio_NES/internal/sample.c:
.text: [0x80018640, 0x80018920]
jaudio_NES/internal/dummyrom.c:
.text: [0x80018920, 0x80018bc0]
.rodata: [0x800aa518, 0x800aa528]
# .bss: [0x8020d78c, 0x8020d7a0] # placed in common bss
.sbss: [0x80218420, 0x80218440]
jaudio_NES/internal/audiothread.c:
.text: [0x80018bc0, 0x800190e0]
.rodata: [0x800aa528, 0x800aa538]
.bss: [0x8017cfc0, 0x80180020]
.sbss: [0x80218440, 0x80218460]
.sdata2: [0x80218db8, 0x80218dc0]
jaudio_NES/internal/neosthread.c:
.text: [0x800190e0, 0x80019380]
.rodata: [0x800aa538, 0x800aa558]
.bss: [0x80180020, 0x80186440]
.sdata: [0x80217be0, 0x80217be8]
.sbss: [0x80218460, 0x80218478]
jaudio_NES/internal/streamctrl.c:
.text: [0x80019380, 0x80019760]
.data: [0x800d01a8, 0x800d0278]
.bss: [0x80186440, 0x801864b0]
.sdata2: [0x80218dc0, 0x80218dd0]
jaudio_NES/internal/dspbuf.c:
.text: [0x80019760, 0x80019ae0]
.rodata: [0x800aa558, 0x800aa570]
.bss: [0x801864b0, 0x801864c0]
.sbss: [0x80218478, 0x80218488]
jaudio_NES/internal/cpubuf.c:
.text: [0x80019ae0, 0x80019dc0]
.bss: [0x801864c0, 0x801864d0]
.sbss: [0x80218488, 0x80218498]
jaudio_NES/internal/playercall.c:
.text: [0x80019dc0, 0x8001a0c0]
.bss: [0x801864d0,0x80186590]
jaudio_NES/internal/dvdthread.c:
.text: [0x8001a0c0, 0x8001ada0]
.data: [0x800d0278, 0x800d0298]
.bss: [0x80186590, 0x8018f1a8]
.sbss: [0x80218498, 0x802184e8]
jaudio_NES/internal/sub_sys.c:
.text: [0x80024ae0, 0x80026120]
.rodata: [0x800aa700, 0x800aa720]
.data: [0x800d0300, 0x800d0390]
.sbss: [0x80218510, 0x80218528]
.sdata2: [0x80218e48, 0x80218e60]
jaudio_NES/internal/os.c:
.text: [0x80026120, 0x80026300]
jaudio_NES/internal/astest.c:
.text: [0x80026300, 0x80026400]
jaudio_NES/internal/track.c:
.text: [0x80028e60, 0x8002c920]
.rodata: [0x800aa720, 0x800aa780]
.data: [0x800d36f0, 0x800d3b00]
.sbss: [0x80218540, 0x80218548]
.sdata2: [0x80218ec8, 0x80218f08]
jaudio_NES/internal/dspboot.c:
.text: [0x8002c920, 0x8002cd20]
.rodata: [0x800aa780, 0x800aa7a0]
.data: [0x800d3b00, 0x800d5500]
.sdata2: [0x80218f08, 0x80218f10]
jaudio_NES/internal/dspproc.c:
.text: [0x8002cd20, 0x8002cfe0]
.sdata: [0x80217c18, 0x80217c20]
jaudio_NES/internal/random.c:
.text: [0x80031ce0, 0x80031d80]
.sdata: [0x80217c38, 0x80217c40]
.sdata2: [0x80218f60, 0x80218f70]
Famicom/famicom.cpp:
.text: [0x80041614, 0x80046888] # TODO: get ~J2DOrthoGraph's dtor in here somehow? 0x800468fc, also add in JUTGamePad::getPortStatus when JUTGamePad is linked?
.rodata: [0x800aa9a8, 0x800aaa30]
.data: [0x800d8778, 0x800d99a0]
.bss: [0x801ef540, 0x801f6bd8]
Famicom/famicom_nesinfo.cpp:
.text: [0x800468fc, 0x80047e40]
.rodata: [0x800aaa30, 0x800aab60]
.data: [0x800d99a0, 0x800da9c8]
.bss: [0x801f6bd8, 0x801f6c80]
GBA2/JoyBoot.c:
.text: [0x80049788, 0x8004ae00]
.data: [0x800daa08, 0x800daaa0]
.bss: [0x801f7180, 0x801f71c0]
libforest/osreport.c:
.text: [0x8005a654, 0x8005a92c]
.data: [0x800dc6d8, 0x800dc738]
.bss: [0x80206f08, 0x80206f20]
.sbss: [0x80218618, 0x80218628]
libforest/fault.c:
.text: [0x8005a92c, 0x8005adac]
.data: [0x800dc738, 0x800dc7c8]
.bss: [0x80206f20, 0x80206f30]
.sbss: [0x80218628, 0x80218630]
libforest/ReconfigBATs.c:
.text: [0x8005adac, 0x8005aed4]
libu64/debug.c:
.text: [0x8005aed4, 0x8005af30]
.data: [0x800dc7c8, 0x800dc7f0]
libu64/gfxprint.c:
.text: [0x8005af30, 0x8005b9a8]
.data: [0x800dc7f0, 0x800dc810]
.sbss: [0x80218630, 0x80218638]
libu64/pad.c:
.text: [0x8005b9a8, 0x8005ba2c]
libc64/aprintf.c:
.text: [0x8005cbdc, 0x8005cc14]
libc64/math64.c:
.text: [0x8005cc14, 0x8005cccc]
.sdata2: [0x80219118, 0x80219130]
libc64/qrand.c:
.text: [0x8005cccc, 0x8005cd64]
.sdata: [0x80217de8, 0x80217df0]
.sbss: [0x80218640, 0x80218648]
.sdata2: [0x80219130, 0x80219138]
libc64/sprintf.c:
.text: [0x8005ce18, 0x8005cf08]
libc64/malloc.c:
.text: [0x8005cf08, 0x8005d01c]
.bss: [0x80206F30, 0x80206F60]
libultra/ultra.c:
.text: [0x8005d01c, 0x8005d15c]
.bss: [0x80206f60, 0x80206fa0]
#libultra/gu/scale.c:
# .text: [0x8005e7d4, 0x8005e860]
# .sdata2: [0x80219208, 0x80219210]
#libultra/gu/translate.c:
# .text: [0x8005e8ac, 0x8005e918]
libultra/gu/sins.c:
.text: [0x8005e860, 0x8005e8ac]
.data: [0x800dd360, 0x800ddb60]
#libultra/xldtob.c:
# .text: [0x8005e918, 0x8005f2a0]
# .rodata: [0x800ab110, 0x800ab158]
# .sdata: [0x80217df8, 0x80217e08]
# .sdata2: [0x80219210, 0x80219230]
#libultra/xlitob.c:
# .text: [0x8005f2a0, 0x8005f4cc]
# .data: [0x800ddb60, 0x800ddb88]
#libultra/xprintf.c:
# .text: [0x8005f4cc, 0x8005ff74]
# .rodata: [0x800ab158, 0x800ab170]
# .data: [0x800ddb88, 0x800ddd20]
# .sdata: [0x80217e08, 0x80217e10]
# .sdata2: [0x80219230, 0x80219238]
JSystem/JKernel/JKRHeap.cpp:
.text: [0x80063748, 0x80064028]
.data: [0x800ddf20, 0x800ddf98]
.sdata: [0x80217e58, 0x80217e80]
.sbss: [0x802186d8, 0x80218700]
JSystem/JKernel/JKRExpHeap.cpp:
.text: [0x80064028, 0x80065aa0]
.data: [0x800ddf98, 0x800de3a8]
.sdata: [0x80217e80, 0x80217ec0]
.sbss: [0x80218700, 0x80218720]
.sdata2: [0x80219278, 0x80219288]
JSystem/JKernel/JKRDisposer.cpp:
.text: [0x80065aa0, 0x80065b8c]
.data: [0x800de3a8, 0x800de3c0]
.sdata: [0x80217ec0, 0x80217ec8]
JSystem/JKernel/JKRThread.cpp:
.text: [0x80065b8c, 0x80065ef0]
.ctors: [0x800a978c, 0x800a9790]
.data: [0x800de3c0, 0x800de3f8]
.bss: [0x80207008, 0x80207020]
.sdata: [0x80217ec8, 0x80217ed8]
JSystem/JKernel/JKRAram.cpp:
.text: [0x80065ef8, 0x80066e84]
.ctors: [0x800a9790, 0x800a9794]
.data: [0x800de3f8, 0x800de4c0]
.bss: [0x80207020, 0x80207038]
.sdata: [0x80217ed8, 0x80217ef8]
.sbss: [0x80218720, 0x80218758]
JSystem/JKernel/JKRAramHeap.cpp:
.text: [0x80066e84, 0x80067258]
.ctors: [0x800a9794, 0x800a9798]
.data: [0x800de4c0, 0x800de4f0]
.bss: [0x80207038, 0x80207050]
.sdata: [0x80217ef8, 0x80217f08]
JSystem/JKernel/JKRAramBlock.cpp:
.text: [0x80067258, 0x800674c8]
.data: [0x800de4f0, 0x800de510]
.sdata: [0x80217f08, 0x80217f10]
JSystem/JKernel/JKRAramPiece.cpp:
.text: [0x800674c8, 0x80067a88]
.ctors: [0x800a9798, 0x800a979c]
.data: [0x800de510, 0x800de568]
.bss: [0x80207050, 0x80207080]
.sdata: [0x80217f10, 0x80217f18]
JSystem/JKernel/JKRAramStream.cpp:
.text: [0x80067a88, 0x80067ff4]
.data: [0x800de568, 0x800de608]
.sdata: [0x80217f18, 0x80217f38]
.sbss: [0x80218758, 0x80218768]
JSystem/JKernel/JKRFileLoader.cpp:
.text: [0x80067ff4, 0x800685b0]
.ctors: [0x800a979c, 0x800a97a0]
.data: [0x800de608, 0x800de670]
.bss: [0x80207080, 0x80207098]
.sdata: [0x80217f38, 0x80217f50]
.sbss: [0x80218768, 0x80218770]
JSystem/JKernel/JKRFileFinder.cpp:
.text: [0x800685b0, 0x80068744]
.data: [0x800de670, 0x800de6b0]
.sdata: [0x80217f50, 0x80217f60]
JSystem/JKernel/JKRArchivePub.cpp:
.text: [0x80068744, 0x80068ed0]
.data: [0x800de6b0, 0x800de740]
.sdata: [0x80217f60, 0x80217f78]
JSystem/JKernel/JKRArchivePri.cpp:
.text: [0x80068ed0, 0x80069530]
.sbss: [0x80218770, 0x80218778]
JSystem/JKernel/JKRMemArchive.cpp:
.text: [0x80069530, 0x80069a28]
.data: [0x800de740, 0x800de828]
.sdata: [0x80217f78, 0x80217f98]
JSystem/JKernel/JKRAramArchive.cpp:
.text: [0x80069a28, 0x8006a4fc]
.data: [0x800de828, 0x800de938]
.sdata: [0x80217f98, 0x80217fc8]
JSystem/JKernel/JKRDvdArchive.cpp:
.text: [0x8006a4fc, 0x8006add0]
.data: [0x800de938, 0x800dea70]
.sdata: [0x80217fc8, 0x80217fe8]
JSystem/JKernel/JKRCompArchive.cpp:
.text: [0x8006add0, 0x8006b8a4]
.data: [0x800dea70, 0x800deba8]
.sdata: [0x80217fe8, 0x80218008]
JSystem/JKernel/JKRDvdFile.cpp:
.text: [0x8006b8a4, 0x8006be0c]
.ctors: [0x800a97a0, 0x800a97a4]
.data: [0x800deba8, 0x800dec30]
.bss: [0x80207098, 0x802070b0]
.sdata: [0x80218008, 0x80218028]
JSystem/JKernel/JKRDvdRipper.cpp:
.text: [0x8006be0c, 0x8006c8fc]
.ctors: [0x800a97a4, 0x800a97a8]
.data: [0x800dec30, 0x800dec90]
.bss: [0x802070b0, 0x802070c8]
.sdata: [0x80218028, 0x80218030]
.sbss: [0x80218778, 0x802187a8]
JSystem/JKernel/JKRDvdAramRipper.cpp:
.text: [0x8006c8fc, 0x8006d608]
.ctors: [0x800a97a8, 0x800a97ac]
.bss: [0x802070c8, 0x802070e0]
.sdata: [0x80218030, 0x80218038]
.sbss: [0x802187a8, 0x802187e8]
JSystem/JKernel/JKRDecomp.cpp:
.text: [0x8006d608, 0x8006dd58]
.data: [0x800dec90, 0x800ded18]
.sdata: [0x80218038, 0x80218050]
.sbss: [0x802187e8, 0x802187f0]
JSystem/JSupport/JSUInputStream.cpp:
.text: [0x8006e168, 0x8006e3e4]
.data: [0x800ded18, 0x800dedb8]
.sdata: [0x80218050, 0x80218068]
#JSystem/JSupport/JSUFileStream.cpp: # JSUFileStream linkage disabled until we can resolve order of RTTI strings in .data
# .text: [0x8006e3e4, 0x8006e604]
# .data: [0x800dedb8, 0x800dee60]
# .sdata: [0x80218068, 0x80218088]
JSystem/JGadget/linklist.cpp:
.text: [0x8006e604, 0x8006e800]
JSystem/JUtility/JUTGamePad.cpp:
.text: [0x80070274, 0x800713b0]
.ctors: [0x800a97ac, 0x800a97b0]
.rodata: [0x800ab240, 0x800ab260]
.data: [0x800def60, 0x800defa0]
.bss: [0x802070e0, 0x80207268]
.sdata: [0x802180b8, 0x802180d0]
.sbss: [0x80218808, 0x80218838]
.sdata2: [0x802192c0, 0x80219300]
dolphin/BASE/ppcarch.c:
.text: [0x8007867c, 0x80078718]
dolphin/os/OSArena.c:
.text: [0x8007988c, 0x800798ac]
.sdata: [0x80218178, 0x80218180]
.sbss: [0x802188f8, 0x80218900]
#dolphin/os/OSCache.c:
# .text: [0x80079b40, 0x8007a01c]
# .data: [0x800dfa00, 0x800dfc30]
#dolphin/os/OSDisableInterrupts.c:
# .text: [0x8007ac24, 0x8007ac38]
dolphin/os/OSEnableInterrupts.c:
.text: [0x8007ac38, 0x8007ac4c]
dolphin/os/OSRestoreInterrupts.c:
.text: [0x8007ac4c, 0x8007ac70]
dolphin/os/OSRtc.c:
.text: [0x8007d050, 0x8007db20]
.bss: [0x80207400, 0x80207458]
dolphin/__ppc_eabi_init.cpp:
.init: [0x80003354, 0x800033a8]
.text: [0x8007fdfc, 0x8007fe90]
dolphin/gx/GXStubs.c:
.text: [0x800998d4, 0x800998d8]
MSL_C/rand.c:
.text: [0x8009f46c, 0x8009f494]
.sdata: [0x80218260, 0x80218268]
TRK/mainloop.c:
.text: [0x800A1FF4, 0x800A20EC]
TRK/nubevent.c:
.text: [0x800A20EC, 0x800A2314]
.bss: [0x802095C8, 0x802095F0]
dolphin/amcstubs/AmcExi2Stubs.c:
.text: [0x800a8cc0, 0x800a8cf0]
#TRK/nubinit.c: #things break, fix later
# .text: [0x800A2314, 0x800A2494]
# .rodata: [0x800AF750, 0x800AF770]
# .bss: [0x802095F0, 0x802095F8]
#TRK/usr_put.c:
# .text: [0x800A3468, 0x800A34F4]
#TRK/dispatch.c:
# .text: [0x800A34F4, 0x800A3590]
# .data: [0x800E2128, 0x800E21B0]
# .bss: [0x8020AFC0, 0x8020AFC8]
dolphin/odenotstub/odenotstub.c:
.text: [0x800a9770, 0x800a9780]
version.c:
.data: [0x800b05e8, 0x800b0608]
bootdata/gam_win1.c:
.data: [0x800b9140, 0x800bb500]
bootdata/gam_win2.c:
.data: [0x800bb500, 0x800bd820]
bootdata/gam_win3.c:
.data: [0x800bd820, 0x800be460]
bootdata/logo_nin.c:
.data: [0x800be460, 0x800c3140]
nintendo_hi_0.c:
.data: [0x800c3140, 0x800cca40]
libu64/gfxprint_data.c:
.data: [0x800dc810, 0x800dd090]
+8
View File
@@ -14,3 +14,11 @@ symbol_aligns:
0x81296140: 32 # .bss m_island.o
0x80904700: 32 # rom_myhome1_floor_v
0x80751140: 32 # dataobject.obj/.data/obj_zassou_tex
0x80DD61A0: 32 # dataobject/obj/.data/cKF_ckcb_r_int_hnw001_tbl (TU is aligned to 32 because of 32-byte aligned entries)
0x80F1CCA0: 32 # dataobject/obj/.data/rom_museum5_wall_pal
0x80F85720: 32 # dataobject/obj/.data/grd_player_select_evw_anime_1 (TU is aligned to 32)
0x80FACE20: 32 # dataobject/obj/.data/rom_shop4_1_floor_tex_pal
0x8074B840: 32 # dataobject/obj/.data/mFM_obj_a_01_flower_pal
0x808DF220: 32 # obj_otiba01_pal
0x809C8FA0: 32 # ef_hanabira01_0
0x80C0CBA0: 32 # crw_anrium1_pal
+1806 -2
View File
File diff suppressed because it is too large Load Diff
+2005 -1996
View File
File diff suppressed because it is too large Load Diff
+54 -28
View File
@@ -9,6 +9,8 @@ import json
import os
import pickle
import re
import subprocess
import yaml
from io import StringIO
from sys import executable as PYTHON, platform
@@ -30,6 +32,11 @@ assert os.path.exists("tools/1.3.2/mwcceppc.exe") and \
os.path.exists("tools/1.2.5n/mwcceppc.exe"), \
"Error: Codewarrior not found!"
# Check if foresta.rel.szs exists but not foresta.rel, and if so, decompress
if not os.path.exists(c.REL) and os.path.exists(c.REL_SZS):
print("Decompressing foresta.rel.szs to foresta.rel")
subprocess.call([f'./{c.ORTHRUS}', 'ncompress', 'yaz0', '-d', c.REL_SZS, c.REL])
# Check binaries were added
assert os.path.exists(c.DOL) and os.path.exists(c.REL), \
"Error: Base binaries not found!"
@@ -91,11 +98,12 @@ n.variable("ld", c.LD)
n.variable("devkitppc", c.DEVKITPPC)
n.variable("as", c.AS)
n.variable("cpp", c.CPP)
n.variable("iconv", c.ICONV)
n.variable("forcefilesgen", c.FORCEFILESGEN)
n.variable("vtxdis", c.VTXDIS)
n.variable("pal16dis", c.PAL16DIS)
n.variable("arctool", c.ARC_TOOL)
n.variable("sjiswrap", c.SJISWRAP)
n.variable("batchassetrip", c.BATCHASSETRIP)
n.newline()
##############
@@ -115,7 +123,7 @@ n.newline()
# Windows can't use && without this statement
ALLOW_CHAIN = "cmd /c " if os.name == "nt" else ""
mwcc_cmd = ALLOW_CHAIN + f"$cpp -M $in -MF $out.d $cppflags && $cc $cflags -c $in -o $out"
mwcc_cmd = ALLOW_CHAIN + f"$cpp -M $in -MF $out.d $cppflags && $sjiswrap $cc $cflags -c $in -o $out"
n.rule(
"relextern",
@@ -178,6 +186,12 @@ n.rule(
description = "Asset include generation $out"
)
n.rule(
"batchassetrip",
command = "$batchassetrip $in $asset_yml",
description="Batch asset rip $asset_yml"
)
n.rule(
"forceactivegen",
command = "$forceactivegen $in $out",
@@ -219,7 +233,7 @@ n.rule(
n.rule(
"ccs",
command = ALLOW_CHAIN + f"$cpp -M $in -MF $out.d $cppflags && $cc $cflags -S $in -o $out",
command = ALLOW_CHAIN + f"$cpp -M $in -MF $out.d $cppflags && $sjiswrap $cc $cflags -S $in -o $out",
description = "CC -S $in",
deps = "gcc",
depfile = "$out.d"
@@ -231,12 +245,6 @@ n.rule(
description = "LD $out",
)
n.rule(
"iconv",
command = "$iconv $in $out",
description = "iconv $in",
)
n.rule(
"forcefiles",
command = "$forcefilesgen $in $out $forcefiles",
@@ -261,6 +269,12 @@ n.rule(
description = "$arctool -v $in $out"
)
n.rule(
"sjiswrap",
command = "$sjiswrap $in",
description = "sjiswrap $in",
)
##########
# Assets #
##########
@@ -492,16 +506,29 @@ class AssetInclude(GeneratedInclude):
return
# Build
binary = None
asset_entries = {}
expected_files = []
for inc in includes:
n.build(
inc.asset_path,
rule="assetrip",
inputs=inc.asset.binary,
variables={
"addrs" : f"{inc.asset.start:x} {inc.asset.end:x}"
}
)
if binary == None:
binary = inc.asset.binary
asset_entries[inc.asset_path] = [inc.asset.start, inc.asset.end]
expected_files.append(inc.asset_path)
with open(f"{c.BUILDDIR}/{binary[7:10]}_assetrip.yml", 'w') as asset_yml:
yaml.dump(asset_entries, asset_yml)
n.build(
outputs=expected_files,
rule = "batchassetrip",
inputs = binary,
variables = {
"asset_yml": f"{c.BUILDDIR}/{binary[7:10]}_assetrip.yml"
}
)
# Include
for inc in includes:
if inc.asset.convtype == "vtx":
n.build(
inc.path,
@@ -623,14 +650,19 @@ class AsmSource(Source):
rule = "as",
inputs = self.src_path
)
class CSource(Source):
def __init__(self, ctx: c.SourceContext, path: str):
if path.startswith("src/static/dolphin/"):
self.cflags = c.SDK_FLAGS
self.cc = c.OCC
elif path.startswith("src/static/jaudio_NES/"):
self.cflags = c.JAUDIO_CFLAGS
if path.startswith("src/static/jaudio_NES/internal/"):
self.cflags = c.JAUDIO_FUNC_ALIGN_32_CFLAGS
elif path.startswith("src/static/jaudio_NES/game/"):
self.cflags = c.JAUDIO_USER_CFLAGS
else:
self.cflags = c.JAUDIO_CFLAGS
self.cc = c.CC
elif path.startswith("src/static/JSystem/JGadget/"):
self.cflags = c.JSYSTEM_JGADGET_CFLAGS
@@ -665,7 +697,6 @@ class CSource(Source):
else:
self.cflags = ctx.cflags
self.cc = c.CC_R
self.iconv_path = f"$builddir/iconv/{path}"
# Find generated includes
with open(path, encoding="utf-8") as f:
@@ -675,16 +706,10 @@ class CSource(Source):
super().__init__(True, path, f"$builddir/{os.path.splitext(path)[0]}.o", gen_includes)
def build(self):
n.build(
self.iconv_path,
rule="iconv",
inputs=self.src_path
)
n.build(
self.o_path,
rule = "cc",
inputs = self.iconv_path,
inputs = self.src_path,
implicit = [inc.path for inc in self.gen_includes],
variables = {
"cc" : self.cc,
@@ -696,7 +721,7 @@ class CSource(Source):
n.build(
self.s_path,
rule = "ccs",
inputs = self.iconv_path,
inputs = self.src_path,
implicit = [inc.path for inc in self.gen_includes],
variables = {
"cflags" : self.cflags
@@ -900,6 +925,7 @@ n.build(
inputs = c.REL_SHA,
implicit = [c.REL_OUT]
)
n.default(c.REL_OK)
# Optional full binary disassembly
+26
View File
@@ -0,0 +1,26 @@
@echo off
echo "Please ensure Docker Desktop is running before continuing."
pause
:: Check if the compilers are present. If any one compiler doesn't exist, the download process will be initiated.
IF exist tools\1.2.5n\ ( echo 1.2.5n exists ) ELSE ( goto compilers )
IF exist tools\1.3.2\ ( echo 1.3.2 exists ) ELSE ( goto compilers )
IF exist tools\1.3.2r\ ( echo 1.3.2r exists ) ELSE ( goto compilers )
goto buildimage
:buildimage
docker build -t ac-decomp .
echo "Docker image setup is now complete. You may proceed with the instructions."
pause
exit
:compilers
curl -O https://files.decomp.dev/compilers_latest.zip
mkdir compilers_temp
powershell -command "Expand-Archive -LiteralPath 'compilers_latest.zip' -DestinationPath compilers_temp"
:: Only copy compilers that the user doesn't already have.
IF exist tools\1.2.5n\ ( echo 1.2.5n already exists, skipping copy ) ELSE ( xcopy compilers_temp\GC\1.2.5n\ tools\1.2.5n\ /E /I )
IF exist tools\1.3.2\ ( echo 1.3.2 already exists, skipping copy ) ELSE ( xcopy compilers_temp\GC\1.3.2\ tools\1.3.2\ /E /I )
IF exist tools\1.3.2r\ ( echo 1.3.2r already exists, skipping copy ) ELSE ( xcopy compilers_temp\GC\1.3.2r\ tools\1.3.2r\ /E /I )
del compilers_latest.zip
rmdir /S /Q compilers_temp\
goto buildimage
+31
View File
@@ -0,0 +1,31 @@
echo "Please ensure Docker is installed before continuing."
read -p "Press Enter to continue or CTRL-C to exit."
if [ -d "tools/1.2.5n" ]; then echo "1.2.5n exists" && export one_two_five_n_exist=1; fi
if [ -d "tools/1.3.2" ]; then echo "1.3.2 exists" && export one_three_two_exist=1; fi
if [ -d "tools/1.3.2r" ]; then echo "1.3.2r exists" && export one_three_two_r_exist=1; fi
if [ "$one_two_five_n_exist" -eq 1 ] && [ "$one_three_two_exist" -eq 1 ] && [ "$one_three_two_r_exist" -eq 1 ]; then docker build -t ac-decomp . && echo "Docker image setup is now complete. You may proceed with the instructions." && exit; fi
if command -v curl &> /dev/null; then
curl -O https://files.decomp.dev/compilers_latest.zip
elif command -v wget &> /dev/null; then
wget https://files.decomp.dev/compilers_latest.zip
else
echo "You do not seem to have curl or wget installed on this system. Please install one or the other to continue."
exit 0
fi
mkdir compilers_temp
if command -v unzip &> /dev/null; then
unzip compilers_latest.zip -d compilers_temp
else
echo "You do not seem to have unzip installed on this system. Please install it to continue."
rm -r compilers_temp compilers_latest.zip
exit 1
fi
if [ ! -d "tools/1.2.5n" ]; then mv compilers_temp/GC/1.2.5n/ tools/; fi
if [ ! -d "tools/1.3.2" ]; then mv compilers_temp/GC/1.3.2/ tools/; fi
if [ ! -d "tools/1.3.2r" ]; then mv compilers_temp/GC/1.3.2r/ tools/; fi
rm -r compilers_temp compilers_latest.zip
docker build -t ac-decomp .
echo "Docker image setup is now complete. You may proceed with the instructions."
-6
View File
@@ -40,12 +40,6 @@ Once files have been extracted you will need to copy the following files into th
Make sure to rename `main.dol` to `static.dol`.
You will also need to decompress `foresta.rel.szs` using `yaz0` found in `tools/` using the following command:
~~~~console
yaz0 -d foresta.rel.szs foresta.rel
~~~~
It is recommended that you also copy the following symbol maps for reference:
- `foresta.map`
- `static.map`
+26 -1
View File
@@ -8,6 +8,32 @@
extern "C" {
#endif
#define Ac_Balloon_JOINT_NUM 8
typedef struct balloon_actor_s BALLOON_ACTOR;
struct balloon_actor_s {
ACTOR actor_class;
cKF_SkeletonInfo_R_c keyframe;
s_xyz work[Ac_Balloon_JOINT_NUM];
s_xyz morph[Ac_Balloon_JOINT_NUM];
int _244;
Mtx mtx[2][4];
int main_mode;
int saved_type;
int setup_mode;
int balloon_type;
s_xyz angle;
s16 lean;
f32 start_frame;
f32 speed;
xyz_t pos;
int _474;
};
extern void Ac_Balloon_request_fly(ACTOR* actorx, GAME* game, int balloon_type, s_xyz* angle_p, s16 lean, xyz_t* pos_p,
f32 start_frame, f32 speed);
extern ACTOR_PROFILE Balloon_Profile;
#ifdef __cplusplus
@@ -15,4 +41,3 @@ extern ACTOR_PROFILE Balloon_Profile;
#endif
#endif
+46 -47
View File
@@ -17,65 +17,65 @@ extern "C" {
#define aBTD_PROGRAM_SIZE 0x15244
enum {
aBTD_ACTION_SENDO_BIRTH_WAIT,
aBTD_ACTION_PL_RIDE_ON_START_WAIT,
aBTD_ACTION_PL_RIDE_ON_END_WAIT,
aBTD_ACTION_START_CALL_END_WAIT,
aBTD_ACTION_SONG_BGM_START_WAIT,
aBTD_ACTION_SING_SENDO_START_WAIT,
aBTD_ACTION_SING_SENDO_MSG_SET_WAIT,
aBTD_ACTION_SENDO_DIALOGUE_START_WAIT,
aBTD_ACTION_SING_SENDO_START_WAIT2,
aBTD_ACTION_MOVE_BOAT_END_WAIT,
aBTD_ACTION_TOUCH_WHARF_END_WAIT,
aBTD_ACTION_PL_RIDE_OFF_START_WAIT,
aBTD_ACTION_PL_RIDE_OFF_END_WAIT,
aBTD_ACTION_ANCHOR_WAIT,
aBTD_ACTION_SENDO_BIRTH_WAIT,
aBTD_ACTION_PL_RIDE_ON_START_WAIT,
aBTD_ACTION_PL_RIDE_ON_END_WAIT,
aBTD_ACTION_START_CALL_END_WAIT,
aBTD_ACTION_SONG_BGM_START_WAIT,
aBTD_ACTION_SING_SENDO_START_WAIT,
aBTD_ACTION_SING_SENDO_MSG_SET_WAIT,
aBTD_ACTION_SENDO_DIALOGUE_START_WAIT,
aBTD_ACTION_SING_SENDO_START_WAIT2,
aBTD_ACTION_MOVE_BOAT_END_WAIT,
aBTD_ACTION_TOUCH_WHARF_END_WAIT,
aBTD_ACTION_PL_RIDE_OFF_START_WAIT,
aBTD_ACTION_PL_RIDE_OFF_END_WAIT,
aBTD_ACTION_ANCHOR_WAIT,
aBTD_ACTION_NUM
aBTD_ACTION_NUM
};
enum {
aBTD_DEMO_PL_RIDE_ON_START,
aBTD_DEMO_PL_RIDE_ON_END,
aBTD_DEMO_START_CALL_END,
aBTD_DEMO_MOVE_BOAT_END,
aBTD_DEMO_TOUCH_WHARF_END,
aBTD_DEMO_PL_RIDE_OFF_START,
aBTD_DEMO_PL_RIDE_OFF_END,
aBTD_DEMO_ANCHOR,
aBTD_DEMO_PL_RIDE_ON_START,
aBTD_DEMO_PL_RIDE_ON_END,
aBTD_DEMO_START_CALL_END,
aBTD_DEMO_MOVE_BOAT_END,
aBTD_DEMO_TOUCH_WHARF_END,
aBTD_DEMO_PL_RIDE_OFF_START,
aBTD_DEMO_PL_RIDE_OFF_END,
aBTD_DEMO_ANCHOR,
aBTD_DEMO_NUM
aBTD_DEMO_NUM
};
typedef struct boat_demo_s BOAT_DEMO_ACTOR;
#define aBTD_GET_DEMO_ACTOR() (BOAT_DEMO_ACTOR*)(Common_Get(clip).demo_clip2->class)
#define aBTD_GET_DEMO_ACTOR() (BOAT_DEMO_ACTOR*)(Common_Get(clip).demo_clip2->demo_class)
typedef void (*aBTD_PROC)(BOAT_DEMO_ACTOR*, GAME_PLAY*);
struct boat_demo_s {
ACTOR actor_class;
int action;
aBTD_PROC action_proc;
int demo_act;
int song_bgm_timer;
BOAT_ACTOR* boat_actor;
NPC_SENDO_ACTOR* npc_sendo_actor;
EV_CASTAWAY_ACTOR* castaway_actor;
int at_island;
xyz_t passenger_ofs;
f32 boat_speed;
int island_npc_info_registered;
u8* island_gba_loader_p;
u8* island_gba_program_p;
u8 player_pattern;
u8 sing_dialog_ofs;
u8 sing_2nd_part;
u8 sing_2nd_part_bgm_no;
int sing_msg_no;
u16 touch_wharf_timer;
u8 touching_wharf;
ACTOR actor_class;
int action;
aBTD_PROC action_proc;
int demo_act;
int song_bgm_timer;
BOAT_ACTOR* boat_actor;
NPC_SENDO_ACTOR* npc_sendo_actor;
EV_CASTAWAY_ACTOR* castaway_actor;
int at_island;
xyz_t passenger_ofs;
f32 boat_speed;
int island_npc_info_registered;
u8* island_gba_loader_p;
u8* island_gba_program_p;
u8 player_pattern;
u8 sing_dialog_ofs;
u8 sing_2nd_part;
u8 sing_2nd_part_bgm_no;
int sing_msg_no;
u16 touch_wharf_timer;
u8 touching_wharf;
};
extern ACTOR_PROFILE Boat_Demo_Profile;
@@ -85,4 +85,3 @@ extern ACTOR_PROFILE Boat_Demo_Profile;
#endif
#endif
+1 -1
View File
@@ -3,6 +3,7 @@
#include "types.h"
#include "m_actor.h"
#include "ac_structure.h"
#ifdef __cplusplus
extern "C" {
@@ -15,4 +16,3 @@ extern ACTOR_PROFILE Bridge_A_Profile;
#endif
#endif
+32
View File
@@ -0,0 +1,32 @@
#ifndef AC_COMMON_H
#define AC_COMMON_H
#include "types.h"
#include "m_actor.h"
#include "c_keyframe.h"
#ifdef __cplusplus
extern "C" {
#endif
/* sizeof(aCM_anime_c) == 0x7C */
typedef struct actor_common_anime_s {
/* 0x00 */ int cur_keyframe;
/* 0x04 */ int state;
/* 0x08 */ cKF_SkeletonInfo_R_c keyframe;
/* 0x78 */ int anime_no;
} aCMN_anime_c;
/* sizeof(CMN_ACTOR) == 0x210 */
typedef struct actor_common_s {
/* 0x000 */ ACTOR actor_class;
/* 0x174 */ aCMN_anime_c anime;
/* 0x1F0 */ ClObjPipe_c col_pipe;
/* 0x20C */ int act;
} CMN_ACTOR;
#ifdef __cplusplus
}
#endif
#endif
+12 -1
View File
@@ -8,6 +8,18 @@
extern "C" {
#endif
enum {
EffectBG_EFFECT_SHAKE,
EffectBG_EFFECT_CUT_LEFT,
EffectBG_EFFECT_CUT_RIGHT,
EffectBG_EFFECT_SHAKE_SMALL,
EffectBG_EFFECT_SHAKE_LARGE,
EffectBG_EFFECT_NUM
};
typedef void (*EffectBG_MAKE_EFFECTBG_PROC)(GAME*, s16, s16, xyz_t*);
extern ACTOR_PROFILE Effectbg_Profile;
#ifdef __cplusplus
@@ -15,4 +27,3 @@ extern ACTOR_PROFILE Effectbg_Profile;
#endif
#endif
+16 -1
View File
@@ -3,11 +3,27 @@
#include "types.h"
#include "m_actor.h"
#include "ac_npc.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ac_ev_broker EV_BROKER_ACTOR;
typedef void (*aEBRK_ACT_PROC)(EV_BROKER_ACTOR*);
/* sizeof(EV_BROKER_ACTOR) == 0x9AC */
struct ac_ev_broker {
/* 0x000 */ NPC_ACTOR npc_class;
/* 0x994 */ int action;
/* 0x998 */ int next_action;
/* 0x99C */ int action_step;
/* 0x9A0 */ aEBRK_ACT_PROC action_proc;
/* 0x9A4 */ ACTOR* tent_actor;
/* 0x9A8 */ u8 pl_talk_lock;
};
extern ACTOR_PROFILE Ev_Broker_Profile;
#ifdef __cplusplus
@@ -15,4 +31,3 @@ extern ACTOR_PROFILE Ev_Broker_Profile;
#endif
#endif
+23 -1
View File
@@ -8,6 +8,29 @@
extern "C" {
#endif
typedef struct gyo_release_actor_s GYO_RELEASE_ACTOR;
/* sizeof(GYO_RELEASE_ACTOR) == 0x1BC */
struct gyo_release_actor_s {
/* 0x000 */ ACTOR actor_class;
/* 0x174 */ ACTOR* gyoei_actor_p;
/* 0x178 */ int gyo_type;
/* 0x17C */ int size_type;
/* 0x180 */ int anime_frame;
/* 0x184 */ int segment;
/* 0x188 */ int _188;
/* 0x18C */ ClObjPipe_c col_pipe;
/* 0x1A8 */ s16 angle_xz;
/* 0x1AA */ s16 angle_y;
/* 0x1AC */ s16 angle_y_add;
/* 0x1AE */ s16 exist_timer;
/* 0x1B0 */ f32 shadow_scale;
/* 0x1B4 */ u8 exist_flag;
/* 0x1B5 */ u8 _1B5;
/* 0x1B6 */ s16 revert_position_flag;
/* 0x1B8 */ int revert_position_timer;
};
extern ACTOR_PROFILE Gyo_Release_Profile;
#ifdef __cplusplus
@@ -15,4 +38,3 @@ extern ACTOR_PROFILE Gyo_Release_Profile;
#endif
#endif
+77 -2
View File
@@ -2,12 +2,88 @@
#define AC_GYOEI_H
#include "types.h"
#include "m_actor.h"
#include "ac_tools.h"
#ifdef __cplusplus
extern "C" {
#endif
#define aGYO_MAX_GYOEI 2
enum {
aGYO_TYPE_TEST,
aGYO_TYPE_KASEKI,
aGYO_TYPE_NUM
};
enum {
aGYO_ROD_NORMAL,
aGYO_ROD_GOLDEN,
aGYO_ROD_NUM
};
enum {
aGYO_DRAW_TYPE_GYOEI,
aGYO_DRAW_TYPE_FISH,
aGYO_DRAW_TYPE_NUM
};
typedef struct gyo_ctrl_actor_s aGYO_CTRL_ACTOR;
typedef void (*aGYO_ACT_PROC)(ACTOR*, GAME*);
/* sizeof(aGYO_CTRL_ACTOR) == 0x250 */
struct gyo_ctrl_actor_s {
/* 0x000 */ TOOLS_ACTOR tools_class;
/* 0x1CC */ ACTOR* linked_actor; /* Generally UKI_ACTOR */
/* 0x1D0 */ int exist;
/* 0x1D4 */ int draw_type;
/* 0x1D8 */ int gyo_type;
/* 0x1DC */ s16 size_type;
/* 0x1E0 */ int action;
/* 0x1E4 */ aGYO_ACT_PROC act_proc;
/* 0x1E8 */ int anim_frame;
/* 0x1EC */ f32 speed_step;
/* 0x1F0 */ f32 speed;
/* 0x1F4 */ f32 range;
/* 0x1F8 */ int _1F8;
/* 0x1FC */ ClObjPipe_c col_pipe;
/* 0x218 */ int work0;
/* 0x21C */ f32 fwork0;
/* 0x220 */ f32 fwork1;
/* 0x224 */ f32 fwork2;
/* 0x228 */ f32 fwork3;
/* 0x22C */ s16 swork0;
/* 0x22E */ s16 swork1;
/* 0x230 */ s16 swork2;
/* 0x232 */ s16 swork3;
/* 0x234 */ s16 swork4;
/* 0x236 */ s16 move_counter;
/* 0x238 */ s16 move_angle;
/* 0x23A */ s16 pattern_subcounter;
/* 0x23C */ s16 pattern_counter;
/* 0x23E */ s16 touch_counter;
/* 0x240 */ u16 gyo_flags;
/* 0x242 */ u8 swim_flag;
/* 0x243 */ u8 escape_flag;
/* 0x244 */ int alpha;
/* 0x248 */ int col_flags;
/* 0x24C */ u8* overlay_p;
};
typedef struct gyoei_actor_s GYOEI_ACTOR;
/* sizeof(GYOEI_ACTOR) == 0x628 */
struct gyoei_actor_s {
/* 0x000 */ ACTOR actor_class;
/* 0x174 */ aGYO_CTRL_ACTOR ctrl[aGYO_MAX_GYOEI];
/* 0x614 */ u8 exist[4];
/* 0x618 */ int segment_type[4];
};
extern ACTOR_PROFILE Gyoei_Profile;
#ifdef __cplusplus
@@ -15,4 +91,3 @@ extern ACTOR_PROFILE Gyoei_Profile;
#endif
#endif
+42 -51
View File
@@ -2,79 +2,71 @@
#define AC_HANIWA_H
#include "types.h"
#include "m_actor.h"
#include "c_keyframe.h"
#include "ac_common.h"
#include "m_collision_obj.h"
#ifdef __cplusplus
extern "C" {
#endif
#define aHNW_JOINT_NUM 8
typedef struct actor_haniwa_s HANIWA_ACTOR;
typedef void (*HANIWA_ACTOR_PROC)(ACTOR*, GAME*);
enum haniwa_msg {
aHNW_MSG_NO_OWNER,
aHNW_MSG_PROCEEDS,
aHNW_MSG_NORMAL,
aHNW_MSG_OTHER_OWNER,
aHNW_MSG_NEED_FRIEND,
aHNW_MSG_NO_OWNER,
aHNW_MSG_PROCEEDS,
aHNW_MSG_NORMAL,
aHNW_MSG_OTHER_OWNER,
aHNW_MSG_NEED_FRIEND,
aHNW_MSG_NUM
aHNW_MSG_NUM
};
enum haniwa_handover {
aHNW_HANDOVER_YES,
aHNW_HANDOVER_NO,
aHNW_HANDOVER_YES,
aHNW_HANDOVER_NO,
aHNW_HANDOVER_NUM
aHNW_HANDOVER_NUM
};
enum haniwa_action {
aHNW_ACTION_WAIT,
aHNW_ACTION_DANCE,
aHNW_ACTION_CHECK_PROCEEDS,
aHNW_ACTION_TALK_WITH_MASTER,
aHNW_ACTION_TALK_WITH_MASTER2,
aHNW_ACTION_TALK_END_WAIT,
aHNW_ACTION_MENU_OPEN_WAIT,
aHNW_ACTION_MENU_END_WAIT,
aHNW_ACTION_TALK_WITH_GUEST,
aHNW_ACTION_MENU_OPEN_WAIT_FOR_GUEST,
aHNW_ACTION_MENU_END_WAIT_FOR_GUEST,
aHNW_ACTION_ROOF_CHECK,
aHNW_ACTION_SAVE_CHECK,
aHNW_ACTION_SAVE_END_WAIT,
aHNW_ACTION_PL_APPROACH_DOOR,
aHNW_ACTION_DOOR_OPEN_WAIT,
aHNW_ACTION_DOOR_OPEN_TIMER,
aHNW_ACTION_WAIT,
aHNW_ACTION_DANCE,
aHNW_ACTION_CHECK_PROCEEDS,
aHNW_ACTION_TALK_WITH_MASTER,
aHNW_ACTION_TALK_WITH_MASTER2,
aHNW_ACTION_TALK_END_WAIT,
aHNW_ACTION_MENU_OPEN_WAIT,
aHNW_ACTION_MENU_END_WAIT,
aHNW_ACTION_TALK_WITH_GUEST,
aHNW_ACTION_MENU_OPEN_WAIT_FOR_GUEST,
aHNW_ACTION_MENU_END_WAIT_FOR_GUEST,
aHNW_ACTION_ROOF_CHECK,
aHNW_ACTION_SAVE_CHECK,
aHNW_ACTION_SAVE_END_WAIT,
aHNW_ACTION_PL_APPROACH_DOOR,
aHNW_ACTION_DOOR_OPEN_WAIT,
aHNW_ACTION_DOOR_OPEN_TIMER,
aHNW_ACTION_NUM
aHNW_ACTION_NUM
};
/* sizeof(HANIWA_ACTOR) == 0x288 */
struct actor_haniwa_s {
ACTOR actor_class;
int saved_current_frame;
int keyframe_state;
cKF_SkeletonInfo_R_c keyframe;
int animation_state;
ClObjPipe_c col_pipe;
int action;
char* bank_ram_start;
s_xyz keyframe_work_area[8];
s_xyz keyframe_morph_area[8];
HANIWA_ACTOR_PROC action_proc;
f32 anim_frame_speed;
int player_approach_door_stage;
u16 door_approach_frame;
u8 submenu_type;
u8 house_idx;
u8 playing_save_bgm;
/* 0x000 */ CMN_ACTOR common_actor_class;
/* 0x210 */ char* bank_ram_start;
/* 0x214 */ s_xyz keyframe_work_area[aHNW_JOINT_NUM];
/* 0x244 */ s_xyz keyframe_morph_area[aHNW_JOINT_NUM];
/* 0x274 */ HANIWA_ACTOR_PROC action_proc;
/* 0x278 */ f32 anim_frame_speed;
/* 0x27C */ int player_approach_door_stage;
/* 0x280 */ u16 door_approach_frame;
/* 0x282 */ u8 submenu_type;
/* 0x283 */ u8 house_idx;
/* 0x284 */ u8 playing_save_bgm;
};
extern ACTOR_PROFILE Haniwa_Profile;
@@ -84,4 +76,3 @@ extern ACTOR_PROFILE Haniwa_Profile;
#endif
#endif
+8 -1
View File
@@ -8,6 +8,14 @@
extern "C" {
#endif
typedef mActor_name_t (*aHTBL_SEARCH_PICK_UP_ITEM_LAYER2_PROC)(GAME*);
typedef struct htable_clip_s {
aHTBL_SEARCH_PICK_UP_ITEM_LAYER2_PROC search_pick_up_item_layer2_proc;
xyz_t pickup_pos;
s16 pickup_counter;
} aHTBL_Clip_c;
extern ACTOR_PROFILE Htable_Profile;
#ifdef __cplusplus
@@ -15,4 +23,3 @@ extern ACTOR_PROFILE Htable_Profile;
#endif
#endif
+25 -12
View File
@@ -3,34 +3,47 @@
#include "types.h"
#include "m_actor.h"
#include "ac_npc_rcn_guide.h"
#include "ac_npc_station_master.h"
#include "ac_train1.h"
#include "m_demo.h"
#ifdef __cplusplus
extern "C" {
#endif
#define aID_PLR_START_X_POS (mFI_BK_WORLDSIZE_X_F * 3 + 1.25f * mFI_UT_WORLDSIZE_X_F)
#define aID_PLR_START_Z_POS (mFI_BK_WORLDSIZE_Z_F * 1 + 3 * mFI_UT_WORLDSIZE_Z_F)
#define aID_OFF_UT_X_POS (mFI_BK_WORLDSIZE_X_F * 3 + 7 * mFI_UT_WORLDSIZE_X_F + mFI_UT_WORLDSIZE_HALF_X_F)
#define aID_OFF_UT_Z_POS (mFI_BK_WORLDSIZE_Z_F * 1 + 5 * mFI_UT_WORLDSIZE_Z_F) /* A @ 5 */
#define aID_OUT_OF_STATION_Z_POS (mFI_BK_WORLDSIZE_Z_F * 1 + 8.25f * mFI_UT_WORLDSIZE_Z_F)
enum {
aID_STATE_0,
aID_STATE_INITIAL,
aID_STATE_TAKEN_HOUSE,
aID_STATE_FREE_HOUSE,
// more?
aID_STATE_NUM
};
typedef struct actor_intor_demo_s INTRO_DEMO_ACTOR;
typedef struct actor_intro_demo_s INTRO_DEMO_ACTOR;
struct actor_intor_demo_s {
typedef void (*aID_ACT_PROC)(INTRO_DEMO_ACTOR*, GAME_PLAY*);
struct actor_intro_demo_s {
ACTOR actor_class;
int action;
int rcn_action;
void (*action_proc)(ACTOR*, GAME*);
void* train1_actor_p; // TODO: correct type
void* station_master_actor_p; // TODO: correct type
void* rcn_guide_actor_p; // TODO: correct type
int player_in_intro_demo;
int next_action;
aID_ACT_PROC action_proc;
TRAIN1_ACTOR* train1_actor_p;
ACTOR* station_master_actor_p; // TODO: correct type
ACTOR* rcn_guide_actor_p; // TODO: correct type
int player_in_house;
int player_intro_demo_state;
int selected_house;
int _198;
int house_idx;
int talk_flag;
u8 first_field_bgm_state;
int _1A0;
int _1A4;
+3
View File
@@ -296,6 +296,9 @@ extern u8 aMR_GetAlphaEdge(u16 ftr_name);
extern int aMR_DrawDolphinMode(u16 ftr_name);
extern Gfx* aMR_IconNo2Gfx1(int icon_no);
extern Gfx* aMR_IconNo2Gfx2(int icon_no);
extern int aMR_RadioBgmNow(void);
extern void aMR_ThrowItem_FurnitureLock(void);
extern void aMR_ThrowItem_FurnitureUnlock(void);
#ifdef __cplusplus
}
+409 -299
View File
@@ -9,6 +9,7 @@
#include "m_actor_dlftbls.h"
#include "m_npc.h"
#include "c_keyframe.h"
#include "ac_npc_anim_def.h"
#ifdef __cplusplus
extern "C" {
@@ -24,43 +25,102 @@ extern "C" {
#define aNPC_SPNPC_BIT_SET(field, bit) ((field) |= (1 << (bit)))
#define aNPC_SPNPC_BIT_CLR(field, bit) ((field) &= ~(1 << (bit)))
enum {
aNPC_JOINT_BASE_ROOT,
aNPC_JOINT_BASE,
aNPC_JOINT_LFOOT_ROOT,
aNPC_JOINT_LFOOT1,
aNPC_JOINT_LFOOT2,
aNPC_JOINT_LFOOT3,
aNPC_JOINT_RFOOT_ROOT,
aNPC_JOINT_RFOOT1,
aNPC_JOINT_RFOOT2,
aNPC_JOINT_RFOOT3,
aNPC_JOINT_TAIL_ROOT,
aNPC_JOINT_TAIL1,
aNPC_JOINT_TAIL2,
aNPC_JOINT_CHEST,
aNPC_JOINT_LARM_ROOT,
aNPC_JOINT_LARM1,
aNPC_JOINT_LARM2,
aNPC_JOINT_RARM_ROOT,
aNPC_JOINT_RARM1,
aNPC_JOINT_RARM2,
aNPC_JOINT_HAND,
aNPC_JOINT_HEAD_ROOT,
aNPC_JOINT_MOUTH_ROOT,
aNPC_JOINT_MOUTH,
aNPC_JOINT_HEAD,
aNPC_JOINT_FEEL,
aNPC_JOINT_NUM
};
typedef struct ac_npc_clip_s aNPC_Clip_c;
#define aNPC_EYE_TEX_NUM 8
#define aNPC_MOUTH_TEX_NUM 6
/* sizeof(aNPC_draw_tex_data_c) == 0x4C */
typedef struct ac_npc_draw_data_tex_s {
/* 0x00 */ u8* texture; // main animal texture
/* 0x04 */ u16* palette; // palette for animal
/* 0x08 */ u8* eye_texture[aNPC_EYE_TEX_NUM];
/* 0x28 */ u8* mouth_texture[aNPC_MOUTH_TEX_NUM];
/* 0x40 */ int _40;
/* 0x44 */ int _44;
/* 0x48 */ int _48;
} aNPC_draw_tex_data_c;
/* sizeof(aNPC_draw_data_c) == 0x6C */
typedef struct npc_draw_data_s {
s16 model_bank;
s16 texture_bank;
u8 _04[0x68]; // TODO
/* 0x00 */ s16 model_bank;
/* 0x02 */ s16 texture_bank;
/* 0x04 */ cKF_Skeleton_R_c* model_skeleton;
/* 0x08 */ aNPC_draw_tex_data_c tex_data;
/* 0x54 */ f32 scale;
/* 0x58 */ int talk_type;
/* 0x5C */ u8 species_sub_idx; // index into the current species type
/* 0x5D */ u8 umbrella_type; // default umbrella type -- only used for special NPCs
/* 0x5E */ u8 eye_height; // height of "eye" from the ground
/* 0x5F */ u8 _5F;
/* 0x60 */ u16 _60;
/* 0x62 */ u16 voice_type; // voice/melody type
/* 0x64 */ s16 col_radius; // collision pipe radius
/* 0x66 */ s16 col_height; // collision pipe height
/* 0x68 */ s16 accessory_type; // type of accessory
/* 0x6A */ s16 accessory_joint; // joint the accessory is attached to
} aNPC_draw_data_c;
enum {
aNPC_ATTENTION_TYPE_NONE,
aNPC_ATTENTION_TYPE_ACTOR,
aNPC_ATTENTION_TYPE_POSITION,
aNPC_ATTENTION_TYPE_NONE,
aNPC_ATTENTION_TYPE_ACTOR,
aNPC_ATTENTION_TYPE_POSITION,
aNPC_ATTENTION_TYPE_NUM
};
enum {
aNPC_THINK_WAIT,
aNPC_THINK_WANDER,
aNPC_THINK_WANDER2,
aNPC_THINK_GO_HOME,
aNPC_THINK_INTO_HOUSE,
aNPC_THINK_LEAVE_HOUSE,
aNPC_THINK_IN_BLOCK,
aNPC_THINK_PITFALL,
aNPC_THINK_SLEEP,
aNPC_THINK_SPECIAL,
aNPC_THINK_NUM
aNPC_ATTENTION_TYPE_NUM
};
enum {
aNPC_THINK_TYPE_INIT,
aNPC_THINK_TYPE_CHK_INTERRUPT,
aNPC_THINK_TYPE_MAIN,
aNPC_THINK_WAIT,
aNPC_THINK_WANDER,
aNPC_THINK_WANDER2,
aNPC_THINK_GO_HOME,
aNPC_THINK_INTO_HOUSE,
aNPC_THINK_LEAVE_HOUSE,
aNPC_THINK_IN_BLOCK,
aNPC_THINK_PITFALL,
aNPC_THINK_SLEEP,
aNPC_THINK_SPECIAL,
aNPC_THINK_TYPE_NUM
aNPC_THINK_NUM
};
enum {
aNPC_THINK_TYPE_INIT,
aNPC_THINK_TYPE_CHK_INTERRUPT,
aNPC_THINK_TYPE_MAIN,
aNPC_THINK_TYPE_NUM
};
typedef void (*aNPC_TALK_REQUEST_PROC)(ACTOR*, GAME*);
@@ -68,13 +128,13 @@ typedef int (*aNPC_TALK_INIT_PROC)(ACTOR*, GAME*);
typedef int (*aNPC_TALK_END_CHECK_PROC)(ACTOR*, GAME*);
typedef struct npc_ct_data_s {
mActor_proc move_proc;
mActor_proc draw_proc;
int _08;
aNPC_TALK_REQUEST_PROC talk_request_proc;
aNPC_TALK_INIT_PROC talk_init_proc;
aNPC_TALK_END_CHECK_PROC talk_end_check_proc;
int _18;
mActor_proc move_proc;
mActor_proc draw_proc;
int _08;
aNPC_TALK_REQUEST_PROC talk_request_proc;
aNPC_TALK_INIT_PROC talk_init_proc;
aNPC_TALK_END_CHECK_PROC talk_end_check_proc;
int _18;
} aNPC_ct_data_c;
typedef int (*aNPC_SETUP_ACTOR_PROC)(GAME_PLAY*, mActor_name_t, s8, int, s16, int, int, int, int);
@@ -94,6 +154,7 @@ typedef void (*aNPC_MOVE_AFTER_PROC)(ACTOR*, GAME*);
typedef void (*aNPC_DRAW_PROC)(ACTOR*, GAME*);
typedef void (*aNPC_REBUILD_DMA_PROC)();
typedef void (*aNPC_TALK_DEMO_PROC)(ACTOR*);
typedef void (*aNPC_ANIMATION_INIT_PROC)(ACTOR*, int, int);
typedef void (*aNPC_CHG_SCHEDULE_PROC)(NPC_ACTOR*, GAME_PLAY*, u8);
typedef int (*aNPC_CLIP_THINK_PROC)(NPC_ACTOR*, GAME_PLAY*, int, int);
@@ -101,115 +162,165 @@ typedef int (*aNPC_CLIP_THINK_PROC)(NPC_ACTOR*, GAME_PLAY*, int, int);
typedef int (*aNPC_FORCE_CALL_REQ_PROC)(NPC_ACTOR*, int);
struct ac_npc_clip_s {
/* 0x000 */ aNPC_SETUP_ACTOR_PROC setupActor_proc;
/* 0x004 */ void* _004;
/* 0x008 */ aNPC_FREE_OVERLAY_AREA_PROC free_overlay_area_proc;
/* 0x00C */ aNPC_GET_ACTOR_AREA_PROC get_actor_area_proc;
/* 0x010 */ aNPC_FREE_ACTOR_AREA_PROC free_actor_area_proc;
/* 0x014 */ aNPC_DMA_DRAW_DATA_PROC dma_draw_data_proc;
/* 0x018 */ aNPC_SET_ATTENTION_REQUEST_PROC set_attention_request_proc;
/* 0x01C */ void* _01C[(0x0CC - 0x01C) / sizeof(void*)];
/* 0x0CC */ aNPC_BIRTH_CHECK_PROC birth_check_proc;
/* 0x0D0 */ aNPC_CT_PROC ct_proc;
/* 0x0D4 */ aNPC_DT_PROC dt_proc;
/* 0x0D8 */ aNPC_SAVE_PROC save_proc;
/* 0x0DC */ aNPC_INIT_PROC init_proc;
/* 0x0E0 */ aNPC_MOVE_PROC move_proc;
/* 0x0E4 */ aNPC_MOVE_BEFORE_PROC move_before_proc;
/* 0x0E8 */ aNPC_MOVE_AFTER_PROC move_after_proc;
/* 0x0EC */ void* _0EC;
/* 0x0F0 */ void* _0F0;
/* 0x0F4 */ aNPC_DRAW_PROC draw_proc;
/* 0x0F8 */ aNPC_REBUILD_DMA_PROC rebuild_dma_proc;
/* 0x0FC */ void* _0FC[(0x114 - 0x0FC) / sizeof(void*)];
/* 0x114 */ aNPC_ANIMATION_INIT_PROC animation_init_proc;
/* 0x118 */ aNPC_CHG_SCHEDULE_PROC chg_schedule_proc;
/* 0x11C */ void* _11C;
/* 0x120 */ aNPC_CLIP_THINK_PROC think_proc;
/* 0x124 */ aNPC_FORCE_CALL_REQ_PROC force_call_req_proc;
/* 0x128 */ void* _128;
/* 0x000 */ aNPC_SETUP_ACTOR_PROC setupActor_proc;
/* 0x004 */ void* _004;
/* 0x008 */ aNPC_FREE_OVERLAY_AREA_PROC free_overlay_area_proc;
/* 0x00C */ aNPC_GET_ACTOR_AREA_PROC get_actor_area_proc;
/* 0x010 */ aNPC_FREE_ACTOR_AREA_PROC free_actor_area_proc;
/* 0x014 */ aNPC_DMA_DRAW_DATA_PROC dma_draw_data_proc;
/* 0x018 */ aNPC_SET_ATTENTION_REQUEST_PROC set_attention_request_proc;
/* 0x01C */ void* _01C[(0x0CC - 0x01C) / sizeof(void*)];
/* 0x0CC */ aNPC_BIRTH_CHECK_PROC birth_check_proc;
/* 0x0D0 */ aNPC_CT_PROC ct_proc;
/* 0x0D4 */ aNPC_DT_PROC dt_proc;
/* 0x0D8 */ aNPC_SAVE_PROC save_proc;
/* 0x0DC */ aNPC_INIT_PROC init_proc;
/* 0x0E0 */ aNPC_MOVE_PROC move_proc;
/* 0x0E4 */ aNPC_MOVE_BEFORE_PROC move_before_proc;
/* 0x0E8 */ aNPC_MOVE_AFTER_PROC move_after_proc;
/* 0x0EC */ void* _0EC;
/* 0x0F0 */ void* _0F0;
/* 0x0F4 */ aNPC_DRAW_PROC draw_proc;
/* 0x0F8 */ aNPC_REBUILD_DMA_PROC rebuild_dma_proc;
/* 0x0FC */ void* _0FC[(0x110 - 0x0FC) / sizeof(void*)];
/* 0x110 */ aNPC_TALK_DEMO_PROC talk_demo_proc;
/* 0x114 */ aNPC_ANIMATION_INIT_PROC animation_init_proc;
/* 0x118 */ aNPC_CHG_SCHEDULE_PROC chg_schedule_proc;
/* 0x11C */ void* _11C;
/* 0x120 */ aNPC_CLIP_THINK_PROC think_proc;
/* 0x124 */ aNPC_FORCE_CALL_REQ_PROC force_call_req_proc;
/* 0x128 */ void* _128;
};
typedef struct npc_info_s {
Animal_c* animal;
mNpc_NpcList_c* list;
mNPS_schedule_c* schedule;
mNpc_EventNpc_c* event;
mNpc_MaskNpc_c* mask;
mActor_name_t npc_name;
Animal_c* animal;
mNpc_NpcList_c* list;
mNPS_schedule_c* schedule;
mNpc_EventNpc_c* event;
mNpc_MaskNpc_c* mask;
mActor_name_t npc_name;
} NpcActorInfo_c;
typedef struct npc_animation_s {
cKF_SkeletonInfo_R_c keyframe;
s_xyz work[27];
s_xyz morph[27];
int _1B4;
s8 animation_id;
cKF_SkeletonInfo_R_c keyframe;
s_xyz work[27];
s_xyz morph[27];
int _1B4;
s8 animation_id;
} aNPC_ANIMATION_c;
/* TODO: draw data */
typedef struct npc_draw_info_s {
/* 0x000 */ int main_animation_frame;
/* 0x004 */ int _04; // TODO: figure out where this is set
/* 0x008 */ int main_animation_frame_changed;
/* 0x00C */ int _08; // TODO: figure out where this is set
/* 0x010 */ int _0C; // TODO: figure out where this is set
/* 0x014 */ aNPC_ANIMATION_c main_animation;
/* 0x1D0 */ aNPC_ANIMATION_c sub_animation0;
/* 0x38C */ aNPC_ANIMATION_c sub_animation1;
/* 0x548 */ u8 _548[0x580 - 0x548];
/* 0x580 */ int animation_id;
/* 0x584 */ int texture_bank_idx;
/* 0x588 */ u8 _588[0x5B9 - 0x588];
/* 0x5B9 */ u8 _5B9;
/* 0x5BA */ u8 _5BA;
/* 0x5BB */ u8 _5BB;
/* 0x5BC */ u8 _5BC;
/* 0x5BD */ u8 _5BD;
/* 0x5BE */ u8 _5BE;
/* 0x5BE */ u8 _5BF[0x5D0 - 0x5BF];
/* 0x5D0 */ f32 animation_speed;
/* 0x5D4 */ u8 _5D4[0x630 - 0x5D4];
/* 0x000 */ int main_animation_frame;
/* 0x004 */ int main_animation_state;
/* 0x008 */ int main_animation_frame_changed;
/* 0x00C */ int sub_animation0_state;
/* 0x010 */ int sub_animation1_state;
/* 0x014 */ aNPC_ANIMATION_c main_animation;
/* 0x1D0 */ aNPC_ANIMATION_c sub_animation0;
/* 0x38C */ aNPC_ANIMATION_c sub_animation1;
/* 0x548 */ u8 _548[0x580 - 0x548];
/* 0x580 */ int animation_id;
/* 0x584 */ int texture_bank_idx;
/* 0x588 */ u8 _588[0x5B0 - 0x588];
/* 0x5B0 */ u8 draw_type;
/* 0x5B1 */ u8 _5B1;
/* 0x5B2 */ u8 _5B2;
/* 0x5B3 */ u8 _5B3;
/* 0x5B4 */ u8 _5B4;
/* 0x5B5 */ u8 _5B5;
/* 0x5B6 */ u8 _5B6;
/* 0x5B7 */ u8 _5B7;
/* 0x5B8 */ u8 _5B8;
/* 0x5B9 */ u8 _5B9;
/* 0x5BA */ u8 _5BA;
/* 0x5BB */ u8 _5BB;
/* 0x5BC */ u8 _5BC;
/* 0x5BD */ u8 _5BD;
/* 0x5BE */ u8 _5BE;
/* 0x5BE */ u8 _5BF[0x5D0 - 0x5BF];
/* 0x5D0 */ f32 animation_speed;
/* 0x5D4 */ u8 _5D4[0x5D8 - 0x5D4];
/* 0x5D8 */ xyz_t shadow_pos;
/* 0x5E4 */ u8 _5E4[0x630 - 0x5E4];
} aNPC_draw_info_c;
typedef void (*aNPC_THINK_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
#define aNPC_THINK_INTERRUPT_FRIENDSHIP (1 << 0)
#define aNPC_THINK_INTERRUPT_FATIGUE (1 << 1)
#define aNPC_THINK_INTERRUPT_OBSTANCE (1 << 2)
#define aNPC_THINK_INTERRUPT_ENTRANCE (1 << 3)
#define aNPC_THINK_INTERRUPT_FATIGUE (1 << 1)
#define aNPC_THINK_INTERRUPT_OBSTANCE (1 << 2)
#define aNPC_THINK_INTERRUPT_ENTRANCE (1 << 3)
/* sizeof(aNPC_think_info_c) == 0x18 */
typedef struct npc_think_info_s {
int idx;
u8 end_flag;
u8 force_call_flag;
u16 force_call_timer;
int force_call_msg_no;
u8 force_call_camera_type;
aNPC_THINK_PROC think_proc;
u32 interrupt_flags;
/* 0x00 */ int idx;
/* 0x04 */ u8 end_flag;
/* 0x05 */ u8 force_call_flag;
/* 0x06 */ u16 force_call_timer;
/* 0x08 */ int force_call_msg_no;
/* 0x0C */ u8 force_call_camera_type;
/* 0x10 */ aNPC_THINK_PROC think_proc;
/* 0x14 */ u32 interrupt_flags;
} aNPC_think_info_c;
typedef void (*aNPC_SCHEDULE_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
typedef struct npc_schedule_info_s {
u8 type;
u8 state;
mNPS_schedule_c schedule;
aNPC_SCHEDULE_PROC schedule_proc;
u8 type;
u8 state;
mNPS_schedule_c schedule;
aNPC_SCHEDULE_PROC schedule_proc;
} aNPC_schedule_info_c;
enum {
aNPC_ACT_OBJ_NONE,
aNPC_ACT_OBJ_PLAYER,
aNPC_ACT_OBJ_ANY_NPC,
aNPC_ACT_OBJ_TARGET_NPC,
aNPC_ACT_OBJ_4,
aNPC_ACT_OBJ_5,
aNPC_ACT_OBJ_INSECT,
aNPC_ACT_OBJ_FISH,
aNPC_ACT_OBJ_DEFAULT,
aNPC_ACT_OBJ_PLAYER,
aNPC_ACT_OBJ_ANY_NPC,
aNPC_ACT_OBJ_TARGET_NPC,
aNPC_ACT_OBJ_4,
aNPC_ACT_OBJ_5,
aNPC_ACT_OBJ_INSECT,
aNPC_ACT_OBJ_FISH,
aNPC_ACT_OBJ_NUM
aNPC_ACT_OBJ_NUM
};
enum {
aNPC_ACT_TYPE_DEFAULT,
aNPC_ACT_TYPE_AVOID,
aNPC_ACT_TYPE_SEARCH,
aNPC_ACT_TYPE_TO_POINT,
aNPC_ACT_TYPE_NUM
};
enum {
aNPC_ACT_WAIT,
aNPC_ACT_WALK,
aNPC_ACT_WALK2,
aNPC_ACT_TURN,
aNPC_ACT_TURN2,
aNPC_ACT_CHASE_INSECT,
aNPC_ACT_CHASE_INSECT2,
aNPC_ACT_GREETING,
aNPC_ACT_TALK,
aNPC_ACT_INTO_HOUSE,
aNPC_ACT_LEAVE_HOUSE,
aNPC_ACT_UMB_OPEN,
aNPC_ACT_UMB_CLOSE,
aNPC_ACT_ENSOU,
aNPC_ACT_TALK2,
aNPC_ACT_REACT_TOOL,
aNPC_ACT_CLAP,
aNPC_ACT_TRANS,
aNPC_ACT_GET,
aNPC_ACT_GET2,
aNPC_ACT_PITFALL,
aNPC_ACT_REVIVE,
aNPC_ACT_SPECIAL,
aNPC_ACT_NUM
};
typedef void (*aNPC_ACTION_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
@@ -217,174 +328,174 @@ typedef void (*aNPC_ACTION_PROC)(NPC_ACTOR*, GAME_PLAY*, int);
#define aNPC_ACTION_END_STEP 0xFF
typedef struct npc_action_s {
u8 priority;
u8 idx;
u8 step;
u8 type;
u8 prev_priority;
u8 prev_step;
s16 act_timer;
u8 feel;
u8 act_obj;
u16 act_obj_id;
s16 move_x;
s16 move_z;
aNPC_ACTION_PROC act_proc;
u8 priority;
u8 idx;
u8 step;
u8 type;
u8 prev_priority;
u8 prev_step;
s16 act_timer;
u8 feel;
u8 act_obj;
u16 act_obj_id;
s16 move_x;
s16 move_z;
aNPC_ACTION_PROC act_proc;
} aNPC_action_c;
typedef struct npc_request_s {
u8 act_priority;
u8 act_idx;
u8 act_type;
u16 act_args[6];
u8 umb_flag;
u8 _11;
u8 head_priority;
u8 head_type;
ACTOR* head_target;
xyz_t head_pos;
u8 act_priority;
u8 act_idx;
u8 act_type;
u16 act_args[6];
u8 umb_flag;
u8 _11;
u8 head_priority;
u8 head_type;
ACTOR* head_target;
xyz_t head_pos;
} aNPC_request_c;
#define aNPC_COND_DEMO_SKIP_MOVE_RANGE_CHECK (1 << 0) /* 0x0001 */
#define aNPC_COND_DEMO_SKIP_MOVE_CIRCLE_REV (1 << 1) /* 0x0002 */
#define aNPC_COND_DEMO_SKIP_MOVE_Y (1 << 2) /* 0x0004 */
#define aNPC_COND_DEMO_SKIP_OBJ_COL_CHECK (1 << 3) /* 0x0008 */
#define aNPC_COND_DEMO_SKIP_BGCHECK (1 << 4) /* 0x0010 */
#define aNPC_COND_DEMO_SKIP_FORWARD_CHECK (1 << 5) /* 0x0020 */
#define aNPC_COND_DEMO_SKIP_ITEM (1 << 6) /* 0x0040 */
#define aNPC_COND_DEMO_SKIP_TALK_CHECK (1 << 7) /* 0x0080 */
#define aNPC_COND_DEMO_SKIP_HEAD_LOOKAT (1 << 8) /* 0x0100 */
#define aNPC_COND_DEMO_SKIP_ENTRANCE_CHECK (1 << 9) /* 0x0200 */
#define aNPC_COND_DEMO_SKIP_KUTIPAKU (1 << 10) /* 0x0400 */
#define aNPC_COND_DEMO_SKIP_FOOTSTEPS (1 << 11) /* 0x0800 */
#define aNPC_COND_DEMO_SKIP_FEEL_CHECK (1 << 12) /* 0x1000 */
#define aNPC_COND_DEMO_SKIP_LOVE_CHECK (1 << 13) /* 0x2000 */
#define aNPC_COND_DEMO_SKIP_FOOTSTEPS_VFX (1 << 14) /* 0x4000 */
#define aNPC_COND_DEMO_SKIP_UZAI_CHECK (1 << 15) /* 0x8000 */
#define aNPC_COND_DEMO_SKIP_MOVE_RANGE_CHECK (1 << 0) /* 0x0001 */
#define aNPC_COND_DEMO_SKIP_MOVE_CIRCLE_REV (1 << 1) /* 0x0002 */
#define aNPC_COND_DEMO_SKIP_MOVE_Y (1 << 2) /* 0x0004 */
#define aNPC_COND_DEMO_SKIP_OBJ_COL_CHECK (1 << 3) /* 0x0008 */
#define aNPC_COND_DEMO_SKIP_BGCHECK (1 << 4) /* 0x0010 */
#define aNPC_COND_DEMO_SKIP_FORWARD_CHECK (1 << 5) /* 0x0020 */
#define aNPC_COND_DEMO_SKIP_ITEM (1 << 6) /* 0x0040 */
#define aNPC_COND_DEMO_SKIP_TALK_CHECK (1 << 7) /* 0x0080 */
#define aNPC_COND_DEMO_SKIP_HEAD_LOOKAT (1 << 8) /* 0x0100 */
#define aNPC_COND_DEMO_SKIP_ENTRANCE_CHECK (1 << 9) /* 0x0200 */
#define aNPC_COND_DEMO_SKIP_KUTIPAKU (1 << 10) /* 0x0400 */
#define aNPC_COND_DEMO_SKIP_FOOTSTEPS (1 << 11) /* 0x0800 */
#define aNPC_COND_DEMO_SKIP_FEEL_CHECK (1 << 12) /* 0x1000 */
#define aNPC_COND_DEMO_SKIP_LOVE_CHECK (1 << 13) /* 0x2000 */
#define aNPC_COND_DEMO_SKIP_FOOTSTEPS_VFX (1 << 14) /* 0x4000 */
#define aNPC_COND_DEMO_SKIP_UZAI_CHECK (1 << 15) /* 0x8000 */
typedef struct npc_condition_s {
u8 hide_flg;
u8 hide_request;
u8 action;
u8 talk_condition;
u8 greeting_flag;
u8 entrance_flag;
u16 fatigue;
int feel_tim;
int _0C;
u32 demo_flg;
u32 talk_demo_flg_save;
u32 trans_demo_flg_save;
u8 appear_flag;
u8 appear_rotation;
u8 pitfall_flag;
u32 actor_state_save;
int _24;
int _28;
int _2C;
s8* friendship;
int over_friendship;
mActor_name_t* under_fg_p;
int ut_x;
int ut_z;
u8 hide_flg;
u8 hide_request;
u8 action;
u8 talk_condition;
u8 greeting_flag;
u8 entrance_flag;
u16 fatigue;
int feel_tim;
int _0C;
u32 demo_flg;
u32 talk_demo_flg_save;
u32 trans_demo_flg_save;
u8 appear_flag;
u8 appear_rotation;
u8 pitfall_flag;
u32 actor_state_save;
int _24;
int _28;
int _2C;
s8* friendship;
int over_friendship;
mActor_name_t* under_fg_p;
int ut_x;
int ut_z;
} aNPC_condition_info_c;
typedef struct npc_uzai_s {
int step;
u8 tool;
u8 flag;
u8 cross;
int step;
u8 counter;
u8 flag;
u8 cross;
} aNPC_uzai_c;
typedef struct npc_hand_s {
u8 item_type;
u8 requested_item_type;
mActor_name_t item;
u8 after_mode;
u8 present_flag;
u8 umbrella_disabled_flag;
u8 umbrella_type;
ACTOR* item_actor_p;
ACTOR* prev_item_actor_p;
xyz_t pos;
u8 item_type;
u8 requested_item_type;
mActor_name_t item;
u8 after_mode;
u8 present_flag;
u8 umbrella_disabled_flag;
u8 umbrella_type;
ACTOR* item_actor_p;
ACTOR* prev_item_actor_p;
xyz_t pos;
} aNPC_hand_c;
typedef struct npc_head_s {
s16 angle_x;
s16 angle_y;
s16 angle_add_x;
s16 angle_add_y;
s16 _08;
u8 lock_flag;
u8 target_type;
ACTOR* target;
xyz_t pos;
s16 angle_x;
s16 angle_y;
s16 angle_add_x;
s16 angle_add_y;
s16 _08;
u8 lock_flag;
u8 target_type;
ACTOR* target;
xyz_t pos;
} aNPC_head_c;
enum {
aNPC_FOOT_LEFT,
aNPC_FOOT_RIGHT,
aNPC_FOOT_LEFT,
aNPC_FOOT_RIGHT,
aNPC_FOOT_NUM
aNPC_FOOT_NUM
};
typedef struct npc_movement_s {
f32 max_speed;
f32 acceleration;
f32 deceleration;
f32 target_pos_x;
f32 target_pos_z;
f32 avoid_pos_x;
f32 avoid_pos_z;
s16 move_timer;
u8 avoid_direction;
u8 range_type;
f32 range_center_x;
f32 range_center_z;
f32 range_radius;
s16 mv_angl;
s16 mv_add_angl;
f32 arrival_area_radius;
ACTOR* target;
s8 movement_ut_x;
s8 movement_ut_z;
s16 body_angle;
u8 override_body_angle_flag;
u8 demo_move_timer;
f32 max_speed;
f32 acceleration;
f32 deceleration;
f32 target_pos_x;
f32 target_pos_z;
f32 avoid_pos_x;
f32 avoid_pos_z;
s16 move_timer;
u8 avoid_direction;
u8 range_type;
f32 range_center_x;
f32 range_center_z;
f32 range_radius;
s16 mv_angl;
s16 mv_add_angl;
f32 arrival_area_radius;
ACTOR* target;
s8 movement_ut_x;
s8 movement_ut_z;
s16 body_angle;
u8 override_body_angle_flag;
u8 demo_move_timer;
} aNPC_movement_c;
typedef struct npc_collision_s {
ClObjPipe_c pipe;
f32 BGcheck_radius;
u8 collision_flag;
u8 priority;
u8 turn_flag;
u16 _24;
s16 turn_angle;
f32 bg_rev_add;
ClObjPipe_c pipe;
f32 BGcheck_radius;
u8 collision_flag;
u8 priority;
u8 turn_flag;
u16 _24;
s16 turn_angle;
f32 bg_rev_add;
} aNPC_collision_c;
typedef struct npc_actor_talk_info_s {
aNPC_TALK_REQUEST_PROC talk_request_proc;
aNPC_TALK_INIT_PROC talk_init_proc;
aNPC_TALK_END_CHECK_PROC talk_end_check_proc;
u8 type;
u8 default_act;
u8 demo_code;
u8 turn;
s16 default_animation;
s16 default_turn_animation;
s16 melody_inst;
s16 npc_voice_id;
u8 feel;
u8 memory;
u8 kutipaku_timer; // frames of mouth movement animation
aNPC_TALK_REQUEST_PROC talk_request_proc;
aNPC_TALK_INIT_PROC talk_init_proc;
aNPC_TALK_END_CHECK_PROC talk_end_check_proc;
u8 type;
u8 default_act;
u8 demo_code;
u8 turn;
s16 default_animation;
s16 default_turn_animation;
s16 melody_inst;
s16 npc_voice_id;
u8 feel;
u8 memory;
u8 kutipaku_timer; // frames of mouth movement animation
} aNPC_talk_info_c;
typedef struct npc_accessory_s {
s16 type;
s16 pos_joint_idx; // might be better suited as base_joint_idx?
ACTOR* accessory;
s16 type;
s16 pos_joint_idx; // might be better suited as base_joint_idx?
ACTOR* accessory;
} aNPC_accessory_c;
/* Used for think, schedule, action, & talk */
@@ -392,66 +503,66 @@ typedef void (*aNPC_PROC)(NPC_ACTOR* npc_actorx, GAME_PLAY* play, int schedule_i
typedef void (*aNPC_SUB_PROC)(NPC_ACTOR* npc_actorx, GAME_PLAY* play);
enum {
aNPC_SCHEDULE_TYPE_FIELD,
aNPC_SCHEDULE_TYPE_IN_HOUSE,
aNPC_SCHEDULE_TYPE_SLEEP,
aNPC_SCHEDULE_TYPE_STAND,
aNPC_SCHEDULE_TYPE_WANDER,
aNPC_SCHEDULE_TYPE_WALK_WANDER,
aNPC_SCHEDULE_TYPE_SPECIAL,
aNPC_SCHEDULE_TYPE_FIELD,
aNPC_SCHEDULE_TYPE_IN_HOUSE,
aNPC_SCHEDULE_TYPE_SLEEP,
aNPC_SCHEDULE_TYPE_STAND,
aNPC_SCHEDULE_TYPE_WANDER,
aNPC_SCHEDULE_TYPE_WALK_WANDER,
aNPC_SCHEDULE_TYPE_SPECIAL,
aNPC_SCHEDULE_TYPE_NUM
aNPC_SCHEDULE_TYPE_NUM
};
struct npc_actor_s {
ACTOR actor_class;
s_xyz _174;
NpcActorInfo_c npc_info;
aNPC_draw_info_c draw;
aNPC_think_info_c think;
aNPC_schedule_info_c schedule;
aNPC_action_c action;
aNPC_request_c request;
f32 eye_y;
aNPC_condition_info_c condition_info;
aNPC_uzai_c uzai;
aNPC_hand_c left_hand;
aNPC_hand_c right_hand;
aNPC_head_c head;
xyz_t feet[aNPC_FOOT_NUM];
mActor_proc move_proc;
mActor_proc draw_proc;
ACTOR* palActor;
int palActorIgnoreTimer;
aNPC_movement_c movement;
aNPC_collision_c collision;
aNPC_talk_info_c talk_info;
aNPC_accessory_c accessory;
int act_react_tool_timer;
int _98C;
int _990;
ACTOR actor_class;
s_xyz _174;
NpcActorInfo_c npc_info;
aNPC_draw_info_c draw;
aNPC_think_info_c think;
aNPC_schedule_info_c schedule;
aNPC_action_c action;
aNPC_request_c request;
f32 eye_y;
aNPC_condition_info_c condition_info;
aNPC_uzai_c uzai;
aNPC_hand_c left_hand;
aNPC_hand_c right_hand;
aNPC_head_c head;
xyz_t feet[aNPC_FOOT_NUM];
mActor_proc move_proc;
mActor_proc draw_proc;
ACTOR* palActor;
int palActorIgnoreTimer;
aNPC_movement_c movement;
aNPC_collision_c collision;
aNPC_talk_info_c talk_info;
aNPC_accessory_c accessory;
int act_react_tool_timer;
int _98C;
int _990;
};
typedef struct npc_control_cloth_s {
u8 dma_flag;
u8 init_flag;
s16 _02;
mActor_name_t cloth_item;
u8 in_use_count;
Object_Bank_c texture_bank;
Object_Bank_c palette_bank;
u8 dma_flag;
u8 init_flag;
s16 _02;
mActor_name_t cloth_item;
u8 in_use_count;
Object_Bank_c texture_bank;
Object_Bank_c palette_bank;
} aNPC_cloth_c;
typedef struct npc_control_actor_s {
ACTOR* actor_class;
aNPC_cloth_c cloth[10];
u8 _8F4[0x9D8 - 0x8F4]; // TODO
ACTOR* actor_class;
aNPC_cloth_c cloth[10];
u8 _8F4[0x9D8 - 0x8F4]; // TODO
} NPC_CONTROL_ACTOR;
typedef struct npc_destruct_table_proc{
typedef struct npc_destruct_table_proc {
aNPC_SUB_PROC unk0;
aNPC_SUB_PROC unk4;
}NPC_DT_PROCS;
} NPC_DT_PROCS;
extern ACTOR_PROFILE Npc_Profile;
@@ -460,4 +571,3 @@ extern ACTOR_PROFILE Npc_Profile;
#endif
#endif
+265
View File
@@ -0,0 +1,265 @@
#ifndef AC_NPC_ANIM_DEF_H
#define AC_NPC_ANIM_DEF_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
enum {
aNPC_ANIM_RUN1,
aNPC_ANIM_WALK1,
aNPC_ANIM_WALK_KI1,
aNPC_ANIM_WALK_DO1,
aNPC_ANIM_WALK_AI1,
aNPC_ANIM_WAIT1,
aNPC_ANIM_WAIT_KI1,
aNPC_ANIM_WAIT_DO1,
aNPC_ANIM_WAIT_AI1,
aNPC_ANIM_WAIT_NEMU1,
aNPC_ANIM_AISATU1,
aNPC_ANIM_AISATU2,
aNPC_ANIM_AISATU3,
aNPC_ANIM_AISATU4,
aNPC_ANIM_GURATUKU1,
aNPC_ANIM_OTIRU1,
aNPC_ANIM_OTIRU2,
aNPC_ANIM_MOGAKU1,
aNPC_ANIM_DERU1,
aNPC_ANIM_DERU2,
aNPC_ANIM_TALK_TURN1,
aNPC_ANIM_TALK1,
aNPC_ANIM_OPEN1,
aNPC_ANIM_GO_OUT1,
aNPC_ANIM_UMB_OPEN1,
aNPC_ANIM_UMB_CLOSE1,
aNPC_ANIM_TRANSFER1,
aNPC_ANIM_TRANS_WAIT1,
aNPC_ANIM_GET1,
aNPC_ANIM_GET_PULL1,
aNPC_ANIM_GET_PULL_WAIT1,
aNPC_ANIM_GET_PUTAWAY1,
aNPC_ANIM_GET_EAT1,
aNPC_ANIM_GET_CHANGE1,
aNPC_ANIM_GET_RETURN1,
aNPC_ANIM_TRANSFER_F1,
aNPC_ANIM_TRANS_WAIT_F1,
aNPC_ANIM_GET_F1,
aNPC_ANIM_GET_PULL_F1,
aNPC_ANIM_GET_PULL_WAIT_F1,
aNPC_ANIM_GET_PUTAWAY_F1,
aNPC_ANIM_GET_RETURN_F1,
aNPC_ANIM_ESTIMATE_F1,
aNPC_ANIM_CONTRACT1,
aNPC_ANIM_CONTRACT2,
aNPC_ANIM_CONTRACT3,
aNPC_ANIM_NOT_CONTRACT1,
aNPC_ANIM_FLY1,
aNPC_ANIM_FLYAWAY1,
aNPC_ANIM_DELIVERY1,
aNPC_ANIM_KYORO1,
aNPC_ANIM_LANDING1,
aNPC_ANIM_LANDING2,
aNPC_ANIM_LANDING3,
aNPC_ANIM_OPEN_D1,
aNPC_ANIM_SITDOWN_D1,
aNPC_ANIM_SITDOWN_WAIT_D1,
aNPC_ANIM_STANDUP_D1,
aNPC_ANIM_OPEN_D2,
aNPC_ANIM_TO_DECK_D1,
aNPC_ANIM_KEITAI_ON1,
aNPC_ANIM_KEITAI_TALK1,
aNPC_ANIM_KEITAI_TALK2,
aNPC_ANIM_KEITAI_OFF1,
aNPC_ANIM_WAIT_E1,
aNPC_ANIM_ENSOU_E1,
aNPC_ANIM_BANZAI1,
aNPC_ANIM_CLAP1,
aNPC_ANIM_KOKKURI_D1,
aNPC_ANIM_KOKKURI_D2,
aNPC_ANIM_SAISEN1,
aNPC_ANIM_OMAIRI1,
aNPC_ANIM_SITDOWN_WAIT1,
aNPC_ANIM_SITDOWN_DRINK1,
aNPC_ANIM_SITDOWN_CLAP1,
aNPC_ANIM_DANCE1,
aNPC_ANIM_KUISINBO1,
aNPC_ANIM_SANBASI1,
aNPC_ANIM_WAIT_R1,
aNPC_ANIM_APPEAR1,
aNPC_ANIM_GO_UG1,
aNPC_ANIM_INTRO1_A,
aNPC_ANIM_INTRO1_B,
aNPC_ANIM_TAISOU1,
aNPC_ANIM_TAISOU2,
aNPC_ANIM_TAISOU3_A,
aNPC_ANIM_TAISOU3_B,
aNPC_ANIM_TAISOU4_A,
aNPC_ANIM_TAISOU4_B,
aNPC_ANIM_TAISOU5_A,
aNPC_ANIM_TAISOU5_B,
aNPC_ANIM_TAISOU6_A,
aNPC_ANIM_TAISOU6_B,
aNPC_ANIM_TAISOU7,
aNPC_ANIM_KIDUKU1,
aNPC_ANIM_KIDUKU2,
aNPC_ANIM_CRACKER_WAIT1,
aNPC_ANIM_CRACKER_FIRE1,
aNPC_ANIM_CRACKER_RUN1,
aNPC_ANIM_CRACKER_COUNT1,
aNPC_ANIM_WARMUP1,
aNPC_ANIM_READY1,
aNPC_ANIM_ASIHUMI1,
aNPC_ANIM_KOKERU1,
aNPC_ANIM_KOKERU_GETUP1,
aNPC_ANIM_TIRED1,
aNPC_ANIM_TAMAKOME1,
aNPC_ANIM_YOUI1,
aNPC_ANIM_DON1,
aNPC_ANIM_TUNAHIKI_AIKO1,
aNPC_ANIM_TUNAHIKI_YURI1,
aNPC_ANIM_TUNAHIKI_FURI1,
aNPC_ANIM_HATAFURI1,
aNPC_ANIM_TAMAHIROI1,
aNPC_ANIM_TAMANAGE1,
aNPC_ANIM_GETUP_SEG1,
aNPC_ANIM_GETUP_WAIT_SEG1,
aNPC_ANIM_PIKU_SEG1,
aNPC_ANIM_4HAKU_E1,
aNPC_ANIM_3HAKU_E1,
aNPC_ANIM_SEND_MAIL1,
aNPC_ANIM_TURI_WAIT1,
aNPC_ANIM_MISIN1,
aNPC_ANIM_WIPKOGU1,
aNPC_ANIM_WIPWAIT1,
aNPC_ANIM_WIPWAIT2,
aNPC_ANIM_GSTWAIT1,
aNPC_ANIM_GYAFUN1,
aNPC_ANIM_GYAFUN2,
aNPC_ANIM_TKYKYORO1,
aNPC_ANIM_MUKA1,
aNPC_ANIM_MUKA2,
aNPC_ANIM_GAAAN1,
aNPC_ANIM_GAAAN2,
aNPC_ANIM_SMILE1,
aNPC_ANIM_SMILE2,
aNPC_ANIM_HA1,
aNPC_ANIM_HA2,
aNPC_ANIM_PUNPUN1,
aNPC_ANIM_PUNPUN2,
aNPC_ANIM_A1,
aNPC_ANIM_A2,
aNPC_ANIM_ASERU1,
aNPC_ANIM_ASERU2,
aNPC_ANIM_BURUBURU1,
aNPC_ANIM_BURUBURU2,
aNPC_ANIM_GOUKYU1,
aNPC_ANIM_GOUKYU2,
aNPC_ANIM_HAPPY1,
aNPC_ANIM_HAPPY2,
aNPC_ANIM_HATE1,
aNPC_ANIM_HATE2,
aNPC_ANIM_HIRAMEKI1,
aNPC_ANIM_HIRAMEKI2,
aNPC_ANIM_HYUUU1,
aNPC_ANIM_HYUUU2,
aNPC_ANIM_LOVELOVE1,
aNPC_ANIM_LOVELOVE2,
aNPC_ANIM_MUUUUU1,
aNPC_ANIM_MUUUUU2,
aNPC_ANIM_OTIKOMU1,
aNPC_ANIM_OTIKOMU2,
aNPC_ANIM_SHITUREN1,
aNPC_ANIM_SHITUREN2,
aNPC_ANIM_WARUDAKUMI1,
aNPC_ANIM_WARUDAKUMI2,
aNPC_ANIM_NEBOKE1,
aNPC_ANIM_NEBOKE2,
aNPC_ANIM_LOVE1,
aNPC_ANIM_LOVE2,
aNPC_ANIM_NIKO1,
aNPC_ANIM_MUSU1,
aNPC_ANIM_KOMARI1,
aNPC_ANIM_HATE_F1,
aNPC_ANIM_HATE_F2,
aNPC_ANIM_HA_F1,
aNPC_ANIM_HA_F2,
aNPC_ANIM_HAPPY_F1,
aNPC_ANIM_HAPPY_F2,
aNPC_ANIM_ASERU_F1,
aNPC_ANIM_ASERU_F2,
aNPC_ANIM_MUUUUU_F1,
aNPC_ANIM_MUUUUU_F2,
aNPC_ANIM_LOVELOVE_F1,
aNPC_ANIM_LOVELOVE_F2,
aNPC_ANIM_A_F1,
aNPC_ANIM_A_F2,
aNPC_ANIM_SMILE_F1,
aNPC_ANIM_SMILE_F2,
aNPC_ANIM_KOMARI_F1,
aNPC_ANIM_NIKO_F1,
aNPC_ANIM_MUSU_F1,
aNPC_ANIM_HATE_I1,
aNPC_ANIM_HATE_I2,
aNPC_ANIM_HA_I1,
aNPC_ANIM_HA_I2,
aNPC_ANIM_HAPPY_I1,
aNPC_ANIM_HAPPY_I2,
aNPC_ANIM_ASERU_I1,
aNPC_ANIM_ASERU_I2,
aNPC_ANIM_MUUUUU_I1,
aNPC_ANIM_MUUUUU_I2,
aNPC_ANIM_LOVE_I1,
aNPC_ANIM_LOVE_I2,
aNPC_ANIM_SHITUREN_I1,
aNPC_ANIM_SHITUREN_I2,
aNPC_ANIM_KOMARI_I1,
aNPC_ANIM_NIKO_I1,
aNPC_ANIM_MUSU_I1,
aNPC_ANIM_SMILE_D1,
aNPC_ANIM_SMILE_D2,
aNPC_ANIM_GAAAN_D1,
aNPC_ANIM_GAAAN_D2,
aNPC_ANIM_HIRAMEKI_D1,
aNPC_ANIM_HIRAMEKI_D2,
aNPC_ANIM_HA_D1,
aNPC_ANIM_HA_D2,
aNPC_ANIM_MUSU_D1,
aNPC_ANIM_NIKO_D1,
aNPC_ANIM_KOMARI_D1,
aNPC_ANIM_HATE_D1,
aNPC_ANIM_HATE_D2,
aNPC_ANIM_PUNPUN_R1,
aNPC_ANIM_PUNPUN_R2,
aNPC_ANIM_MUSU_R1,
aNPC_ANIM_HYUUU_R1,
aNPC_ANIM_HYUUU_R2,
aNPC_ANIM_A_R1,
aNPC_ANIM_A_R2,
aNPC_ANIM_A2_R1,
aNPC_ANIM_AKIRERU_R1,
aNPC_ANIM_AKIRERU_R2,
aNPC_ANIM_MATAROU_R1,
aNPC_ANIM_MATAROU_R2,
aNPC_ANIM_GEKIDO_R1,
aNPC_ANIM_GEKIDO_R2,
aNPC_ANIM_HA_E1,
aNPC_ANIM_HA_E2,
aNPC_ANIM_KEIREI1,
aNPC_ANIM_KIEEEEI1,
aNPC_ANIM_KIEEEEI2,
aNPC_ANIM_UMBRELLA1,
aNPC_ANIM_UTIWA_WAIT1,
aNPC_ANIM_TUE1,
aNPC_ANIM_KUTIPAKU1,
aNPC_ANIM_KUTIPAKU2,
aNPC_ANIM_NUM
};
#ifdef __cplusplus
}
#endif
#endif
+27 -1
View File
@@ -3,11 +3,38 @@
#include "types.h"
#include "m_actor.h"
#include "ac_npc.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct npc_guide_actor_s NPC_GUIDE_ACTOR;
typedef void (*aNGD_PROC)(NPC_GUIDE_ACTOR*, GAME_PLAY*);
struct npc_guide_actor_s {
NPC_ACTOR npc_class;
int action;
int next_action;
aNGD_PROC proc;
int lock_camera_flag;
int camera_morph_counter;
s16 camera_move;
s8 camera_move_cnt;
s8 camera_move_set_counter;
f32 camera_move_y;
f32 camera_move_range;
s16 camera_tilt_cur_angle;
s16 camera_tilt_goal_angle;
s16 camera_tilt_add;
int answer_flags;
ACTOR* train_door_actor;
int obj_look_type;
f32 obj_dist_ground;
int camera_eyes_flag;
};
extern ACTOR_PROFILE Npc_Guide_Profile;
#ifdef __cplusplus
@@ -15,4 +42,3 @@ extern ACTOR_PROFILE Npc_Guide_Profile;
#endif
#endif
+27 -1
View File
@@ -3,11 +3,38 @@
#include "types.h"
#include "m_actor.h"
#include "ac_npc.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct npc_guide2_actor_s NPC_GUIDE2_ACTOR;
typedef void (*aNG2_PROC)(NPC_GUIDE2_ACTOR*, GAME_PLAY*);
struct npc_guide2_actor_s {
NPC_ACTOR npc_class;
int action;
int next_action;
aNG2_PROC proc;
int lock_camera_flag;
int camera_morph_counter;
s16 camera_move;
s8 camera_move_cnt;
s8 camera_move_set_counter;
f32 camera_move_y;
f32 camera_move_range;
s16 camera_tilt_cur_angle;
s16 camera_tilt_goal_angle;
s16 camera_tilt_add;
int answer_flags;
ACTOR* train_door_actor;
int obj_look_type;
f32 obj_dist_ground;
int camera_eyes_flag;
};
extern ACTOR_PROFILE Npc_Guide2_Profile;
#ifdef __cplusplus
@@ -15,4 +42,3 @@ extern ACTOR_PROFILE Npc_Guide2_Profile;
#endif
#endif
+21 -1
View File
@@ -3,11 +3,32 @@
#include "types.h"
#include "m_actor.h"
#include "ac_npc.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct npc_rcn_guide_s NPC_RCN_GUIDE_ACTOR;
typedef void (*aNRG_THINK_PROC)(NPC_RCN_GUIDE_ACTOR*, GAME_PLAY*);
typedef void (*aNRG_TALK_PROC)(NPC_RCN_GUIDE_ACTOR*, GAME_PLAY*);
/* sizeof(NPC_RCN_GUIDE_ACTOR) == 0x9B4 */
struct npc_rcn_guide_s {
/* 0x000 */ NPC_ACTOR npc_class;
/* 0x994 */ int think_idx;
/* 0x998 */ int next_think_idx;
/* 0x99C */ aNRG_THINK_PROC think_proc;
/* 0x9A0 */ int talk_idx;
/* 0x9A4 */ aNRG_TALK_PROC talk_proc;
/* 0x9A8 */ u8 talk_proc_idx;
/* 0x9A9 */ u8 path;
/* 0x9AA */ u8 melody_copy;
/* 0x9AC */ int shop_bx;
/* 0x9B0 */ int shop_bz;
};
extern ACTOR_PROFILE Npc_Rcn_Guide_Profile;
#ifdef __cplusplus
@@ -15,4 +36,3 @@ extern ACTOR_PROFILE Npc_Rcn_Guide_Profile;
#endif
#endif
+21 -1
View File
@@ -3,11 +3,32 @@
#include "types.h"
#include "m_actor.h"
#include "ac_npc.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct npc_rcn_guide2_s NPC_RCN_GUIDE2_ACTOR;
typedef void (*aNRG2_THINK_PROC)(NPC_RCN_GUIDE2_ACTOR*, GAME_PLAY*);
typedef void (*aNRG2_TALK_PROC)(NPC_RCN_GUIDE2_ACTOR*);
/* sizeof(NPC_RCN_GUIDE2_ACTOR) == 0x9BC */
struct npc_rcn_guide2_s {
/* 0x000 */ NPC_ACTOR npc_class;
/* 0x994 */ int _994;
/* 0x998 */ int think_idx;
/* 0x99C */ int next_think_idx;
/* 0x9A0 */ aNRG2_THINK_PROC think_proc;
/* 0x9A4 */ int talk_idx;
/* 0x9A8 */ int talk_proc_idx;
/* 0x9AC */ aNRG2_TALK_PROC talk_proc;
/* 0x9B0 */ int counter;
/* 0x9B4 */ int daily_speak_flag;
/* 0x9B8 */ int can_ask_again_flag;
};
extern ACTOR_PROFILE Npc_Rcn_Guide2_Profile;
#ifdef __cplusplus
@@ -15,4 +36,3 @@ extern ACTOR_PROFILE Npc_Rcn_Guide2_Profile;
#endif
#endif
+12 -13
View File
@@ -9,22 +9,22 @@
extern "C" {
#endif
typedef struct actor_npc_rtc_s NPCRTC_ACTOR;
typedef struct actor_npc_rtc_s NPC_RTC_ACTOR;
typedef void (*aNPCRTC_SUB_PROC)(NPCRTC_ACTOR* rtc, GAME_PLAY* play);
typedef void (*aNRTC_PROC)(NPC_RTC_ACTOR* rtc, GAME_PLAY* play);
struct actor_npc_rtc_s{
struct actor_npc_rtc_s {
NPC_ACTOR npc_class;
int unk994;
int unk998;
aNPCRTC_SUB_PROC unk99C;
int unk9A0;
int talk_idx;
int unk998;
aNRTC_PROC talk_proc;
int talk_flag;
int unk9A4;
int unk9A8;
int unk9AC;
int unk9B0;
int unk9B4;
int unk9B8;
int think_idx;
int counter;
int fade_timer;
int bgm_timer;
int first_talk_timer;
};
extern ACTOR_PROFILE Npc_Rtc_Profile;
@@ -34,4 +34,3 @@ extern ACTOR_PROFILE Npc_Rtc_Profile;
#endif
#endif
+19 -1
View File
@@ -8,6 +8,25 @@
extern "C" {
#endif
typedef struct shop_design_actor_s SHOP_DESIGN_ACTOR;
typedef mActor_name_t (*aSD_UNITNUM2ITEMNO_PROC)(int ut_x, int ut_z);
typedef int (*aSD_REPORTGOODSSALE_PROC)(int ut_x, int ut_z);
typedef struct shop_design_clip_s {
SHOP_DESIGN_ACTOR* design_actor;
aSD_UNITNUM2ITEMNO_PROC unitNum2ItemNo_proc;
aSD_REPORTGOODSSALE_PROC reportGoodsSale_proc;
} aSD_Clip_c;
struct shop_design_actor_s {
ACTOR actor_class;
mActor_name_t* goods_list;
int goods_list_count;
int goods_list_max;
aSD_Clip_c clip;
};
extern ACTOR_PROFILE Shop_Design_Profile;
#ifdef __cplusplus
@@ -15,4 +34,3 @@ extern ACTOR_PROFILE Shop_Design_Profile;
#endif
#endif
+33
View File
@@ -9,6 +9,39 @@
extern "C" {
#endif
#define aSG_SINGLE_DRAW_NUM 9
typedef struct ac_shop_goods_s SHOP_GOODS_ACTOR;
typedef struct ac_shop_good_single_draw_s {
mActor_name_t item;
s16 layer;
xyz_t target_pos;
xyz_t current_pos;
xyz_t start_pos;
f32 scale;
u16 counter;
s_xyz angle;
f32 velocity_y;
f32 _38;
f32 acceleration_y;
s16 _40;
u16 flags;
int delay_timer;
} aSG_single_draw_c;
struct ac_shop_goods_s {
ACTOR actor_class;
int picture_count;
int bx;
int bz;
f32 bx_pos;
f32 bz_pos;
s16 mode;
s16 _18A;
aSG_single_draw_c single_draw[aSG_SINGLE_DRAW_NUM];
};
extern ACTOR_PROFILE Shop_Goods_Profile;
#ifdef __cplusplus
+18 -19
View File
@@ -12,29 +12,29 @@ typedef struct shop_indoor_actor_s SHOP_INDOOR_ACTOR;
typedef int (*aSI_CHANGE_WALL_PROC)(mActor_name_t item);
typedef int (*aSI_CHANGE_CARPET_PROC)(mActor_name_t item);
typedef void (*aSI_INDOOR_DMA_AGAIN_PROC)();
typedef void (*aSI_CHANGE2DEFAULT_PROC)();
typedef void (*aSI_INDOOR_DMA_AGAIN_PROC)(void);
typedef void (*aSI_CHANGE2DEFAULT_PROC)(void);
typedef struct shop_indoor_clip_s {
SHOP_INDOOR_ACTOR* shop_indoor_actor;
aSI_CHANGE_WALL_PROC change_wall_proc;
aSI_CHANGE_CARPET_PROC change_carpet_proc;
aSI_INDOOR_DMA_AGAIN_PROC indoor_dma_again_proc;
aSI_CHANGE2DEFAULT_PROC change2default_proc;
ACTOR* shop_indoor_actor;
aSI_CHANGE_WALL_PROC change_wall_proc;
aSI_CHANGE_CARPET_PROC change_carpet_proc;
aSI_INDOOR_DMA_AGAIN_PROC indoor_dma_again_proc;
aSI_CHANGE2DEFAULT_PROC change2default_proc;
} aSI_Clip_c;
struct shop_indoor_actor_s {
ACTOR actor_class;
s16 floor_default_tex_no;
s16 wall_default_tex_no;
s16 floor_data_idx;
s16 wall_data_idx;
int _17C;
u8* floor_data_p[2];
u8* wall_data_p[2];
s16 shop_idx;
aSI_Clip_c clip;
int fukubiki_active;
ACTOR actor_class;
s16 floor_idx;
s16 wall_idx;
s16 floor_data_idx;
s16 wall_data_idx;
int _17C;
u8* floor_data_p[2];
u8* wall_data_p[2];
s16 shop_idx;
aSI_Clip_c clip;
int fukubiki_active;
};
extern ACTOR_PROFILE Shop_Indoor_Profile;
@@ -44,4 +44,3 @@ extern ACTOR_PROFILE Shop_Indoor_Profile;
#endif
#endif
+8 -1
View File
@@ -8,6 +8,14 @@
extern "C" {
#endif
typedef struct shop_level_actor_s SHOP_LEVEL_ACTOR;
struct shop_level_actor_s {
ACTOR actor_class;
int bx;
int bz;
};
extern ACTOR_PROFILE Shop_Level_Profile;
#ifdef __cplusplus
@@ -15,4 +23,3 @@ extern ACTOR_PROFILE Shop_Level_Profile;
#endif
#endif
+43 -1
View File
@@ -3,11 +3,54 @@
#include "types.h"
#include "m_actor.h"
#include "m_field_make.h"
#include "m_olib.h"
#ifdef __cplusplus
extern "C" {
#endif
#define aSIGN_SINGLE_NUM 10
#define aSIGN_CULL_MAX_DIST (mFI_UNIT_BASE_SIZE_F * 4)
typedef struct sign_actor_s SIGN_ACTOR;
typedef struct sign_draw_s {
BlockOrUnit_c block;
u16 exist_bitfield[UT_Z_NUM];
} aSIGN_draw_c;
typedef struct sign_single_s {
BlockOrUnit_c block;
BlockOrUnit_c unit;
mActor_name_t item;
xyz_t scale;
f32 _20;
s16 _24;
s16 _26;
int exist_flag;
} aSIGN_single_c;
typedef void (*aSIGN_ACTION_PROC)(SIGN_ACTOR*, GAME*);
struct sign_actor_s {
ACTOR actor_class;
aSIGN_ACTION_PROC action_proc;
aSIGN_draw_c draw[mFM_VISIBLE_BLOCK_NUM];
aSIGN_single_c single[aSIGN_SINGLE_NUM];
BlockOrUnit_c target_block;
BlockOrUnit_c target_unit;
xyz_t target_pos;
xyz_t sign_birth_pos;
xyz_t sign_pos;
int _404;
int is_winter;
};
extern int aSIGN_set_white_sign(GAME* game, xyz_t* pos_p);
extern int aSIGN_erase_white_sign(GAME* game, xyz_t* pos_p);
extern ACTOR_PROFILE Ac_Sign_Profile;
#ifdef __cplusplus
@@ -15,4 +58,3 @@ extern ACTOR_PROFILE Ac_Sign_Profile;
#endif
#endif
+3 -1
View File
@@ -24,7 +24,9 @@ typedef struct snowman_actor_s {
int msg_info;
int snowman_part;
s_xyz head_vec;
u8 _1F2[0x1FC - 0x1F2];
u8 _1F2[0x1F8 - 0x1F2];
s16 unk_1F8;
u8 _1FA[0x2];
} SNOWMAN_ACTOR;
extern ACTOR_PROFILE Snowman_Profile;
+1 -2
View File
@@ -13,7 +13,7 @@ extern ACTOR_PROFILE T_Keitai_Profile;
typedef void (*KEITAI_PROC)(ACTOR*);
typedef struct t_keitai_s{
typedef struct t_keitai_s {
TOOLS_ACTOR tools_class;
KEITAI_PROC action_proc;
int action;
@@ -34,4 +34,3 @@ typedef struct t_keitai_action_anim_s {
#endif
#endif
+82 -63
View File
@@ -12,78 +12,97 @@ extern "C" {
extern ACTOR_PROFILE Tools_Profile;
typedef enum {
TOOL_UMBRELLA0,
TOOL_UMBRELLA1,
TOOL_UMBRELLA2,
TOOL_UMBRELLA3,
TOOL_UMBRELLA4,
TOOL_UMBRELLA5,
TOOL_UMBRELLA6,
TOOL_UMBRELLA7,
TOOL_UMBRELLA8,
TOOL_UMBRELLA9,
TOOL_UMBRELLA10,
TOOL_UMBRELLA11,
TOOL_UMBRELLA12,
TOOL_UMBRELLA13,
TOOL_UMBRELLA14,
TOOL_UMBRELLA15,
TOOL_UMBRELLA16,
TOOL_UMBRELLA17,
TOOL_UMBRELLA18,
TOOL_UMBRELLA19,
TOOL_UMBRELLA20,
TOOL_UMBRELLA21,
TOOL_UMBRELLA22,
TOOL_UMBRELLA23,
TOOL_UMBRELLA24,
TOOL_UMBRELLA25,
TOOL_UMBRELLA26,
TOOL_UMBRELLA27,
TOOL_UMBRELLA28,
TOOL_UMBRELLA29,
TOOL_UMBRELLA30,
TOOL_UMBRELLA31,
TOOL_UMBRELLA32,
TOOL_KEITAI,
TOOL_UTIWA,
TOOL_HANABI,
TOOL_CRACKER,
TOOL_PISTOL,
TOOL_FLAG,
TOOL_TUMBLER,
TOOL_NPC_SAO,
TOOL_TAMA1,
TOOL_TAMA2,
TOOL_TAMA3,
TOOL_TAMA4
TOOL_UMBRELLA0,
TOOL_UMBRELLA1,
TOOL_UMBRELLA2,
TOOL_UMBRELLA3,
TOOL_UMBRELLA4,
TOOL_UMBRELLA5,
TOOL_UMBRELLA6,
TOOL_UMBRELLA7,
TOOL_UMBRELLA8,
TOOL_UMBRELLA9,
TOOL_UMBRELLA10,
TOOL_UMBRELLA11,
TOOL_UMBRELLA12,
TOOL_UMBRELLA13,
TOOL_UMBRELLA14,
TOOL_UMBRELLA15,
TOOL_UMBRELLA16,
TOOL_UMBRELLA17,
TOOL_UMBRELLA18,
TOOL_UMBRELLA19,
TOOL_UMBRELLA20,
TOOL_UMBRELLA21,
TOOL_UMBRELLA22,
TOOL_UMBRELLA23,
TOOL_UMBRELLA24,
TOOL_UMBRELLA25,
TOOL_UMBRELLA26,
TOOL_UMBRELLA27,
TOOL_UMBRELLA28,
TOOL_UMBRELLA29,
TOOL_UMBRELLA30,
TOOL_UMBRELLA31,
TOOL_ORG_UMBRELLA0,
TOOL_ORG_UMBRELLA1,
TOOL_ORG_UMBRELLA2,
TOOL_ORG_UMBRELLA3,
TOOL_ORG_UMBRELLA4,
TOOL_ORG_UMBRELLA5,
TOOL_ORG_UMBRELLA6,
TOOL_ORG_UMBRELLA7,
TOOL_KEITAI,
TOOL_UTIWA,
TOOL_HANABI,
TOOL_CRACKER,
TOOL_PISTOL,
TOOL_FLAG,
TOOL_TUMBLER,
TOOL_NPC_SAO,
TOOL_TAMA1,
TOOL_TAMA2,
TOOL_TAMA3,
TOOL_TAMA4,
aTOL_NUM
} ToolName;
typedef struct tools_s{
/* 0x000 */ ACTOR actor_class;
/* 0x174 */ int tool_name;
/* 0x178 */ MtxF matrix_work;
/* 0x1B8 */ int init_matrix;
/* 0x1BC */ int unk1BC;
/* 0x1C0 */ int work0;
/* 0x1C4 */ int work1;
/* 0x1C8 */ int work2;
}TOOLS_ACTOR;
enum {
aTOL_ACTION_WAIT,
aTOL_ACTION_TAKEOUT,
aTOL_ACTION_PUTAWAY,
aTOL_ACTION_DESTRUCT,
aTOL_ACTION_S_TAKEOUT,
aTOL_ACTION_SPECIAL,
aTOL_ACTION_NUM
};
typedef struct tools_s {
/* 0x000 */ ACTOR actor_class;
/* 0x174 */ int tool_name;
/* 0x178 */ MtxF matrix_work;
/* 0x1B8 */ int init_matrix;
/* 0x1BC */ int unk1BC;
/* 0x1C0 */ int work0;
/* 0x1C4 */ int work1;
/* 0x1C8 */ int work2;
} TOOLS_ACTOR;
typedef ACTOR* (*ToolBirthProc)(int, int, ACTOR*, GAME*, s16, int*);
typedef int (*ToolChgRequestModeProc)(ACTOR*, ACTOR*, int);
typedef TOOLS_ACTOR* (*ToolBirthProc)(int, int, TOOLS_ACTOR*, GAME_PLAY*, s16, int*);
typedef int (*ToolChgRequestModeProc)(ACTOR*, TOOLS_ACTOR*, int);
typedef struct ToolClip {
ToolBirthProc aTOL_birth_proc;
ToolChgRequestModeProc aTOL_chg_request_mode_proc;
int bank_id;
ToolBirthProc aTOL_birth_proc;
ToolChgRequestModeProc aTOL_chg_request_mode_proc;
int bank_id;
} aTOL_Clip_c;
extern aTOL_Clip_c aTOL_clip;
extern aTOL_Clip_c aTOL_clip;
#ifdef __cplusplus
}
#endif
#endif
+4 -5
View File
@@ -10,7 +10,7 @@
extern "C" {
#endif
typedef struct train1_s{
typedef struct train1_s {
ACTOR actor_class;
int anim_state;
cKF_SkeletonInfo_R_c keyframe;
@@ -20,13 +20,13 @@ typedef struct train1_s{
u8 pad4[0x2b4 - 0x2A0];
int tr_action;
int player_pass_exists;
int player_pass_leaving; //Not sure about this one
int player_pass_leaving; // Not sure about this one
int unk2c0;
ACTOR* tr_actor_p;
f32 tr_speed;
f32 tr0_pos;
u8 pad2[0x2D8-0x2CC];
}TRAIN1_ACTOR;
u8 pad2[0x2D8 - 0x2CC];
} TRAIN1_ACTOR;
extern ACTOR_PROFILE Train1_Profile;
@@ -35,4 +35,3 @@ extern ACTOR_PROFILE Train1_Profile;
#endif
#endif
+7 -13
View File
@@ -2,25 +2,20 @@
#define AC_TRAIN_DOOR_H
#include "types.h"
#include "m_actor.h"
#include "c_keyframe.h"
#include "ac_common.h"
#ifdef __cplusplus
extern "C" {
#endif
#define aTRD_JOINT_NUM 5
typedef struct traindoor_s {
ACTOR actor_class;
u8 pad [0x17C - 0x174];
cKF_SkeletonInfo_R_c keyframe;
u8 pad2 [0x210 - 0x1ed];
s_xyz work;
u8 pad3 [0x22e - 0x216];
s_xyz target;
u8 pad4[0x24c - 0x234];
int idle;
}TRAINDOOR_ACTOR;
/* 0x000 */ CMN_ACTOR common_actor_class;
/* 0x210 */ s_xyz work[aTRD_JOINT_NUM];
/* 0x22E */ s_xyz target[aTRD_JOINT_NUM];
/* 0x24C */ int open_flag;
} TRAINDOOR_ACTOR;
extern ACTOR_PROFILE TrainDoor_Profile;
@@ -29,4 +24,3 @@ extern ACTOR_PROFILE TrainDoor_Profile;
#endif
#endif
+2 -4
View File
@@ -15,8 +15,7 @@ typedef int (*TRAIN_WINDOW_DRAW_TYPE)(ACTOR*, GAME*);
#define CRV_DEBUG_GREEN_VALUE 89
#define CRV_DEBUG_BLUE_VALUE 90
typedef struct train_window_s{
typedef struct train_window_s {
ACTOR actor_class;
TRAIN_WINDOW_DRAW_TYPE draw_type;
s16 pallete_id;
@@ -34,7 +33,7 @@ typedef struct train_window_s{
f32 scroll_speed;
s_xyz pos;
f32 lod_factor;
}TRAIN_WINDOW_ACTOR;
} TRAIN_WINDOW_ACTOR;
extern ACTOR_PROFILE Train_Window_Profile;
@@ -43,4 +42,3 @@ extern ACTOR_PROFILE Train_Window_Profile;
#endif
#endif
+57 -1
View File
@@ -3,11 +3,68 @@
#include "types.h"
#include "m_actor.h"
#include "libultra/ultratypes.h"
#ifdef __cplusplus
extern "C" {
#endif
enum {
aUKI_STATUS_0,
aUKI_STATUS_CARRY,
aUKI_STATUS_READY,
aUKI_STATUS_CAST,
aUKI_STATUS_FLOAT,
aUKI_STATUS_VIB,
aUKI_STATUS_COMEBACK,
aUKI_STATUS_CATCH,
aUKI_STATUS_NUM
};
typedef void (*aUKI_SET_VALUE_PROC)(ACTOR* actorx, xyz_t pos, xyz_t pos_speed, int angle_speed_y, int command);
typedef mActor_name_t (*aUKI_GET_FISH_TYPE)(ACTOR* actorx);
/* sizeof(UKI_ACTOR) == 0x2B8 */
typedef struct actor_uki_s {
/* 0x000 */ ACTOR actor_class;
/* 0x174 */ ACTOR* child_actor;
/* 0x178 */ ClObjPipe_c col_pipe;
/* 0x194 */ f32 _194;
/* 0x198 */ MtxF mtxf;
/* 0x1D8 */ s16 proc;
/* 0x1DC */ xyz_t parabola_vec[2];
/* 0x1F4 */ xyz_t parabola_acc[2];
/* 0x20C */ f32 range;
/* 0x210 */ aUKI_SET_VALUE_PROC set_value_proc;
/* 0x214 */ aUKI_GET_FISH_TYPE get_fish_type_proc;
/* 0x218 */ xyz_t right_hand_pos;
/* 0x224 */ xyz_t position_speed;
/* 0x230 */ int angle_speed_y;
/* 0x234 */ int command;
/* 0x238 */ int status;
/* 0x23C */ xyz_t cast_goal_point;
/* 0x248 */ xyz_t rod_top_position;
/* 0x254 */ xyz_t left_hand_pos;
/* 0x260 */ u8 touched_flag;
/* 0x261 */ u8 hit_water_flag;
/* 0x262 */ s16 frame_timer;
/* 0x264 */ s16 cast_timer;
/* 0x266 */ s16 touch_timer;
/* 0x268 */ xyz_t uki_pos;
/* 0x274 */ xyz_t gyo_pos;
/* 0x280 */ s_xyz uki_angle;
/* 0x286 */ s16 uki_rot_speed;
/* 0x288 */ int gyo_command;
/* 0x28C */ int gyo_status;
/* 0x290 */ int gyo_type;
/* 0x294 */ f32 gyo_scale;
/* 0x298 */ int color[3]; /* rgb */
/* 0x2A4 */ u8 _2A4[0x10];
/* 0x2B4 */ u8 coast_flag;
/* 0x2B5 */ u8 _2B5;
} UKI_ACTOR;
extern ACTOR_PROFILE Uki_Profile;
#ifdef __cplusplus
@@ -15,4 +72,3 @@ extern ACTOR_PROFILE Uki_Profile;
#endif
#endif
+18 -20
View File
@@ -11,32 +11,32 @@ extern "C" {
extern int aWeather_ChangingWeather();
extern void aWeather_RequestChangeWeatherToIsland();
extern void aWeather_RequestChangeWeatherFromIsland();
extern ACTOR_PROFILE Weather_Profile;
typedef struct ac_weather_priv_s{
typedef struct ac_weather_priv_s {
xyz_t pos;
xyz_t speed;
f32 currentY;
f32 unk1C;
s16 timer;
s16 work[5];
s16 work[5];
u8 use;
u8 id;
u8 status;
}aWeather_Priv;
} aWeather_Priv;
typedef struct weather_actor_s WEATHER_ACTOR;
typedef void (*CHANGE_WEATHER_PROC)(ACTOR* weather, s16 status, s16 level);
typedef int (*GET_WEATHER_PRV_NUM)(ACTOR* weather);
typedef void (*REMOVE_WEATHER_PRV)(ACTOR* weather, int id);
typedef void (*CHANGE_WEATHER_PROC)(ACTOR* actorx, s16 status, s16 level);
typedef int (*GET_WEATHER_PRV_NUM)(ACTOR* actorx);
typedef void (*REMOVE_WEATHER_PRV)(ACTOR* actorx, int id);
typedef aWeather_Priv* (*GET_WEATHER_PRV)(u8 status, s16 timer, xyz_t* pos, xyz_t* speed, ACTOR* weather, int id);
typedef int (*WEATHER_SOUND_EFFECT)();
typedef void (*CHANGE_WEATER_INSTANCE_PROC)(WEATHER_ACTOR* weather, s16 status, s16 level);
typedef void (*CHANGE_WEATER_INSTANCE_PROC)(ACTOR* actorx, s16 status, s16 level);
typedef struct ac_weather_clip_s{
WEATHER_ACTOR* actor;
typedef struct ac_weather_clip_s {
ACTOR* actor;
CHANGE_WEATHER_PROC change_weather;
GET_WEATHER_PRV_NUM get_priv_num;
REMOVE_WEATHER_PRV remove_priv;
@@ -44,25 +44,24 @@ typedef struct ac_weather_clip_s{
WEATHER_SOUND_EFFECT stop_sound;
WEATHER_SOUND_EFFECT start_sound;
CHANGE_WEATER_INSTANCE_PROC change_weather_instance;
}aWeather_Clip_c;
} aWeather_Clip_c;
typedef void (*MK_WEATHER_PROC)(ACTOR*,GAME*);
typedef void (*MK_WEATHER_PROC)(ACTOR*, GAME*);
typedef void (*CT_WEATHER_PROC)(aWeather_Priv*, GAME*);
typedef void (*MV_WEATHER_PROC)(aWeather_Priv*, GAME*);
typedef void (*MT_WEATHER_PROC)(aWeather_Priv*, GAME*);
typedef void (*ST_WEATHER_PROC)(GAME*);
typedef void (*DW_WEATHER_PROC)(aWeather_Priv*, GAME*);
typedef struct ac_weather_profile_s{
typedef struct ac_weather_profile_s {
MK_WEATHER_PROC make;
CT_WEATHER_PROC constructor;
MV_WEATHER_PROC move;
ST_WEATHER_PROC set;
DW_WEATHER_PROC draw;
}aWeather_Profile_c;
} aWeather_Profile_c;
struct weather_actor_s{
struct weather_actor_s {
/* 0x000 */ ACTOR actor_class;
/* 0x174 */ aWeather_Profile_c* current_profile;
/* 0x178 */ s16 current_status;
@@ -74,10 +73,10 @@ struct weather_actor_s{
/* 0x184 */ u8* ptr;
/* 0x188 */ xyz_t pos;
/* 0x194 */ aWeather_Priv* priv;
/* 0x198 */ void* t;
/* 0x198 */ void* t;
/* 0x19C */ u8 request_change;
/* 0x19E */ s16 unk19E;
/* 0x1A0 */ aWeather_Clip_c clip;
/* 0x1A0 */ aWeather_Clip_c clip;
/* 0x1C0 */ s16 timer;
/* 0x1C2 */ s16 timer2;
/* 0x1C4 */ xyz_t wind_info;
@@ -90,11 +89,10 @@ struct weather_actor_s{
/* 0x1DC */ s16 start_sound_effect;
/* 0x1DE */ s16 stop_sound_effect;
/* 0x1E0 */ s16 basement_event;
};
};
#ifdef __cplusplus
}
#endif
#endif
+33 -7
View File
@@ -15,6 +15,32 @@ typedef struct audio_tempo_beat_s {
/* 0x01 */ s8 beat;
} TempoBeat_c;
/* sizeof(StaffRollInfo_c) == 0x18 */
typedef struct audio_staffroll_info_s {
/* 0x00 */ s16 staffroll_part;
/* 0x02 */ s16 _01;
/* 0x08 */ f64 percent;
/* 0x10 */ s8 mouth_num;
/* 0x11 */ s8 blink_flag;
/* 0x12 */ s8 beat;
} StaffRollInfo_c;
typedef struct radio_s {
/* 0x000 */ s8 unk0;
/* 0x004 */ f32 unk4;
/* 0x008 */ u16 tempo;
} Radio_c;
enum {
STAFFROLL_PART_START,
STAFFROLL_PART_INTRO,
STAFFROLL_PART_MAIN,
STAFFROLL_PART_FADEOUT,
STAFFROLL_PART_FINISH,
STAFFROLL_PART_NUM
};
enum {
VOICE_STATUS_NORMAL,
VOICE_STATUS_ANGRY,
@@ -34,8 +60,8 @@ extern void sAdo_BgmStart(u8 id);
extern void sAdo_BgmStop(u16 id);
extern void sAdo_SysTrgStart(u16 id);
extern void sAdo_PlyWalkSe(int walk, const xyz_t* pos);
extern void sAdo_PlyWalkSeRoom(int walk, const xyz_t* pos);
extern void sAdo_PlyWalkSe(u16 walk, const xyz_t* pos);
extern void sAdo_PlyWalkSeRoom(u8 walk, const xyz_t* pos);
extern void sAdo_NpcWalkSe(int walk, const xyz_t* pos);
extern void sAdo_NpcWalkSeRoom(int walk, const xyz_t* pos);
@@ -72,7 +98,7 @@ extern s8 sAdo_GetRhythmDelay(u32 id);
extern void sAdo_GetRhythmInfo(TempoBeat_c* rhythm);
extern void sAdo_SetRhythmInfo(TempoBeat_c* rhythm);
extern int sAdo_InstCountGet();
extern s8 sAdo_InstCountGet();
extern void sAdo_RhythmPos(u32 id, u8 haniwa_id, const xyz_t* pos);
@@ -92,9 +118,9 @@ extern void sAdos_KishaStatusTrg(u8 state);
extern void sAdos_KishaStatusLevel(f32 speed, u32 ongenNum1, u16 angle1, f32 distance1, u32 ongenNum2, u16 angle2,
f32 distance2);
extern void sAdos_GetRadioCounter(void* p);
extern int sAdos_GetRadioCounter(Radio_c* radio);
extern void sAdos_GetKappaCounter(void* p);
extern void sAdos_GetStaffRollInfo(void* p);
extern void sAdos_GetStaffRollInfo(StaffRollInfo_c* info);
extern void sAdos_TTKK_ARM(u8 mode);
@@ -112,7 +138,7 @@ extern void sAdo_Museum(u8 type);
extern void sAdo_SoftReset();
extern u16 sAdo_Get_WalkLabel(int type);
extern int sAdo_Get_KokeruLabel(int type);
extern u16 sAdo_Get_KokeruLabel(int type);
extern void sAdo_SceneMode(u8 mode);
extern u8 sAdo_RoomIncectPos(u32 f, u16 u, const xyz_t* pos);
@@ -121,7 +147,7 @@ extern void sAdo_FurnitureInstPos(u32 id, const xyz_t* pos);
extern void sAdo_Set_ongenpos_refuse_fg(int state);
extern int sAdo_GameframeEnd_Check();
extern int sAdo_GetSoundFrameCounter();
extern u32 sAdo_GetSoundFrameCounter();
extern int sAdo_CheckOnPlussBridge(const xyz_t* pos, u32 atr);
extern void sAdo_RegistPlussBridge(const xyz_t* pos);
+140 -13
View File
@@ -12,8 +12,9 @@ extern "C" {
#define VOICE_MODE_SILENT 2
/* audio is monophonic */
#define MONO(id) (id | 0x1000)
#define SE_FLAG_15(id) (id | 0x8000)
#define MONO(id) ((id) | 0x1000)
#define HANABI(id) ((id) | 0x2000) /* TODO: better name, this probably is some echo effect modifier */
#define SE_FLAG_15(id) ((id) | 0x8000)
// TODO: Make the rest of Sound Effects with parameters
#define SE_REGISTER MONO(0x50)
@@ -44,16 +45,16 @@ typedef enum audio_sound_effects {
NA_SE_DRAWER_SHUT = 0x3A,
NA_SE_ITEM_GET = 0x40,
NA_SE_ITEM_HORIDASHI = 0x47,
NA_SE_47 = 0x47,
NA_SE_MONEY0 = 0x49,
NA_SE_MONEY1,
NA_SE_MONEY2,
NA_SE_COIN,
NA_SE_TEMOCHI_KAZAGURUMA,
NA_SE_52 = 0x52,
NA_SE_BIRTH_FTR = 0x57,
NA_SE_ITEM_HORIDASHI = 0x57,
NA_SE_CLEAN_UP_FTR = 0x58,
NA_SE_TOOL_FURI = 0x5A, // swing?
@@ -74,15 +75,24 @@ typedef enum audio_sound_effects {
NA_SE_STONECOIN_ROLL = 0x7D,
NA_SE_STONECOIN_DRAG = 0x7E,
NA_SE_A8 = 0xA8,
NA_SE_TRAIN_RIDE = 0x8D,
NA_SE_CF = 0xCF,
NA_SE_GOKI_MOVE = 0xA8,
NA_SE_KA_BUZZ = 0xCF,
NA_SE_ROD_STROKE = 0x109,
NA_SE_ROD_BACK,
NA_SE_10B,
NA_SE_10C,
NA_SE_HANABI0 = HANABI(0x10F),
NA_SE_HANABI1 = HANABI(0x110),
NA_SE_HANABI2 = HANABI(0x111),
NA_SE_HANABI3 = HANABI(0x112),
NA_SE_EAT = 0x113,
NA_SE_11B = 0x11B,
NA_SE_WEAR = 0x11C,
NA_SE_SCOOP1 = 0x11E,
@@ -93,6 +103,10 @@ typedef enum audio_sound_effects {
NA_SE_TREE_TOUCH = 0x134,
NA_SE_TREE_YURASU,
NA_SE_PUN_YUGE = 0x13B,
NA_SE_DOYON = 0x13F,
NA_SE_KIRIBASU_SCOOP = 0x148,
NA_SE_KIRIBASU_OUT,
@@ -115,6 +129,9 @@ typedef enum audio_sound_effects {
NA_SE_TOILE_CHAIR_SIT = 0x410,
NA_SE_TRAINDOOR0 = 0x412,
NA_SE_TRAINDOOR1,
NA_SE_BED_IN = 0x415,
NA_SE_BED_NEGAERI,
NA_SE_BED_OUT,
@@ -122,14 +139,17 @@ typedef enum audio_sound_effects {
NA_SE_ROTATE = 0x41A,
NA_SE_41C = 0x41C,
NA_SE_SOFT_CHAIR_SIT = 0x41F,
NA_SE_AXE_HIT,
NA_SE_AXE_CUT,
NA_SE_SOFT_CHAIR_SIT,
NA_SE_HARD_CHAIR_SIT,
NA_SE_BUBU_CHAIR_SIT,
NA_SE_SOFT_CHAIR_STANDUP,
NA_SE_HARD_CHAIR_STANDUP,
NA_SE_BUBU_CHAIR_STANDUP = 0x429,
NA_SE_JUMP,
NA_SE_LANDING,
NA_SE_FTR_DOOR_OPEN = 0x42C,
NA_SE_FTR_DOOR_CLOSE = 0x42D,
NA_SE_DRAWER_OPEN = 0x42E,
@@ -138,9 +158,6 @@ typedef enum audio_sound_effects {
NA_SE_UMBRELLA_ROTATE = 0x432,
NA_SE_JUMP,
NA_SE_LANDING,
NA_SE_KARABURI = 0x43A,
NA_SE_ROD_STROKE_SMALL = 0x445,
@@ -149,12 +166,122 @@ typedef enum audio_sound_effects {
NA_SE_SCOOP_ITEM_HIT,
NA_SE_AXE_BALL_HIT,
NA_SE_461 = 0x461,
NA_SE_COIN_GASAGOSO = 0x465,
} AudioSE;
typedef enum bgm_e {
BGM_AEROBICS = 27,
BGM_SILENCE,
BGM_FIELD_00,
BGM_FIELD_01,
BGM_FIELD_02,
BGM_FIELD_03,
BGM_FIELD_04,
BGM_FIELD_05,
BGM_FIELD_06,
BGM_FIELD_07,
BGM_FIELD_08,
BGM_FIELD_09,
BGM_FIELD_10,
BGM_FIELD_11,
BGM_FIELD_12,
BGM_FIELD_13,
BGM_FIELD_14,
BGM_FIELD_15,
BGM_FIELD_16,
BGM_FIELD_17,
BGM_FIELD_18,
BGM_FIELD_19,
BGM_FIELD_20,
BGM_FIELD_21,
BGM_FIELD_22,
BGM_FIELD_23,
BGM_BROKERS_SHOP,
BGM_FORTUNE_TELLER,
BGM_SPORTSFAIR_AEROBICS,
BGM_SPORTSFAIR_FOOTRACE,
BGM_SPORTSFAIR_BALLTOSS,
BGM_HARVEST_MOON,
BGM_NEW_YEARS_1HR,
BGM_NEW_YEARS_30MIN,
BGM_NEW_YEARS_10MIN,
BGM_NEW_YEARS_5MIN,
BGM_NEW_YEARS_NOW,
BGM_NEW_YEARS_DAY,
BGM_SHOP1,
BGM_SHOP2,
BGM_SHOP3,
BGM_DIG_ITEM,
BGM_POST_OFFICE0,
BGM_INTRO_TRAIN,
BGM_INTRO_KK,
BGM_SHOP0,
BGM_POLICE_BOX,
BGM_SAVE,
BGM_INTRO_ARRIVE,
BGM_INTRO_RCN_GUIDE,
BGM_INTRO_SELECT_HOUSE,
BGM_INTRO_SELECT_HOUSE2,
BGM_INTRO_FIND_SHOP,
BGM_INTRO_CHORES,
BGM_HALLOWEEN,
BGM_XMAS_EVE,
BGM_FIREWORKS_FESTIVAL,
BGM_CHERRY_BLOSSOM_FESTIVAL,
BGM_NEW_YEARS_PARTY,
BGM_KK_HAZURE0,
BGM_NEW_YEARS_WISH,
BGM_SPORTSFAIR_TUGOFWAR,
BGM_NEW_YEARS_MORNING,
BGM_POST_OFFICE1,
BGM_TRAIN_PULL_INTO_TOWN,
BGM_TRAIN_BOARD,
BGM_ENTER_HOUSE,
BGM_RESET,
BGM_BEE_CHASE,
BGM_BEE_STUNG,
BGM_RAIN,
BGM_TITLE,
BGM_TRAIN_ARRIVAL_WAIT,
BGM_INTRO_NEW_TOWN,
BGM_INTRO_CHORES_COMPLETE,
BGM_DEBT_PAID,
BGM_ALL_INSECTS,
BGM_ALL_FISH,
BGM_KAMAKURA,
BGM_RESET2,
BGM_SHOP0_LATE,
BGM_SHOP1_LATE,
BGM_SHOP2_LATE,
BGM_SHOP3_LATE,
BGM_NINTENDO0,
BGM_NINTENDO1,
BGM_NINTENDO2,
BGM_NINTENDO3,
BGM_NINTENDO4,
BGM_MUSEUM,
BGM_TAILORS,
BGM_90,
BGM_ISLAND,
BGM_KAPPA_SONG0,
BGM_KAPPA_SONG1,
BGM_KAPPA_SONG2,
BGM_KAPPA_SONG3,
BGM_KAPPA_SONG4,
BGM_KAPPA_SONG5,
BGM_KAPPA_SONG6,
BGM_KAPPA_SONG7,
BGM_KAPPA_SONG8,
BGM_KAPPA_SONG9,
BGM_KAPPA_SONG10,
BGM_KAPPA_SONG11,
BGM_KAPPA_SONG12,
BGM_KAPPA_SONG13,
BGM_KAPPA_SONG14,
BGM_KAPPA_SONG15,
// TODO: others
BGM_MD0 = 128,
} BGM_e;
+1 -1
View File
@@ -28,7 +28,7 @@ typedef void (*bIT_SHADOW_DRAW_PROC)(GAME*, bIT_ShadowData_c*, int);
typedef void (*bIT_SINGLE_DRAW_PROC)(GAME* game, mActor_name_t fg_no, xyz_t* pos, f32 scale_f, bIT_DRAW_BF_PROC draw_bf,
bIT_DRAW_AF_PROC draw_af, rgba_t* col);
typedef int (*bIT_TREE_CUTCOUNT_CHECK_PROC)(GAME* game, int ut_x, int ut_z);
typedef void (*bIT_DIG_HOLE_EFFECT_ENTRY_PROC)(mActor_name_t fg_item, xyz_t* pos, u16 frames, u16 wait_frames);
typedef int (*bIT_DIG_HOLE_EFFECT_ENTRY_PROC)(mActor_name_t fg_item, xyz_t* pos, u16 frames, u16 wait_frames);
typedef void (*bIT_BURY_HOLE_EFFECT_ENTRY_PROC)(mActor_name_t fg_item, xyz_t* pos, u16 frames);
typedef int (*bIT_PIT_FALL_PROC)(mActor_name_t pit_fg_item, int ut_x, int ut_z, mActor_name_t fg_item_in_pit);
typedef int (*bIT_PIT_FALL_STOP_PROC)(mActor_name_t pit_fg_item, int ut_x, int ut_z, mActor_name_t fg_item_in_pit);
+29 -29
View File
@@ -24,7 +24,7 @@ extern "C" {
#define cKF_ANIMATION_TRANS_XZ (1 << 0) // Translation on XZ
#define cKF_ANIMATION_TRANS_Y (1 << 1) // Translation on Y
#define cKF_ANIMATION_ROT_X (1 << 2) // Rotation on the X axis
#define cKF_ANIMATION_ROT_Y (1 << 2) // Rotation on the X axis
enum {
cKF_STATE_NONE,
@@ -382,10 +382,10 @@ extern void cKF_SkeletonInfo_R_combine_work_set(cKF_SkeletonInfo_R_combine_work_
* @param joint Pointer to the joint data.
* @param flag Pointer to the current joint flag.
* @param combine Pointer to the combine work set structure.
* @param cwork_num Pointer to the current work layer number.
* @param part_table Pointer to the current part table.
*/
extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_SkeletonInfo_R_combine_work_c* combine,
s8* cwork_num);
s8* part_table);
/**
* Combines rotation data from multiple animation layers for a joint, modifying it based on animation flags.
@@ -393,34 +393,34 @@ extern void cKF_SkeletonInfo_R_combine_translation(s16** joint, int* flag, cKF_S
* @param joint Pointer to the current joint's rotation data.
* @param flag Pointer to the animation flag affecting the current joint.
* @param combine Pointer to the combine work set structure containing animation layer data.
* @param cwork_num Pointer to the layer number being processed.
* @param part_table Pointer to the current part table.
*/
extern void cKF_SkeletonInfo_R_combine_rotation(s16** joint, int* flag, cKF_SkeletonInfo_R_combine_work_c* combine,
s8* cwork_num);
s8* part_table);
/**
* Combines and plays two sets of animation data, applying translations and rotations from both.
*
* @param info1 First skeleton info structure to combine.
* @param info2 Second skeleton info structure to combine.
* @param flag Pointer to a flag determining the combination behavior.
* @param part_table Pointer to the part table determining the combination behavior.
* @return Status of the combination and play operation.
*/
extern int cKF_SkeletonInfo_R_combine_play(cKF_SkeletonInfo_R_c* info1, cKF_SkeletonInfo_R_c* info2, s8* flag);
extern int cKF_SkeletonInfo_R_combine_play(cKF_SkeletonInfo_R_c* info1, cKF_SkeletonInfo_R_c* info2, s8* part_table);
/**
* Combines and plays three sets of animation data, applying translations and rotations, and updates playback state.
*
* @param arg1 Result of playing first animation.
* @param arg2 Result of playing second animation.
* @param arg3 Result of playing third animation.
* @param state1 Result of playing first animation.
* @param state2 Result of playing second animation.
* @param state3 Result of playing third animation.
* @param info1 First skeleton info structure to combine.
* @param info2 Second skeleton info structure to combine.
* @param info3 Third skeleton info structure to combine.
* @param flag Pointer to a flag determining the combination behavior.
* @param part_table Pointer to the part table determining the combination behavior.
*/
extern void cKF_SkeletonInfo_R_T_combine_play(int* arg1, int* arg2, int* arg3, cKF_SkeletonInfo_R_c* info1,
cKF_SkeletonInfo_R_c* info2, cKF_SkeletonInfo_R_c* info3, s8* flag);
extern void cKF_SkeletonInfo_R_T_combine_play(int* state1, int* state2, int* state3, cKF_SkeletonInfo_R_c* info1,
cKF_SkeletonInfo_R_c* info2, cKF_SkeletonInfo_R_c* info3, s8* part_table);
/**
* Sets base shape translation and rotation for a skeleton info structure.
@@ -439,16 +439,16 @@ extern void cKF_SkeletonInfo_R_Animation_Set_base_shape_trs(cKF_SkeletonInfo_R_c
/**
* Adjusts the base position and correction for a skeleton info structure based on animation flags.
*
* @param counter Animation counter to determine the phase of movement.
* @param basepos Original base position of the model.
* @param correctpos Corrected base position of the model.
* @param ybase Base Y angle for rotation.
* @param yidle Idle Y angle for rotation.
* @param counter Animation counter to determine the phase of movement.
* @param keyframe Skeleton info structure to modify.
* @param an_flag Animation flags to determine which corrections to apply.
*/
extern void cKF_SkeletonInfo_R_AnimationMove_ct_base(f32 counter, xyz_t* basepos, xyz_t* correctpos, s16 ybase,
s16 yidle, cKF_SkeletonInfo_R_c* keyframe, int animation_flag);
extern void cKF_SkeletonInfo_R_AnimationMove_ct_base(xyz_t* basepos, xyz_t* correctpos, s16 ybase, s16 yidle,
f32 counter, cKF_SkeletonInfo_R_c* keyframe, int animation_flag);
/**
* Resets animation movement and flags for a skeleton info structure.
@@ -462,29 +462,29 @@ extern void cKF_SkeletonInfo_R_AnimationMove_dt(cKF_SkeletonInfo_R_c* keyframe);
*
* @param base Base position to modify.
* @param sbase Base rotation to modify.
* @param move Movement amount to apply.
* @param scale Scaling amount to apply.
* @param yidle Y-axis idle angle.
* @param keyframe Skeleton info structure containing animation data.
*/
extern void cKF_SkeletonInfo_R_AnimationMove_base(xyz_t* base, s_xyz* sbase, xyz_t* move, s16 yidle,
extern void cKF_SkeletonInfo_R_AnimationMove_base(xyz_t* base, s16* sbase, xyz_t* scale, s16 yidle,
cKF_SkeletonInfo_R_c* keyframe);
/**
* Calculates and applies transformation to world coordinates based on animation data.
*
* @param calcx X-coordinate for calculation base.
* @param calcy Y-coordinate for calculation base.
* @param calcz Z-coordinate for calculation base.
* @param base Base position result.
* @param calcp Position calculation parameters.
* @param val Angle value for rotation.
* @param trans Transformation to apply.
* @param calc_pos Calculated position result.
* @param base_pos Base world position.
* @param trans_x X-coordinate for translation.
* @param trans_y Y-coordinate for translation.
* @param trans_z Z-coordinate for translation.
* @param angle_y Angle value for rotation.
* @param scale Scaling factor.
* @param keyframe Skeleton info structure containing animation data.
* @param animation_flag Flags determining which transformations to apply.
* @param trans_flag Flags determining which transformations to apply.
*/
extern void cKF_SkeletonInfo_R_AnimationMove_CulcTransToWorld(f32 calcx, f32 calcy, f32 calcz, xyz_t* base,
xyz_t* calcp, s16 val, xyz_t* trans,
cKF_SkeletonInfo_R_c* keyframe, int animation_flag);
extern void cKF_SkeletonInfo_R_AnimationMove_CulcTransToWorld(xyz_t* calc_pos, const xyz_t* base_pos, f32 trans_x,
f32 trans_y, f32 trans_z, s16 angle_y, const xyz_t* scale,
cKF_SkeletonInfo_R_c* keyframe, int trans_flag);
#ifdef __cplusplus
}
+50
View File
@@ -0,0 +1,50 @@
#ifndef _DOLPHIN_AI_H_
#define _DOLPHIN_AI_H_
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*AISCallback)(u32 count);
typedef void (*AIDCallback)();
#define AI_STREAM_START 1
#define AI_STREAM_STOP 0
#define AI_SAMPLERATE_32KHZ 0
#define AI_SAMPLERATE_48KHZ 1
AIDCallback AIRegisterDMACallback(AIDCallback callback);
void AIInitDMA(u32 start_addr, u32 length);
BOOL AIGetDMAEnableFlag(void);
void AIStartDMA(void);
void AIStopDMA(void);
u32 AIGetDMABytesLeft(void);
u32 AIGetDMAStartAddr(void);
u32 AIGetDMALength(void);
BOOL AICheckInit(void);
AISCallback AIRegisterStreamCallback(AISCallback callback);
u32 AIGetStreamSampleCount(void);
void AIResetStreamSampleCount(void);
void AISetStreamTrigger(u32 trigger);
u32 AIGetStreamTrigger(void);
void AISetStreamPlayState(u32 state);
u32 AIGetStreamPlayState(void);
void AISetDSPSampleRate(u32 rate);
u32 AIGetDSPSampleRate(void);
void AISetStreamSampleRate(u32 rate);
u32 AIGetStreamSampleRate(void);
void AISetStreamVolLeft(u8 vol);
u8 AIGetStreamVolLeft(void);
void AISetStreamVolRight(u8 vol);
u8 AIGetStreamVolRight(void);
void AIInit(u8* stack);
void AIReset(void);
#ifdef __cplusplus
}
#endif
#endif
+1
View File
@@ -53,6 +53,7 @@ void DSPHalt();
void DSPSendMailToDSP(u32 mail);
u32 DSPCheckMailToDSP();
u32 DSPCheckMailFromDSP();
u32 DSPReadMailFromDSP();
u32 DSPGetDMAStatus();
DSPTaskInfo* DSPAddTask(DSPTaskInfo* task);
+67 -64
View File
@@ -19,89 +19,89 @@ typedef void (*DVDDoneReadCallback)(s32, DVDFileInfo*);
typedef void (*DVDOptionalCommandChecker)(DVDCommandBlock* block, DVDLowCallback callback);
typedef struct DVDDriveInfo {
u16 revisionLevel; // _00
u16 deviceCode; // _02
u32 releaseDate; // _04
u8 padding[24]; // _08
u16 revisionLevel; // _00
u16 deviceCode; // _02
u32 releaseDate; // _04
u8 padding[24]; // _08
} DVDDriveInfo;
// Struct for DVD information (size 0x20)
typedef struct DVDDiskID {
char gameName[4]; // _00
char company[2]; // _04
u8 diskNumber; // _06
u8 gameVersion; // _07
u8 streaming; // _08
u8 streamBufSize; // _09, default = 0
u8 padding[22]; // _0A, all 0s
char gameName[4]; // _00
char company[2]; // _04
u8 diskNumber; // _06
u8 gameVersion; // _07
u8 streaming; // _08
u8 streamBufSize; // _09, default = 0
u8 padding[22]; // _0A, all 0s
} DVDDiskID;
// Struct for command information (size 0x30).
struct DVDCommandBlock {
DVDCommandBlock* next; // _00
DVDCommandBlock* prev; // _04
u32 command; // _08
s32 state; // _0C
u32 offset; // _10
u32 length; // _14
void* addr; // _18
u32 currTransferSize; // _1C
u32 transferredSize; // _20
DVDDiskID* id; // _24
DVDCBCallback callback; // _28
void* userData; // _2C
DVDCommandBlock* next; // _00
DVDCommandBlock* prev; // _04
u32 command; // _08
s32 state; // _0C
u32 offset; // _10
u32 length; // _14
void* addr; // _18
u32 currTransferSize; // _1C
u32 transferredSize; // _20
DVDDiskID* id; // _24
DVDCBCallback callback; // _28
void* userData; // _2C
};
// Struct for file information (size 0x3C).
// NB: we had this as DVDPlayer previously.
struct DVDFileInfo {
DVDCommandBlock cBlock; // _00
u32 startAddr; // _30
u32 length; // _34
DVDCallback callback; // _38
DVDCommandBlock cBlock; // _00
u32 startAddr; // _30
u32 length; // _34
DVDCallback callback; // _38
};
// Struct for directory information (size 0xC).
typedef struct DVDDir {
u32 entryNum; // _00
u32 location; // _04
u32 next; // _08
u32 entryNum; // _00
u32 location; // _04
u32 next; // _08
} DVDDir;
// Struct for directory entries (size 0xC).
typedef struct DVDDirEntry {
u32 entryNum; // _00
BOOL isDir; // _04
char* name; // _08
u32 entryNum; // _00
BOOL isDir; // _04
char* name; // _08
} DVDDirEntry;
// Struct for handing queues.
typedef struct DVDQueue DVDQueue;
struct DVDQueue {
DVDQueue* mHead; // _00
DVDQueue* mTail; // _04
DVDQueue* mHead; // _00
DVDQueue* mTail; // _04
};
// DVD Boot information instructions.
// Struct 1.
typedef struct DVDBB1 {
u32 appLoaderLength; // _00
void* appLoaderFunc1; // _04
void* appLoaderFunc2; // _08
void* appLoaderFunc3; // _0C
u32 appLoaderLength; // _00
void* appLoaderFunc1; // _04
void* appLoaderFunc2; // _08
void* appLoaderFunc3; // _0C
} DVDBB1;
// Struct 2.
typedef struct DVDBB2 {
u32 bootFilePosition; // _00
u32 FSTPosition; // _04
u32 FSTLength; // _08
u32 FSTMaxLength; // _0C
void* FSTAddress; // _10
u32 userPosition; // _14
u32 userLength; // _18
u32 reserved_1C; // _1C
u32 bootFilePosition; // _00
u32 FSTPosition; // _04
u32 FSTLength; // _08
u32 FSTMaxLength; // _0C
void* FSTAddress; // _10
u32 userPosition; // _14
u32 userLength; // _18
u32 reserved_1C; // _1C
} DVDBB2;
//////////////////////////////////
@@ -143,6 +143,8 @@ s32 DVDGetTransferredSize(DVDFileInfo* fileInfo);
DVDDiskID* DVDGetCurrentDiskID();
BOOL DVDCompareDiskID(DVDDiskID* id1, DVDDiskID* id2);
DVDLowCallback DVDLowClearCallback();
BOOL DVDPrepareStreamAsync(DVDFileInfo* fileInfo, u32 length, u32 offset, DVDCallback callback);
s32 DVDCancelStream(DVDCommandBlock* block);
BOOL DVDCheckDisk();
@@ -160,36 +162,37 @@ void DVDDumpWaitingQueue();
////// USEFUL DVD DEFINES ////////
// Macro for reading.
#define DVDReadAsync(fileInfo, addr, length, offset, callback) DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
#define DVDReadAsync(fileInfo, addr, length, offset, callback) \
DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
#define DVDGetFileInfoStatus(fileInfo) DVDGetCommandBlockStatus(&(fileInfo)->cBlock)
// Minimum transfer size.
#define DVD_MIN_TRANSFER_SIZE 32
// DVD states.
#define DVD_STATE_FATAL_ERROR -1
#define DVD_STATE_END 0
#define DVD_STATE_BUSY 1
#define DVD_STATE_WAITING 2
#define DVD_STATE_COVER_CLOSED 3
#define DVD_STATE_NO_DISK 4
#define DVD_STATE_COVER_OPEN 5
#define DVD_STATE_WRONG_DISK 6
#define DVD_STATE_FATAL_ERROR -1
#define DVD_STATE_END 0
#define DVD_STATE_BUSY 1
#define DVD_STATE_WAITING 2
#define DVD_STATE_COVER_CLOSED 3
#define DVD_STATE_NO_DISK 4
#define DVD_STATE_COVER_OPEN 5
#define DVD_STATE_WRONG_DISK 6
#define DVD_STATE_MOTOR_STOPPED 7
#define DVD_STATE_PAUSING 8
#define DVD_STATE_IGNORED 9
#define DVD_STATE_CANCELED 10
#define DVD_STATE_RETRY 11
#define DVD_STATE_PAUSING 8
#define DVD_STATE_IGNORED 9
#define DVD_STATE_CANCELED 10
#define DVD_STATE_RETRY 11
// File info states.
#define DVD_FILEINFO_READY 0
#define DVD_FILEINFO_BUSY 1
#define DVD_FILEINFO_BUSY 1
// DVD results.
#define DVD_RESULT_GOOD 0
#define DVD_RESULT_GOOD 0
#define DVD_RESULT_FATAL_ERROR -1
#define DVD_RESULT_IGNORED -2
#define DVD_RESULT_CANCELED -3
#define DVD_RESULT_IGNORED -2
#define DVD_RESULT_CANCELED -3
#define DVD_AIS_SUCCESS 0
+114
View File
@@ -0,0 +1,114 @@
#ifndef _DOLPHIN_HW_REGS_H_
#define _DOLPHIN_HW_REGS_H_
#ifdef __MWERKS__
volatile u16 __VIRegs[59] : 0xCC002000;
volatile u32 __PIRegs[12] : 0xCC003000;
volatile u16 __MEMRegs[64] : 0xCC004000;
volatile u16 __DSPRegs[] : 0xCC005000;
volatile u32 __DIRegs[] : 0xCC006000;
volatile u32 __SIRegs[0x100] : 0xCC006400;
volatile u32 __EXIRegs[0x40] : 0xCC006800;
volatile u32 __AIRegs[8] : 0xCC006C00;
#else
#define __VIRegs ((volatile u16*)0xCC002000)
#define __PIRegs ((volatile u32*)0xCC003000)
#define __MEMRegs ((volatile u16*)0xCC004000)
#define __DSPRegs ((volatile u16*)0xCC005000)
#define __DIRegs ((volatile u32*)0xCC006000)
#define __SIRegs ((volatile u32*)0xCC006400)
#define __EXIRegs ((volatile u32*)0xCC006800)
#define __AIRegs ((volatile u32*)0xCC006C00)
#endif
// Offsets for __VIRegs
// offsets for __VIRegs[i]
#define VI_VERT_TIMING (0)
#define VI_DISP_CONFIG (1)
#define VI_HORIZ_TIMING_0L (2)
#define VI_HORIZ_TIMING_0U (3)
#define VI_HORIZ_TIMING_1L (4)
#define VI_HORIZ_TIMING_1U (5)
#define VI_VERT_TIMING_ODD (6)
#define VI_VERT_TIMING_ODD_U (7)
#define VI_VERT_TIMING_EVEN (8)
#define VI_VERT_TIMING_EVEN_U (9)
#define VI_BBI_ODD (10) // burst blanking interval
#define VI_BBI_ODD_U (11) // burst blanking interval
#define VI_BBI_EVEN (12) // burst blanking interval
#define VI_BBI_EVEN_U (13) // burst blanking interval
#define VI_TOP_FIELD_BASE_LEFT (14) // top in 2d, top of left pic in 3d
#define VI_TOP_FIELD_BASE_LEFT_U (15) // top in 2d, top of left pic in 3d
#define VI_TOP_FIELD_BASE_RIGHT (16) // top of right pic in 3d
#define VI_TOP_FIELD_BASE_RIGHT_U (17) // top of right pic in 3d
#define VI_BTTM_FIELD_BASE_LEFT (18) // bottom in 2d, bottom of left pic in 3d
#define VI_BTTM_FIELD_BASE_LEFT_U (19) // bottom in 2d, bottom of left pic in 3d
#define VI_BTTM_FIELD_BASE_RIGHT (20) // bottom of right pic in 3d
#define VI_BTTM_FIELD_BASE_RIGHT_U (21) // bottom of right pic in 3d
#define VI_VERT_COUNT (22) // vertical display position
#define VI_HORIZ_COUNT (23) // horizontal display position
#define VI_DISP_INT_0 (24) // display interrupt 0L
#define VI_DISP_INT_0U (25) // display interrupt 0U
#define VI_DISP_INT_1 (26) // display interrupt 1L
#define VI_DISP_INT_1U (27) // display interrupt 1U
#define VI_DISP_INT_2 (28) // display interrupt 2L
#define VI_DISP_INT_2U (29) // display interrupt 2U
#define VI_DISP_INT_3 (30) // display interrupt 3L
#define VI_DISP_INT_3U (31) // display interrupt 3U
#define VI_HSW (36) // horizontal scaling width
#define VI_HSR (37) // horizontal scaling register
#define VI_FCT_0 (38) // filter coefficient table 0L
#define VI_FCT_0U (39) // filter coefficient table 0U
#define VI_FCT_1 (40) // filter coefficient table 1L
#define VI_FCT_1U (41) // filter coefficient table 1U
#define VI_FCT_2 (42) // filter coefficient table 2L
#define VI_FCT_2U (43) // filter coefficient table 2U
#define VI_FCT_3 (44) // filter coefficient table 3L
#define VI_FCT_3U (45) // filter coefficient table 3U
#define VI_FCT_4 (46) // filter coefficient table 4L
#define VI_FCT_4U (47) // filter coefficient table 4U
#define VI_FCT_5 (48) // filter coefficient table 5L
#define VI_FCT_5U (49) // filter coefficient table 5U
#define VI_FCT_6 (50) // filter coefficient table 6L
#define VI_FCT_6U (51) // filter coefficient table 6U
#define VI_CLOCK_SEL (54) // clock select
#define VI_DTV_STAT (55) // DTV status
#define VI_WIDTH (56)
// offsets for __DSPRegs[i]
#define DSP_MAILBOX_IN_HI (0)
#define DSP_MAILBOX_IN_LO (1)
#define DSP_MAILBOX_OUT_HI (2)
#define DSP_MAILBOX_OUT_LO (3)
#define DSP_CONTROL_STATUS (5)
#define DSP_ARAM_SIZE (9)
#define DSP_ARAM_MODE (11)
#define DSP_ARAM_REFRESH (13)
#define DSP_ARAM_DMA_MM_HI (16) // Main mem address
#define DSP_ARAM_DMA_MM_LO (17)
#define DSP_ARAM_DMA_ARAM_HI (18) // ARAM address
#define DSP_ARAM_DMA_ARAM_LO (19)
#define DSP_ARAM_DMA_SIZE_HI (20) // DMA buffer size
#define DSP_ARAM_DMA_SIZE_LO (21)
#define DSP_DMA_START_HI (24) // DMA start address
#define DSP_DMA_START_LO (25)
#define DSP_DMA_CONTROL_LEN (27)
#define DSP_DMA_BYTES_LEFT (29)
#define DSP_DMA_START_FLAG (0x8000) // set to start DSP
#endif
+37 -10
View File
@@ -7,13 +7,15 @@
extern "C" {
#endif
#define MTX_PS
/////////////// TYPE DEFINES ///////////////
#define MTXDegToRad(a) ((a)*0.01745329252f)
#define MTXDegToRad(a) ((a) * 0.01745329252f)
typedef struct {
f32 x;
f32 y;
f32 z;
f32 x;
f32 y;
f32 z;
} Vec;
typedef f32 Mtx34[3][4];
@@ -25,7 +27,7 @@ typedef f32 PSQuaternion[4];
typedef Mtx34 GC_Mtx; // TODO: fix this
typedef struct Quaternion {
f32 x, y, z, w;
f32 x, y, z, w;
} Quaternion;
////////////////////////////////////////////
@@ -50,6 +52,9 @@ void PSMTXScale(GC_Mtx mtx, f32 xS, f32 yS, f32 zS);
void PSMTXScaleApply(const GC_Mtx src, GC_Mtx dest, f32 xS, f32 yS, f32 zS);
void PSMTXQuat(GC_Mtx mtx, const PSQuaternion* quat);
void PSVECNormalize(const Vec* src, Vec* dst);
void PSMTXMultVec(const GC_Mtx m, const Vec* src, Vec* dst);
////////////////////////////////////////////
//// PAIRED SINGLE MATRIX VEC FUNCTIONS ////
@@ -72,15 +77,37 @@ void C_MTXLightOrtho(GC_Mtx mtx, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 sca
////////////////////////////////////////////
////////////// MATRIX INLINES //////////////
static inline void MTXSetPosition(GC_Mtx mtx, const Vec* pos)
{
mtx[0][3] = pos->x;
mtx[1][3] = pos->y;
mtx[2][3] = pos->z;
static inline void MTXSetPosition(GC_Mtx mtx, const Vec* pos) {
mtx[0][3] = pos->x;
mtx[1][3] = pos->y;
mtx[2][3] = pos->z;
}
////////////////////////////////////////////
#ifdef MTX_PS
#define MTXIdentity PSMTXIdentity
#define MTXCopy PSMTXCopy
#define MTXConcat PSMTXConcat
#define MTXConcatArray PSMTXConcatArray
#define MTXTranspose PSMTXTranspose
#define MTXInverse PSMTXInverse
#define MTXInvXpose PSMTXInvXpose
#define MTXScale PSMTXScale
#define MTXTrans PSMTXTrans
#define MTXMultVec PSMTXMultVec
#else
#define MTXIdentity C_MTXIdentity
#define MTXCopy C_MTXCopy
#define MTXConcat C_MTXConcat
#define MTXConcatArray C_MTXConcatArray
#define MTXTranspose C_MTXTranspose
#define MTXInverse C_MTXInverse
#define MTXInvXpose C_MTXInvXpose
#endif
#ifdef __cplusplus
}
#endif
+24 -23
View File
@@ -2,6 +2,8 @@
#define _DOLPHIN_OS
#include "types.h"
#include "dolphin/os/OSAlloc.h"
#include "dolphin/os/OSCache.h"
#include "dolphin/os/OSContext.h"
#include "dolphin/os/OSInterrupt.h"
#include "dolphin/os/OSMessage.h"
@@ -19,47 +21,46 @@ extern void __OSPSInit();
extern void __OSFPRInit();
extern void __OSCacheInit();
void OSPanic(const char *file, int line, const char *message, ...);
void OSPanic(const char* file, int line, const char* message, ...);
void OSVReport(const char* fmt, va_list list);
void OSReport(const char* fmt, ...);
extern void __OSPSInit();
extern void __OSCacheInit();
#define OSErrorLine(line, ...) \
OSPanic(__FILE__, line, __VA_ARGS__)
#define OSErrorLine(line, ...) OSPanic(__FILE__, line, __VA_ARGS__)
#ifdef DOLPHIN_DEBUG
#define DOLPHIN_ASSERTLINE(assertion, line) \
(void) ((assertion) || (OSErrorLine(line, "Failed assertion " #assertion), 0))
#define DOLPHIN_ASSERT(assertion) \
(void) ((assertion) || (OSPanic(__FILE__, __LINE__, "Failed assertion " #assertion), 0))
#define DOLPHIN_ASSERTLINE(assertion, line) \
(void)((assertion) || (OSErrorLine(line, "Failed assertion " #assertion), 0))
#define DOLPHIN_ASSERT(assertion) \
(void)((assertion) || (OSPanic(__FILE__, __LINE__, "Failed assertion " #assertion), 0))
#else
#define DOLPHIN_ASSERTLINE(assertion, line)
#define DOLPHIN_ASSERT(assertion)
#endif
//void OSResetSystem(u32, u32, u32); // goes in reset, but eh
// void OSResetSystem(u32, u32, u32); // goes in reset, but eh
void OSInit(void);
#define OS_CONSOLE_RETAIL4 0x00000004
#define OS_CONSOLE_RETAIL3 0x00000003
#define OS_CONSOLE_RETAIL2 0x00000002
#define OS_CONSOLE_RETAIL1 0x00000001
#define OS_CONSOLE_RETAIL 0x00000000
#define OS_CONSOLE_DEVHW4 0x10000007
#define OS_CONSOLE_DEVHW3 0x10000006
#define OS_CONSOLE_DEVHW2 0x10000005
#define OS_CONSOLE_DEVHW1 0x10000004
#define OS_CONSOLE_MINNOW 0x10000003
#define OS_CONSOLE_ARTHUR 0x10000002
#define OS_CONSOLE_RETAIL4 0x00000004
#define OS_CONSOLE_RETAIL3 0x00000003
#define OS_CONSOLE_RETAIL2 0x00000002
#define OS_CONSOLE_RETAIL1 0x00000001
#define OS_CONSOLE_RETAIL 0x00000000
#define OS_CONSOLE_DEVHW4 0x10000007
#define OS_CONSOLE_DEVHW3 0x10000006
#define OS_CONSOLE_DEVHW2 0x10000005
#define OS_CONSOLE_DEVHW1 0x10000004
#define OS_CONSOLE_MINNOW 0x10000003
#define OS_CONSOLE_ARTHUR 0x10000002
#define OS_CONSOLE_PC_EMULATOR 0x10000001
#define OS_CONSOLE_EMULATOR 0x10000000
#define OS_CONSOLE_EMULATOR 0x10000000
#define OS_CONSOLE_DEVELOPMENT 0x10000000
#define OS_CONSOLE_DEVKIT 0x10000000
#define OS_CONSOLE_TDEVKIT 0x20000000
#define OS_CONSOLE_DEVKIT 0x10000000
#define OS_CONSOLE_TDEVKIT 0x20000000
#define OS_CONSOLE_DEV_MASK 0x10000000
#define OS_CONSOLE_DEV_MASK 0x10000000
u32 OSGetConsoleType();
#define OS_CONSOLE_IS_DEV() ((OSGetConsoleType() & OS_CONSOLE_DEV_MASK) != 0)
+21 -4
View File
@@ -2,14 +2,31 @@
#define OS_ALLOC_H
#ifdef __cplusplus
extern "C"
{
extern "C" {
#endif
void *OSInitAlloc(void *, void *, int);
typedef int OSHeapHandle;
extern volatile OSHeapHandle __OSCurrHeap;
void* OSAllocFromHeap(int heap, unsigned long size);
void* OSAllocFixed(void* rstart, void* rend);
void OSFreeToHeap(int heap, void* ptr);
int OSSetCurrentHeap(int heap);
void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps);
int OSCreateHeap(void* start, void* end);
void OSDestroyHeap(int heap);
void OSAddToHeap(int heap, void* start, void* end);
long OSCheckHeap(int heap);
unsigned long OSReferentSize(void* ptr);
void OSDumpHeap(int heap);
void OSVisitAllocated(void (*visitor)(void*, unsigned long));
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))
#ifdef __cplusplus
}
#endif
#endif
#endif
+124
View File
@@ -0,0 +1,124 @@
#ifndef _DOLPHIN_OS_OSFASTCAST_H
#define _DOLPHIN_OS_OSFASTCAST_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif // ifdef __cplusplus
/////// FAST CAST DEFINES ////////
// GQR formats.
#define OS_GQR_U8 (0x0004) // GQR 1
#define OS_GQR_U16 (0x0005) // GQR 2
#define OS_GQR_S8 (0x0006) // GQR 3
#define OS_GQR_S16 (0x0007) // GQR 4
// GQRs for fast casting.
#define OS_FASTCAST_U8 (2)
#define OS_FASTCAST_U16 (3)
#define OS_FASTCAST_S8 (4)
#define OS_FASTCAST_S16 (5)
//////////////////////////////////
/////// FAST CAST INLINES ////////
// Initialise fast casting.
static inline void OSInitFastCast() {
#ifdef __MWERKS__ // clang-format off
asm {
li r3, OS_GQR_U8
oris r3, r3, OS_GQR_U8
mtspr 0x392, r3
li r3, OS_GQR_U16
oris r3, r3, OS_GQR_U16
mtspr 0x393, r3
li r3, OS_GQR_S8
oris r3, r3, OS_GQR_S8
mtspr 0x394, r3
li r3, OS_GQR_S16
oris r3, r3, OS_GQR_S16
mtspr 0x395, r3
}
#endif // clang-format on
}
// Float to int.
static inline s16 __OSf32tos16(register f32 inF) {
register s16 out;
u32 tmp;
register u32* tmpPtr = &tmp;
#ifdef __MWERKS__ // clang-format off
asm {
psq_st inF, 0(tmpPtr), 0x1, OS_FASTCAST_S16
lha out, 0(tmpPtr)
}
#endif // clang-format on
return out;
}
static inline void OSf32tos16(f32* f, s16* out) {
*out = __OSf32tos16(*f);
}
static inline u8 __OSf32tou8(register f32 inF) {
register u8 out;
u32 tmp;
register u32* tmpPtr = &tmp;
#ifdef __MWERKS__ // clang-format off
asm {
psq_st inF, 0(tmpPtr), 0x1, OS_FASTCAST_U8
lbz out, 0(tmpPtr)
}
#endif // clang-format on
return out;
}
static inline void OSf32tou8(f32* f, u8* out) {
*out = __OSf32tou8(*f);
}
static inline s8 __OSf32tos8(register f32 inF) {
register s8 out;
u32 tmp;
register u32* tmpPtr = &tmp;
#ifdef __MWERKS__ // clang-format off
asm {
psq_st inF, 0(tmpPtr), 0x1, OS_FASTCAST_S8
lbz out, 0(tmpPtr)
extsb out, out
}
#endif // clang-format on
return out;
}
static inline void OSf32tos8(f32* f, s8* out) {
*out = __OSf32tos8(*f);
}
static inline float __OSs16tof32(register s16* s) {
register float f;
#ifdef __MWERKS__ // clang-format off
asm {
psq_l f, 0(s), 1, 5
}
#endif // clang-format on
return f;
}
static inline void OSs16tof32(register s16* s, volatile register f32* f) {
*f = __OSs16tof32(s);
}
//////////////////////////////////
#ifdef __cplusplus
};
#endif // ifdef __cplusplus
#endif
+41 -35
View File
@@ -5,68 +5,74 @@
#include "m_play_h.h"
#ifdef __cplusplus
extern "C"{
extern "C" {
#endif
#define EVW_COLOR_BUF_MAX 50
enum {
EVW_ANIME_TYPE_SCROLL1,
EVW_ANIME_TYPE_SCROLL2,
EVW_ANIME_TYPE_COLREG_MANUAL,
EVW_ANIME_TYPE_COLREG_LINEAR,
EVW_ANIME_TYPE_COLREG_NONLINEAR,
EVW_ANIME_TYPE_TEXANIME,
EVW_ANIME_TYPE_SCROLL1,
EVW_ANIME_TYPE_SCROLL2,
EVW_ANIME_TYPE_COLREG_MANUAL,
EVW_ANIME_TYPE_COLREG_LINEAR,
EVW_ANIME_TYPE_COLREG_NONLINEAR,
EVW_ANIME_TYPE_TEXANIME,
EVW_ANIME_TYPE_NUM
EVW_ANIME_TYPE_NUM
};
/* sizeof(EVW_ANIME_COL_PRIM) == 0x5 */
typedef struct evw_anime_col_prim_s {
u8 r;
u8 g;
u8 b;
u8 a;
u8 l;
/* 0x00 */ u8 r;
/* 0x01 */ u8 g;
/* 0x02 */ u8 b;
/* 0x03 */ u8 a;
/* 0x04 */ u8 l;
} EVW_ANIME_COL_PRIM;
/* sizeof(EVW_ANIME_COL_ENV) == 0x4 */
typedef struct evw_anime_col_env_s {
u8 r;
u8 g;
u8 b;
u8 a;
/* 0x00 */ u8 r;
/* 0x01 */ u8 g;
/* 0x02 */ u8 b;
/* 0x03 */ u8 a;
} EVW_ANIME_COL_ENV;
/* sizeof(EVW_ANIME_COLREG) == 0x10 */
typedef struct evw_anime_col_reg_s {
u16 frame_count; /* total frames in the animation */
u16 key_count; /* number of animation keyframes */
/* 0x00 */ u16 frame_count; /* total frames in the animation */
/* 0x02 */ u16 key_count; /* number of animation keyframes */
EVW_ANIME_COL_PRIM* prim_colors; /* list of primitive colors per-keyframe */
EVW_ANIME_COL_ENV* env_colors; /* list of environment colors per-keyframe */
/* 0x04 */ EVW_ANIME_COL_PRIM* prim_colors; /* list of primitive colors per-keyframe */
/* 0x08 */ EVW_ANIME_COL_ENV* env_colors; /* list of environment colors per-keyframe */
u16* keyframes; /* list of keyframe frame indices */
/* 0x0C */ u16* keyframes; /* list of keyframe frame indices */
} EVW_ANIME_COLREG;
/* sizeof(EVW_ANIME_SCROLL) == 0x4 */
typedef struct evw_anime_scroll_s {
s8 x; /* x (s) texture position */
s8 y; /* y (t) texture position */
u8 width; /* texture width */
u8 height; /* texture height */
/* 0x00 */ s8 x; /* x (s) texture position */
/* 0x01 */ s8 y; /* y (t) texture position */
/* 0x02 */ u8 width; /* texture width */
/* 0x03 */ u8 height; /* texture height */
} EVW_ANIME_SCROLL;
/* sizeof(EVW_ANIME_TEXANIME) == 0x10 */
typedef struct evw_anime_texanime_s {
u16 frame_count; /* total frames in the animation */
u16 key_count; /* number of animation keyframes */
/* 0x00 */ u16 frame_count; /* total frames in the animation */
/* 0x02 */ u16 key_count; /* number of animation keyframes */
void** texture_tbl; /* list of each texture */
u8* animation_pattern; /* list of which texture to use per keyframe (runs at 30 FPS) */
/* 0x04 */ void** texture_tbl; /* list of each texture */
/* 0x08 */ u8* animation_pattern; /* list of which texture to use per keyframe (runs at 30 FPS) */
u16* keyframes; /* list of keyframe frame indices */
/* 0x0C */ u16* keyframes; /* list of keyframe frame indices */
} EVW_ANIME_TEXANIME;
/* sizeof(EVW_ANIME_DATA) == 0x8 */
typedef struct evw_anime_s {
s8 segment; /* Negative segments signal the end of the animation data array */
s16 type;
void* data_p;
/* 0x00 */ s8 segment; /* Negative segments signal the end of the animation data array */
/* 0x02 */ s16 type;
/* 0x04 */ void* data_p;
} EVW_ANIME_DATA;
extern void Evw_Anime_Set(GAME_PLAY* play, EVW_ANIME_DATA* evw_anime_data);
@@ -75,4 +81,4 @@ extern void Evw_Anime_Set(GAME_PLAY* play, EVW_ANIME_DATA* evw_anime_data);
}
#endif
#endif
#endif
+36
View File
@@ -0,0 +1,36 @@
#ifndef AICTRL_H
#define AICTRL_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
extern u32 UNIVERSAL_DACCOUNTER;
extern u32 JAC_VFRAME_COUNTER;
typedef enum _MixMode {
MixMode_Mono,
MixMode_MonoWide,
MixMode_Extra,
MixMode_Interleave,
MixMode_Num
} MixMode;
typedef s16* (*MixCallback)(s32);
extern void Jac_HeapSetup(void* pHeap, s32 size);
extern void* OSAlloc2(u32 size);
extern void Jac_Init(void);
extern MixCallback Jac_GetMixcallback(u8* mixmode);
extern void Jac_RegisterMixcallback(MixCallback mixcallback, u8 mixmode);
extern void Jac_VframeWork(void);
extern void Jac_UpdateDAC(void);
#ifdef __cplusplus
}
#endif
#endif
+9
View File
@@ -0,0 +1,9 @@
#ifndef ASTEST_H
#define ASTEST_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
extern void CopyStc(commonch* dstStc, commonch* srcStc);
#endif
+221
View File
@@ -0,0 +1,221 @@
#ifndef AUDIOCOMMON_H
#define AUDIOCOMMON_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
#define S16_MIN (-0x8000)
#define S16_MAX (0x7FFF)
#define AUDIO_ARAM_SIZE 0x400000 /* 4MB */
#define AUDIO_ARAM_HEAP_SIZE 0xC000
#define AUDIO_GROUP_MAX 5
#define AUDIO_SUBTRACK_NUM 16
#define AUDIO_NOTE_MAX 128
#define AUDIO_TATUMS_PER_BEAT 48
#define AUDIO_GROUP_ALL_SUBTRACKS (0xFFFF)
#define AUDIO_MUTE_FLAG_STOP_SAMPLES (1 << 3)
#define AUDIO_MUTE_FLAG_STOP_SUBTRACK (1 << 4)
#define AUDIO_MUTE_FLAG_SOFTEN (1 << 5)
#define AUDIO_MUTE_FLAG_STOP_NOTE (1 << 6)
#define AUDIO_MUTE_FLAG_STOP_SCRIPT (1 << 7)
#define NA_MAKE_COMMAND(a0, a1, a2, a3) \
(u32)((((a0) & 0xFF) << 24) | (((a1) & 0xFF) << 16) | (((a2) & 0xFF) << 8) | (((a3) & 0xFF) << 0))
typedef enum DSPBUF_EVENTS {
DSPBUF_EVENT_INIT = 0,
DSPBUF_EVENT_FRAME_END = 1,
DSPBUF_EVENT_MIX = 2,
} DSPBUF_EVENTS;
typedef enum SampleMedium {
/* 0 */ MEDIUM_RAM,
/* 1 */ MEDIUM_UNK,
/* 2 */ MEDIUM_CART,
/* 3 */ MEDIUM_DISK_DRIVE,
/* 5 */ MEDIUM_RAM_UNLOADED = 5
} SampleMedium;
typedef enum AudioCacheType {
/* 0 */ CACHE_TEMPORARY,
/* 1 */ CACHE_PERSISTENT,
/* 2 */ CACHE_EITHER,
/* 3 */ CACHE_PERMANENT
} AudioCacheType;
typedef enum AudioCacheLoadType {
/* 0 */ CACHE_LOAD_PERMANENT,
/* 1 */ CACHE_LOAD_PERSISTENT,
/* 2 */ CACHE_LOAD_TEMPORARY,
/* 3 */ CACHE_LOAD_EITHER,
/* 4 */ CACHE_LOAD_EITHER_NOSYNC
} AudioCacheLoadType;
typedef enum AudioLoadStatus {
/* 0 */ LOAD_STATUS_NOT_LOADED,
/* 1 */ LOAD_STATUS_IN_PROGRESS,
/* 2 */ LOAD_STATUS_COMPLETE,
/* 3 */ LOAD_STATUS_DISCARDABLE,
/* 4 */ LOAD_STATUS_MAYBE_DISCARDABLE,
/* 5 */ LOAD_STATUS_PERMANENT
} AudioLoadStatus;
typedef enum AdsrStatus {
/* 0 */ ADSR_STATUS_DISABLED,
/* 1 */ ADSR_STATUS_INITIAL,
/* 2 */ ADSR_STATUS_START_LOOP,
/* 3 */ ADSR_STATUS_LOOP,
/* 4 */ ADSR_STATUS_FADE,
/* 5 */ ADSR_STATUS_HANG,
/* 6 */ ADSR_STATUS_DECAY,
/* 7 */ ADSR_STATUS_RELEASE,
/* 8 */ ADSR_STATUS_SUSTAIN
} AdsrStatus;
typedef enum PortamentoMode {
/* 0 */ PORTAMENTO_MODE_OFF,
/* 1 */ PORTAMENTO_MODE_1,
/* 2 */ PORTAMENTO_MODE_2,
/* 3 */ PORTAMENTO_MODE_3,
/* 4 */ PORTAMENTO_MODE_4,
/* 5 */ PORTAMENTO_MODE_5,
/* 6 */ PORTAMENTO_MODE_6,
/* 7 */ PORTAMENTO_MODE_7,
/* 8 */ PORTAMENTO_MODE_8, // might be PORTAMENTO_MODE_NUM
} PortamentoMode;
typedef enum SampleBankTableType {
/* 0 */ SEQUENCE_TABLE,
/* 1 */ BANK_TABLE,
/* 2 */ WAVE_TABLE
} SampleBankTableType;
#define VOICE_TYPE_PERCUSSION 0
#define VOICE_TYPE_SOUND_EFF 1
#define VOICE_TYPE_INSTRUMENT_START 2
#define AUDIO_SWEEP_IS_SPECIAL(s) ((s).mode & 0x80)
#define AUDIO_SWEEP_MODE(s) ((s).mode & ~0x80)
#define AUDIO_NOTE_RELEASE (1 << 0)
#define AUDIO_NOTE_SAMPLE_NOTES (1 << 1)
#define AUDIOCMD_ALL_GROUPS 0xFF
#define AUDIOCMD_ALL_SUBTRACKS 0xFF
typedef enum GroupState {
/* 0 */ GROUP_STATE_0,
/* 1 */ GROUP_STATE_FADE_IN,
/* 2 */ GROUP_STATE_FADE_OUT
} GroupState;
/* Most of these are from the MM decomp */
typedef enum AudioCmd {
/* 0x00 */ AUDIOCMD_NOOP,
// SubTrack Commands
/* 0x01 */ AUDIOCMD_OP_SUB_SET_VOL_SCALE,
/* 0x02 */ AUDIOCMD_OP_SUB_SET_VOL,
/* 0x03 */ AUDIOCMD_OP_SUB_SET_PAN,
/* 0x04 */ AUDIOCMD_OP_SUB_SET_FREQ_SCALE,
/* 0x05 */ AUDIOCMD_OP_SUB_SET_REVERB_VOLUME,
/* 0x06 */ AUDIOCMD_OP_SUB_SET_PORT,
/* 0x07 */ AUDIOCMD_OP_SUB_SET_PAN_WEIGHT,
/* 0x08 */ AUDIOCMD_OP_SUB_SET_MUTE,
/* 0x09 */ AUDIOCMD_OP_SUB_SET_MUTE_FLAGS,
/* 0x0A */ AUDIOCMD_OP_SUB_SET_VIBRATO_DEPTH,
/* 0x0B */ AUDIOCMD_OP_SUB_SET_VIBRATO_RATE,
/* 0x0C */ AUDIOCMD_OP_SUB_SET_COMB_FILTER_SIZE,
/* 0x0D */ AUDIOCMD_OP_SUB_SET_COMB_FILTER_GAIN,
/* 0x0E */ AUDIOCMD_OP_SUB_SET_STEREO,
/* 0x0F */ AUDIOCMD_OP_SUB_SET_SET_START_POS,
/* 0x10 */ AUDIOCMD_OP_SUB_SET_SFX_STATE,
/* 0x11 */ AUDIOCMD_OP_SUB_SET_REVERB_INDEX,
/* 0x12 */ AUDIOCMD_OP_SUB_SET_SURROUND_EFFECT_INDEX,
/* 0x13 */ AUDIOCMD_OP_SUB_SET_FILTER,
/* 0x14 */ AUDIOCMD_OP_SUB_SET_GAIN,
/* 0x15 */ AUDIOCMD_OP_SUB_SET_TRANSPOSITION,
// Group Commands
/* 0x41 */ AUDIOCMD_OP_GRP_FADE_VOLUME_SCALE = 0x41,
/* 0x46 */ AUDIOCMD_OP_GRP_SET_PORT = 0x46,
/* 0x47 */ AUDIOCMD_OP_GRP_SET_TEMPO,
/* 0x48 */ AUDIOCMD_OP_GRP_SET_TRANSPOSITION,
/* 0x49 */ AUDIOCMD_OP_GRP_CHANGE_TEMPO,
/* 0x4A */ AUDIOCMD_OP_GRP_FADE_TO_SET_VOLUME,
/* 0x4B */ AUDIOCMD_OP_GRP_FADE_TO_SCALED_VOLUME,
/* 0x4C */ AUDIOCMD_OP_GRP_RESET_VOLUME,
/* 0x4D */ AUDIOCMD_OP_GRP_SET_BEND,
/* 0x4E */ AUDIOCMD_OP_GRP_CHANGE_TEMPO_TICKS,
// System Commands
/* 0x81 */ AUDIOCMD_PRELOAD_SEQ = 0x81,
/* 0x82 */ AUDIOCMD_START_SEQ,
/* 0x83 */ AUDIOCMD_STOP_SEQ,
/* 0x85 */ AUDIOCMD_START_SEQ_SKIP = 0x85,
/* 0x90 */ AUDIOCMD_SET_GROUP_MASK = 0x90,
/* 0xE0 */ AUDIOCMD_SET_PERC_BANK = 0xE0,
/* 0xE1 */ AUDIOCMD_SET_EFFECT_BANK,
/* 0xE2 */ AUDIOCMD_SET_VOICE_BANK,
/* 0xE3 */ AUDIOCMD_CLEAR_STAY_CACHE,
/* 0xE4 */ AUDIOCMD_SET_CALLBACK,
/* 0xE5 */ AUDIOCMD_SET_EXTERNAL_POINTER,
/* 0xE6 */ AUDIOCMD_SET_DELAY_LINE_PARAM,
/* 0xF0 */ AUDIOCMD_SET_SOUND_MODE = 0xF0,
/* 0xF1 */ AUDIOCMD_MUTE,
/* 0xF2 */ AUDIOCMD_UNMUTE,
/* 0xF3 */ AUDIOCMD_LOAD_VOICE_INSTRUMENT,
/* 0xF4 */ AUDIOCMD_PRELOADWAVE_BG,
/* 0xF5 */ AUDIOCMD_PRELOADBANK_BG,
/* 0xF6 */ AUDIOCMD_FLUSH_BANKS,
/* 0xF8 */ AUDIOCMD_SYS_STOP_PROCESSING = 0xF8,
/* 0xF9 */ AUDIOCMD_RESET_AUDIO_HEAP,
/* 0xFA */ AUDIOCMD_MAIN_GROUP_SUBPORT_CMD,
/* 0xFB */ AUDIOCMD_SET_VFRAME_CALLBACK,
/* 0xFC */ AUDIOCMD_PRELOADSEQ_BG,
/* 0xFD */ AUDIOCMD_MAIN_GROUP_SET_FREQ_SCALE,
/* 0xFE */ AUDIOCMD_FORCE_STOP_ALL_GROUPS,
/* 0xFF */ AUDIOCMD_MAIN_GROUP_SET_VOL_SCALE
} AudioCmd;
typedef enum SeqCmd {
SEQCMD_BRANCH_REL_NOT_EQ_ZERO = 0xF2,
SEQCMD_BRANCH_REL_EQ_ZERO = 0xF3,
SEQCMD_BRANCH_REL = 0xF4,
SEQCMD_BRANCH_ABS_GREQ_ZERO = 0xF5,
SEQCMD_BREAK = 0xF6,
SEQCMD_LOOP_END = 0xF7,
SEQCMD_LOOP = 0xF8,
SEQCMD_BRANCH_ABS_NOT_EQ_ZERO = 0xF9,
SEQCMD_BRANCH_ABS_EQ_ZERO = 0xFA,
SEQCMD_BRANCH_ABS = 0xFB,
SEQCMD_CALL = 0xFC,
SEQCMD_DELAY_N_FRAMES = 0xFD,
SEQCMD_DELAY_1_FRAME = 0xFE,
SEQCMD_STOP_SCRIPT = 0xFF,
} SeqCmd;
typedef enum AUDIO_CALLBACKS {
/* 0x00 */ AUDIO_CALLBACK_SEQ_0,
/* 0x01 */ AUDIO_CALLBACK_SEQ_1,
/* 0x02 */ AUDIO_CALLBACK_SEQ_2,
/* 0x03 */ AUDIO_CALLBACK_SEQ_3,
/* 0xFE */ AUDIO_CALLBACK_DACOUT = 0xFE,
/* 0xFF */ AUDIO_CALLBACK_SOUND
} AUDIO_CALLBACKS;
#ifdef __cplusplus
}
#endif
#endif
+17
View File
@@ -0,0 +1,17 @@
#ifndef AUDIOCONST_H
#define AUDIOCONST_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
typedef struct ALGlobalsConst_ {
s8 maxChan;
s16 timeBase;
s32 acmdBufSize;
s32 fixSize;
s32 ememSize;
} ALGlobalsConst;
extern ALGlobalsConst AGC;
#endif
+13
View File
@@ -0,0 +1,13 @@
#ifndef AUDIOHEADERS_H
#define AUDIOHEADERS_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
extern ArcHeader AudioseqHeaderStart;
extern ArcHeader AudiobankHeaderStart;
extern ArcHeader AudiowaveHeaderStart;
extern ArcHeader AudiodataHeaderStart;
extern u16 AudiomapHeaderStart[];
#endif
+9
View File
@@ -0,0 +1,9 @@
#ifndef AUDIOMACRO_H
#define AUDIOMACRO_H
#include "types.h"
#include "jaudio_NES/sub_sys.h"
#define AUDIOCMD_RESET_AUDIO_HEAP_CMD(spec_id) Nap_SetS32(NA_MAKE_COMMAND(AUDIOCMD_RESET_AUDIO_HEAP, 0, 0, 0), spec_id)
#endif
+938
View File
@@ -0,0 +1,938 @@
#ifndef AUDIOSTRUCT_H
#define AUDIOSTRUCT_H
#include "types.h"
#include "jaudio_NES/audiocommon.h"
#include "PR/abi.h"
#include "libultra/libultra.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct chnode_ chnode;
typedef struct link_ link;
/* sizeof(struct link_) == 0x10 */
struct link_ {
/* 0x00 */ link* next;
/* 0x04 */ link* prev;
union {
/* 0x08 */ s32 numAfter; /* when link is head */
/* 0x08 */ void* pData; /* when link is node */
};
/* 0x0C */ chnode* pNode;
};
/* sizeof(struct chnode_) == 0x40 */
struct chnode_ {
/* 0x00 */ link freeList;
/* 0x10 */ link releaseList;
/* 0x20 */ link relwaitList;
/* 0x30 */ link useList;
};
/* forward declared */
typedef struct note_ note;
typedef struct channel_ channel;
typedef struct group_ group;
/* sizeof(struct AudioPort_) == 0x8 */
typedef struct AudioPort_ {
union {
struct {
/* 0x00 */ u8 opcode;
/* 0x01 */ u8 arg0;
/* 0x02 */ u8 arg1;
/* 0x03 */ u8 arg2;
} command;
/* 0x00 */ u32 raw_cmd;
};
union audioparam_ {
/* 0x04 */ s8 asS8;
/* 0x04 */ u8 asU8;
/* 0x04 */ s16 asS16;
/* 0x04 */ u16 asU16;
/* 0x04 */ u32 asU32;
/* 0x04 */ s32 asS32;
/* 0x04 */ f32 asF32;
/* 0x04 */ void* asVoidPtr;
} param;
} AudioPort;
/* sizeof(ALHeap) == 0x14 */
typedef struct ALHeap {
/* 0x00 */ u8* base;
/* 0x04 */ u8* current;
/* 0x08 */ int length;
/* 0x0C */ u32 count;
/* 0x10 */ u8* last;
} ALHeap;
/* sizeof(ArcEntry) == 0x10 */
typedef struct ArcEntry_ {
/* 0x00 */ u32 addr;
/* 0x04 */ size_t size;
/* 0x08 */ s8 medium;
/* 0x09 */ s8 cacheType;
/* 0x0A */ s16 param0;
/* 0x0C */ s16 param1;
/* 0x0E */ s16 param2;
} ArcEntry;
/* sizeof(ArcHeader) == [0x10, 0x10+entries*0x10] */
typedef struct ArcHeader_ {
/* 0x00 */ s16 numEntries;
/* 0x02 */ s16 _02;
/* 0x04 */ u8* pData;
/* 0x08 */ u8 copy;
/* 0x09 */ u8 pad[7];
/* 0x10 */ ArcEntry entries[]; /* variable size */
} ArcHeader;
/* sizeof(adpcmloop) == 0x10|0x30*/
typedef struct adpcmloop_ {
/* 0x00 */ u32 loop_start;
/* 0x04 */ u32 loop_end;
/* 0x08 */ u32 count;
/* 0x0C */ u32 sample_end;
/* 0x10 */ s16 predictor_state[16]; /* exists count > 0*/
} adpcmloop;
/* sizeof(adpcmbook) == [0x8, 0x8+n]*/
typedef struct adpcmbook_ {
/* 0x00 */ s32 order;
/* 0x04 */ s32 n_predictors;
/* 0x08 */ s16 codebook[0]; /* variable length */
} adpcmbook;
typedef struct smzwavetable_ {
/* 0x00 */ u32 bit31 : 1;
/* 0x00 */ u32 codec : 3;
/* 0x00 */ u32 medium : 2;
/* 0x00 */ u32 bit26 : 1;
/* 0x00 */ u32 is_relocated : 1;
/* 0x00 */ u32 size : 24;
/* 0x04 */ u8* sample;
/* 0x08 */ adpcmloop* loop;
/* 0x0C */ adpcmbook* book;
} smzwavetable;
/* sizeof(wtstr) == 0x08 */
typedef struct wtstr_ {
/* 0x00 */ smzwavetable* wavetable;
/* 0x04 */ f32 tuning;
} wtstr;
/* sizeof(phase) == 0x01 */
typedef struct phase_ {
union {
struct {
/* 0x00 */ u8 _unused : 2;
/* 0x00 */ u8 type : 2;
/* 0x00 */ u8 strong_right : 1;
/* 0x00 */ u8 strong_left : 1;
/* 0x00 */ u8 strong_reverb_right : 1;
/* 0x00 */ u8 strong_reverb_left : 1;
};
/* 0x00 */ u8 asU8;
};
} phase;
/* sizeof(sweep) == 0x0C */
typedef struct sweep_ {
/* 0x00 */ u8 mode;
/* 0x02 */ u16 current;
/* 0x04 */ u16 speed;
/* 0x08 */ f32 extent;
} sweep;
/* sizeof(vibparam) == 0x0E */
typedef struct vibparam_ {
/* 0x00 */ u16 rate_start;
/* 0x02 */ u16 depth_start;
/* 0x04 */ u16 rate_target;
/* 0x06 */ u16 depth_target;
/* 0x08 */ u16 rate_change_delay;
/* 0x0A */ u16 depth_change_delay;
/* 0x0C */ u16 delay;
} vibparam;
/* sizeof(tmtable) == 0x1C */
typedef struct tmtable_ {
/* 0x00 */ vibparam* vibrato_params;
/* 0x04 */ u32 time;
/* 0x08 */ s16* curve;
/* 0x0C */ f32 depth;
/* 0x10 */ f32 rate;
/* 0x14 */ u8 active;
/* 0x16 */ u16 rate_change_timer;
/* 0x18 */ u16 depth_change_timer;
/* 0x1A */ u16 delay;
} tmtable;
/* sizeof(envdat) == 0x04 */
typedef struct envdat_ {
/* 0x00 */ s16 delay;
/* 0x02 */ s16 value;
} envdat;
/* sizeof(envp) == 0x20 */
typedef struct envp_ {
/* 0x00 */ u8 unused : 1;
/* 0x00 */ u8 hang : 1;
/* 0x00 */ u8 decay : 1;
/* 0x00 */ u8 release : 1;
/* 0x00 */ u8 status : 4;
/* 0x01 */ u8 envelope_idx;
/* 0x02 */ s16 delay;
/* 0x04 */ f32 sustain;
/* 0x08 */ f32 velocity;
/* 0x0C */ f32 fadeout_velocity;
/* 0x10 */ f32 current;
/* 0x14 */ f32 target;
/* 0x18 */ f32 _18;
/* 0x1C */ envdat* pEnvData;
} envp;
/* sizeof(env) == 0x08 */
typedef struct env_ {
/* 0x00 */ u8 decay_idx;
/* 0x01 */ u8 sustain;
/* 0x04 */ envdat* envelope;
} env;
/* sizeof(commonch) == 0x20 */
typedef struct commonch_ {
/* 0x00 */ vu8 enabled : 1;
/* 0x00 */ u8 needs_init : 1;
/* 0x00 */ u8 finished : 1;
/* 0x00 */ u8 unused : 1;
/* 0x00 */ u8 strong_right : 1;
/* 0x00 */ u8 strong_left : 1;
/* 0x00 */ u8 strong_reverb_right : 1;
/* 0x00 */ u8 storng_reverb_left : 1;
/* 0x01 */ u8 reverb_idx : 3;
/* 0x01 */ u8 book_ofs : 2;
/* 0x01 */ u8 is_synth_wave : 1;
/* 0x01 */ u8 has_two_parts : 1;
/* 0x01 */ u8 use_haas_effect : 1;
/* 0x02 */ u8 gain;
/* 0x03 */ u8 haas_effect_left_delay_size;
/* 0x04 */ u8 haas_effect_right_delay_size;
/* 0x05 */ u8 target_reverb_volume;
/* 0x06 */ u8 harmonic_idx_cur_and_prev;
/* 0x07 */ u8 comb_filter_size;
/* 0x08 */ u16 target_volume_left;
/* 0x0A */ u16 target_volume_right;
/* 0x0C */ u16 frequency_fixed_point;
/* 0x0E */ u16 comb_filter_gain;
union {
/* 0x10 */ wtstr* tuned_sample;
/* 0x10 */ s16* wave_sample_addr; // for synth waves
};
/* 0x14 */ s16* filter;
/* 0x18 */ u8 _18;
/* 0x19 */ u8 surround_effect_idx;
/* 0x1A */ u8 _1A;
/* 0x1B */ u8 _1B[4];
} commonch;
/* TODO: see if this has a name anywhere */
/* sizeof(synthparams) == 0x2E0 */
typedef struct synthparams_ {
/* 0x000 */ s16 adpcm_state[16];
/* 0x020 */ s16 final_resample_state[16];
/* 0x040 */ s16 filter_state[32];
/* 0x080 */ s16 unused_state[16];
/* 0x0A0 */ s16 haas_effect_delay_state[32];
/* 0x0E0 */ s16 comb_filter_state[128];
/* 0x1E0 */ s16 surround_effect_state[128];
} synthparams;
/* sizeof(driverch) == 0x20 */
typedef struct driverch_ {
/* 0x00 */ u8 at_loop_point : 1;
/* 0x00 */ u8 stop_loop : 1;
/* 0x01 */ u8 sample_dma_idx;
/* 0x02 */ u8 prev_haas_effect_left_delay_size;
/* 0x03 */ u8 prev_haas_effect_right_delay_size;
/* 0x04 */ u8 cur_reverb_vol;
/* 0x05 */ u8 num_parts;
/* 0x06 */ u8 comb_filter_needs_init;
/* 0x07 */ u8 vel_conv_table_idx;
/* 0x08 */ u16 sample_pos_fractional_part;
/* 0x0A */ u16 sound_effect_gain;
/* 0x0C */ s32 sample_pos_integer_part;
/* 0x10 */ synthparams* synth_params;
/* 0x14 */ s16 current_volume_left;
/* 0x16 */ s16 current_volume_right;
/* 0x18 */ u8 _18[8]; // unused?
} driverch;
/* TODO: madeup name, see if there's an exposde one */
/* sizeof(playbackparams) == 0x18 */
typedef struct playbackparams_ {
/* 0x00 */ u8 target_reverb_volume;
/* 0x01 */ u8 gain;
/* 0x02 */ u8 pan;
/* 0x03 */ u8 surround_effect_idx;
/* 0x04 */ phase stereo_phase;
/* 0x05 */ u8 comb_filter_size;
/* 0x06 */ u16 comb_filter_gain;
/* 0x08 */ f32 frequency_scale;
/* 0x0C */ f32 velocity;
/* 0x10 */ s16* filter;
/* 0x14 */ s16* filter_buf;
} playbackparams;
/* TODO: madeup name, see if there's an exposed one */
/* sizeof(playbackch) == 0xA0 */
typedef struct playbackch_ {
/* 0x00 */ u8 priority;
/* 0x01 */ u8 wave_id;
/* 0x02 */ u8 harmonic_index;
/* 0x03 */ u8 bank_id;
/* 0x04 */ u8 status;
/* 0x05 */ u8 stereo_headset_effects;
/* 0x06 */ s16 adsr_volume_scale_unused;
/* 0x08 */ f32 portamento_frequency_scale;
/* 0x0C */ f32 vibrato_frequency_scale;
/* 0x10 */ note* previous_parent_note;
/* 0x14 */ note* current_parent_note;
/* 0x18 */ note* wanted_parent_note;
/* 0x1C */ playbackparams params;
/* 0x34 */ envp adsr_envp;
/* 0x54 */ sweep portamento_sweep;
/* 0x60 */ tmtable vibrato_tmtable;
/* 0x7C */ s32 _7C;
/* 0x80 */ u8 _80;
/* 0x84 */ u32 start_sample_pos;
/* 0x88 */ u8 _88[0x18];
} playbackch;
/* sizeof(channel) == 0x100 */
struct channel_ {
/* 0x00 */ link link;
/* 0x10 */ driverch driver_ch;
/* 0x30 */ playbackch playback_ch;
/* 0xD0 */ commonch common_ch;
/* 0xF0 */ u8 _F0[0x10];
};
/* sizeof(drvparam) == 0x1C */
typedef struct drvparam_ {
/* 0x00 */ u8 _00;
/* 0x01 */ u8 _01;
/* 0x02 */ u8 _02;
/* 0x03 */ u8 _03;
/* 0x04 */ phase phase;
/* 0x08 */ f32 pitch;
/* 0x0C */ f32 volume;
/* 0x10 */ int _10;
/* 0x14 */ int _14;
/* 0x18 */ u8 _18;
/* 0x19 */ u8 _19;
/* 0x1A */ u16 _1A;
} drvparam;
/* sizeof(voicetable) == 0x20 */
typedef struct voicetable_ {
/* 0x00 */ u8 is_relocated;
/* 0x01 */ u8 normal_range_low;
/* 0x02 */ u8 normal_range_high;
/* 0x03 */ u8 adsr_decay_idx;
/* 0x04 */ envdat* envelope;
/* 0x08 */ wtstr low_pitch_tuned_sample;
/* 0x10 */ wtstr normal_pitch_tuned_sample;
/* 0x18 */ wtstr high_pitch_tuned_sample;
} voicetable;
/* sizeof(percvoicetable) == 0x10 */
typedef struct percvoicetable_ {
/* 0x00 */ u8 adsr_decay_idx;
/* 0x01 */ u8 pan;
/* 0x02 */ u8 is_relocated;
/* 0x04 */ wtstr tuned_sample;
/* 0x0C */ envdat* envelope;
} percvoicetable;
/* sizeof(veffvoicetable) == 0x08 */
typedef struct veffvoicetable_ {
/* 0x00 */ wtstr tuned_sample;
} veffvoicetable;
/* sizeof(voiceinfo) == 0x14 */
typedef struct voiceinfo_ {
/* 0x00 */ u8 num_instruments;
/* 0x01 */ u8 num_drums;
/* 0x02 */ u8 wave_bank_id0;
/* 0x03 */ u8 wave_bank_id1;
/* 0x04 */ u16 num_sfx;
/* 0x08 */ voicetable** instruments;
/* 0x0C */ percvoicetable** percussion;
/* 0x10 */ veffvoicetable* effects;
} voiceinfo;
/* sizeof(delayparam) == 0x1C */
typedef struct delayparam_ {
/* 0x00 */ s16 n_samples_after_downsampling;
/* 0x02 */ s16 n_samples;
/* 0x04 */ s16* to_down_sample_left;
/* 0x08 */ s16* to_down_sample_right;
/* 0x0C */ s32 start_pos;
/* 0x10 */ s16 size;
/* 0x12 */ s16 wrapped_size;
/* 0x14 */ u16 load_resample_pitch;
/* 0x16 */ u16 save_resample_pitch;
/* 0x18 */ u16 save_resample_num_samples;
} delayparam;
/* sizeof(delay) == 0x2D0 */
typedef struct delay_ {
/* 0x000 */ u8 resample_flags;
/* 0x001 */ u8 use_reverb;
/* 0x002 */ u8 frames_to_ignore;
/* 0x003 */ u8 cur_frame;
/* 0x004 */ u8 downsample_rate;
/* 0x005 */ s8 mix_reverb_idx;
/* 0x006 */ u16 delay_num_samples;
/* 0x008 */ s16 mix_reverb_strength;
/* 0x00A */ s16 volume;
/* 0x00C */ u16 decay_ratio;
/* 0x00E */ u16 downsample_pitch;
/* 0x010 */ s16 leak_rtl;
/* 0x012 */ s16 leak_ltl;
/* 0x014 */ u16 sub_delay;
/* 0x016 */ s16 sub_volume;
/* 0x018 */ u8 resample_effect_on;
/* 0x019 */ s8 resample_effect_extra_samples;
/* 0x01A */ u16 resample_effect_load_unk;
/* 0x01C */ u16 resample_effect_save_unk;
/* 0x01E */ u8 delay_num_samples_after_downsampling;
/* 0x020 */ s32 next_reverb_buf_pos;
/* 0x024 */ s32 delay_num_samples_unk;
/* 0x028 */ s16* left_reverb_buf;
/* 0x02C */ s16* right_reverb_buf;
/* 0x030 */ s16* left_load_resample_buf;
/* 0x034 */ s16* right_load_resample_buf;
/* 0x038 */ s16* left_save_resample_buf;
/* 0x03C */ s16* right_save_resample_buf;
/* 0x040 */ delayparam params[2][AUDIO_GROUP_MAX];
/* 0x158 */ delayparam sub_params[2][AUDIO_GROUP_MAX];
/* 0x270 */ s16* filter_left;
/* 0x274 */ s16* filter_right;
/* 0x278 */ s16* filter_left_init;
/* 0x27C */ s16* filter_right_init;
/* 0x280 */ s16* filter_left_state;
/* 0x284 */ s16* filter_right_state;
/* 0x288 */ wtstr tuned_sample;
/* 0x290 */ smzwavetable sample;
/* 0x2A0 */ adpcmloop adpcm_loop;
} delay;
/* sizeof(macro) == 0x1C */
typedef struct macro_ {
/* 0x00 */ u8* pc;
/* 0x04 */ u8* stack[4];
/* 0x14 */ u8 remaining_loop_iters[4];
/* 0x18 */ u8 depth;
/* 0x19 */ s8 value;
} macro;
/* SubTrack struct */
/* sizeof(sub) == 0xE0 */
typedef struct sub_ {
/* 0x00 */ u8 enabled : 1;
/* 0x00 */ u8 finished : 1;
/* 0x00 */ u8 stop_script : 1;
/* 0x00 */ u8 muted : 1;
/* 0x00 */ u8 has_instrument : 1;
/* 0x00 */ u8 stereo_effects : 1;
/* 0x00 */ u8 large_notes : 1;
/* 0x00 */ u8 unused : 1;
union {
struct {
/* 0x01 */ u8 frequency_scale : 1;
/* 0x01 */ u8 volume : 1;
/* 0x01 */ u8 pan : 1;
} flags;
/* 0x01 */ u8 as_byte;
} changes;
/* 0x02 */ u8 note_alloc_policy;
/* 0x03 */ u8 mute_flags;
/* 0x04 */ u8 target_reverb_vol;
/* 0x05 */ u8 note_priority;
/* 0x06 */ u8 priority2;
/* 0x07 */ u8 bank_id;
/* 0x08 */ u8 reverb_idx;
/* 0x09 */ u8 book_ofs;
/* 0x0A */ u8 new_pan;
/* 0x0B */ u8 pan_channel_weight;
/* 0x0C */ u8 gain;
/* 0x0D */ u8 velocity_random_variance;
/* 0x0E */ u8 gate_time_random_variance;
/* 0x0F */ u8 comb_filter_size;
/* 0x10 */ u8 surround_effect_idx;
/* 0x11 */ u8 subtrack_idx;
/* 0x12 */ u8 note_semitone;
/* 0x14 */ vibparam vibrato_params;
/* 0x22 */ u16 delay;
/* 0x24 */ u16 comb_filter_gain;
/* 0x26 */ u16 dynamic_value;
/* 0x28 */ s16 inst_or_wave;
/* 0x2A */ s16 transposition;
/* 0x2C */ f32 volume_scale;
/* 0x30 */ f32 volume;
/* 0x34 */ s32 pan;
/* 0x38 */ f32 applied_volume;
/* 0x3C */ f32 frequency_scale;
/* 0x40 */ u8 (*dyn_tbl)[][2];
/* 0x44 */ channel* channel;
/* 0x48 */ note* note;
/* 0x4C */ voicetable* voicetable;
/* 0x50 */ group* group;
/* 0x54 */ struct note_* note_layers[4];
/* 0x64 */ macro macro_player;
/* 0x80 */ env adsr_env;
/* 0x88 */ chnode channel_node;
/* 0xC8 */ s8 port[8];
/* 0xD0 */ u8* sfx_state;
/* 0xD4 */ s16* filter;
/* 0xD8 */ phase stereo_phase;
/* 0xDC */ s32 sample_start_pos;
/* 0xE0 */ s32 _E0;
/* 0xE4 */ u8 _unk[0x100 - 0x0E4];
} sub;
/* sizeof(group) == 0x160 */
struct group_ {
struct flags_ {
/* 0x000 */ u8 enabled : 1;
/* 0x000 */ u8 finished : 1;
/* 0x000 */ u8 muted : 1;
/* 0x000 */ u8 sequence_dma_in_progress : 1;
/* 0x000 */ u8 bank_dma_in_progress : 1;
/* 0x000 */ u8 recalculate_volume : 1;
/* 0x000 */ u8 stop_seq_script : 1;
/* 0x000 */ u8 apply_bend : 1;
} flags;
/* 0x001 */ u8 state;
/* 0x002 */ u8 note_alloc_policy;
/* 0x003 */ u8 mute_flags;
/* 0x004 */ u8 seq_id;
/* 0x005 */ u8 bank_id;
/* 0x006 */ u8 unk006;
/* 0x007 */ s8 group_idx;
/* 0x008 */ u16 tempo;
/* 0x00A */ u16 tempo_acceleration;
/* 0x00C */ s16 tempo_change;
/* 0x00E */ s16 transposition;
/* 0x010 */ u16 delay;
/* 0x012 */ u16 fade_timer;
/* 0x014 */ u16 stored_fade_timer;
/* 0x016 */ u16 counter;
/* 0x018 */ u8* seq_data;
/* 0x01C */ f32 fade_volume;
/* 0x020 */ f32 fade_velocity;
/* 0x024 */ f32 volume;
/* 0x028 */ f32 mute_volume_scale;
/* 0x02C */ f32 fade_volume_scale;
/* 0x030 */ f32 applied_fade_volume;
/* 0x034 */ f32 bend;
/* 0x038 */ sub* subtracks[AUDIO_SUBTRACK_NUM];
/* 0x078 */ macro macro_player;
/* 0x094 */ u8* short_note_velocity_tbl;
/* 0x098 */ u8* short_note_gate_time_tbl;
/* 0x09C */ chnode channel_node;
/* 0x0DC */ s32 skip_ticks;
/* 0x0E0 */ s32 script_counter; /* is u32 in MM decomp */
/* 0x0E4 */ u8 unkE4[0x158 - 0x0E4];
/* 0x158 */ s8 port[8];
};
/* sizeof(note) == 0x90 */
struct note_ {
/* 0x00 */ u8 enabled : 1;
/* 0x00 */ u8 finished : 1;
/* 0x00 */ u8 muted : 1;
/* 0x00 */ u8 continuous : 1;
/* 0x00 */ u8 _00bit3 : 1;
/* 0x00 */ u8 ignore_drum_pan : 1;
/* 0x00 */ u8 _00bit1 : 1;
/* 0x00 */ u8 note_properties_need_init : 1;
/* 0x01 */ phase stereo_phase;
/* 0x02 */ u8 inst_or_wave;
/* 0x03 */ u8 gate_time;
/* 0x04 */ u8 semitone;
/* 0x05 */ u8 portamento_target_note;
/* 0x06 */ u8 pan;
/* 0x07 */ u8 note_pan;
/* 0x08 */ u8 surround_effect_idx;
/* 0x09 */ u8 target_reverb_volume;
union {
struct {
/* 0x0A */ u16 bit0 : 1;
/* 0x0A */ u16 bit1 : 1;
/* 0x0A */ u16 bit2 : 1;
/* 0x0A */ u16 use_vibrato : 1;
/* 0x0A */ u16 add_subtrack_transposition : 1;
/* 0x0A */ u16 bit5 : 1;
/* 0x0A */ u16 bit6 : 1;
/* 0x0A */ u16 bit7 : 1;
/* 0x0B */ u16 bit8 : 1;
/* 0x0B */ u16 bit9 : 1;
/* 0x0B */ u16 bitA : 1;
/* 0x0B */ u16 bitB : 1;
/* 0x0B */ u16 bitC : 1;
/* 0x0B */ u16 bitD : 1;
/* 0x0B */ u16 bitE : 1;
/* 0x0B */ u16 bitF : 1;
} flags;
/* 0x0A */ u16 asU16;
} _0A;
/* 0x0C */ vibparam vibrato_params;
/* 0x1A */ s16 delay;
/* 0x1C */ s16 gate_delay;
/* 0x1E */ s16 delay2;
/* 0x20 */ u16 portamento_time;
/* 0x22 */ s16 transposition;
/* 0x24 */ s16 short_note_default_delay;
/* 0x26 */ s16 last_delay;
/* 0x28 */ env adsr_env;
/* 0x30 */ sweep portamento_sweep;
/* 0x3C */ channel* channel;
/* 0x40 */ f32 frequency_scale;
/* 0x44 */ f32 bend;
/* 0x48 */ f32 velocity_square2;
/* 0x4C */ f32 velocity_square;
/* 0x50 */ f32 note_velocity;
/* 0x54 */ f32 note_frequency_scale;
/* 0x58 */ voicetable* instrument;
/* 0x5C */ wtstr* tuned_sample;
/* 0x60 */ sub* sub_track;
/* 0x64 */ macro macro_player;
/* 0x80 */ link link;
};
/* sizeof(Bgloadreq) == 0x14 */
typedef struct Bgloadreq_ {
/* 0x00 */ u32 end_and_medium_key;
/* 0x04 */ smzwavetable* sample;
/* 0x08 */ u8* ram_addr;
/* 0x0C */ u32 encoded_info;
/* 0x10 */ s32 is_free;
} Bgloadreq;
/* sizeof(Bgload) == 0x58 */
typedef struct Bgload_ {
/* 0x00 */ s8 status;
/* 0x01 */ s8 delay;
/* 0x02 */ s8 medium;
/* 0x04 */ u8* ram_addr;
/* 0x08 */ u32 current_device_addr;
/* 0x0C */ u8* current_ram_addr;
/* 0x10 */ size_t bytes_remaining;
/* 0x14 */ size_t chunk_size;
/* 0x18 */ s32 unk_medium_param;
/* 0x1C */ u32 ret_msg;
/* 0x20 */ OSMesgQueue* ret_mq;
/* 0x24 */ OSMesgQueue mq;
/* 0x3C */ OSMesg msg[1];
/* 0x40 */ OSIoMesg io_mesg;
} Bgload;
/* sizeof(lpscache) == 0x64 */
typedef struct lpscache_ {
/* 0x00 */ u8 medium;
/* 0x01 */ u8 seq_or_bank_id;
/* 0x02 */ u16 inst_id;
/* 0x04 */ s32 unk_medium_param;
/* 0x08 */ u32 current_device_addr;
/* 0x0C */ u8* current_ram_addr;
/* 0x10 */ u8* ram_addr;
/* 0x14 */ s32 status;
/* 0x18 */ size_t bytes_remaining;
/* 0x1C */ s8* is_done;
/* 0x20 */ smzwavetable sample;
/* 0x30 */ OSMesgQueue mq;
/* 0x48 */ OSMesg msg[1];
/* 0x4C */ OSIoMesg io_mesg;
} lpscache;
/* sizeof(WaveLoad) == 0x10 */
typedef struct WaveLoad_ {
/* 0x00 */ u8* ram_addr;
/* 0x04 */ u32 device_addr;
/* 0x08 */ u16 size_unused;
/* 0x0A */ u16 size;
/* 0x0C */ u8 unused;
/* 0x0D */ u8 reuse_idx;
/* 0x0E */ u8 time_to_live;
} WaveLoad;
/* sizeof(audioparams) == 0x28 */
typedef struct audioparams_ {
/* 0x00 */ s16 spec;
/* 0x02 */ u16 sampling_frequency;
/* 0x04 */ u16 ai_sampling_frequency;
/* 0x06 */ s16 num_samples_per_frame_target;
/* 0x08 */ s16 num_samples_per_frame_max;
/* 0x0A */ s16 num_samples_per_frame_min;
/* 0x0C */ s16 updates_per_frame;
/* 0x0E */ s16 num_samples_per_update;
/* 0x10 */ s16 num_samples_per_update_max;
/* 0x12 */ s16 num_samples_per_update_min;
/* 0x14 */ s16 num_groups;
/* 0x18 */ f32 resample_rate;
/* 0x1C */ f32 updates_per_frame_inverse;
/* 0x20 */ f32 updates_per_frame_inverse_scaled;
/* 0x24 */ f32 updates_per_frame_scaled;
} audioparams;
/* sizeof(StayHeapstrc) == 0x0C */
typedef struct StayHeapstrc_ {
/* 0x00 */ size_t seq_heap_size;
/* 0x04 */ size_t bank_heap_size;
/* 0x08 */ size_t wave_heap_size;
} StayHeapstrc;
/* sizeof(DataHeapstrc) == 0x08 */
typedef struct DataHeapstrc_ {
/* 0x00 */ size_t data_size;
/* 0x04 */ size_t auto_size;
} DataHeapstrc;
/* sizeof(AutoHeapstrc) == 0xC */
typedef struct AutoHeapstrc_ {
/* 0x00 */ size_t seqLen;
/* 0x04 */ size_t bankLen;
/* 0x08 */ size_t waveLen;
} AutoHeapstrc;
/* sizeof(AudioHeapstrc) == 0x10 */
typedef struct AudioHeapstrc_ {
/* 0x00 */ size_t misc_heap_size;
/* 0x04 */ size_t unused0;
/* 0x08 */ size_t unused1;
/* 0x0C */ size_t cache_heap_size;
} AudioHeapstrc;
/* sizeof(SwMember) == 0x14 */
typedef struct SwMember_ {
/* 0x00 */ u8 in_use;
/* 0x01 */ s8 original_medium;
/* 0x02 */ u8 sample_bank_id;
/* 0x03 */ u8 _pad[5];
/* 0x08 */ u8* allocated_addr;
/* 0x0C */ void* sample_addr;
/* 0x10 */ size_t size;
} SwMember;
/* sizeof(SwHeap) == 0x298 */
typedef struct SwHeap_ {
/* 0x000 */ ALHeap heap;
/* 0x004 */ SwMember entries[32];
/* 0x294 */ s32 num_entries;
} SwHeap;
/* TODO: this needs a better name, I don't see any functions which reference it */
/* sizeof(ALHeapEntry) == 0xC */
typedef struct ALHeapEntry_ {
/* 0x00 */ u8* addr;
/* 0x04 */ size_t size;
/* 0x08 */ s16 table_type;
/* 0x0A */ s16 id;
} ALHeapEntry;
/* sizeof(SZStay) == 0xD8 */
typedef struct SZStay_ {
/* 0x00 */ u32 num_entries;
/* 0x04 */ ALHeap heap;
/* 0x18 */ ALHeapEntry entries[16];
} SZStay;
/* sizeof(SZAuto) == 0x30 */
typedef struct SZAuto_ {
/* 0x00 */ u32 use_entry_idx;
/* 0x04 */ ALHeap heap;
/* 0x18 */ ALHeapEntry entries[2];
} SZAuto;
/* sizeof(SZHeap) == 0x11C */
typedef struct SZHeap_ {
/* 0x000 */ SZStay stay_heap;
/* 0x0D8 */ SZAuto auto_heap;
/* 0x108 */ ALHeap unused_heap; /* Might be another struct with a heap, its size matches ALHeap in MM and AC */
} SZHeap;
typedef u32 (*SequenceCallback)(s8, sub*);
/* sizeof(AudioGlobals) == 0x92b0 */
typedef struct AudioGlobals {
/* 0x0000 */ u8 _0000;
/* 0x0001 */ s8 num_synth_reverbs;
/* 0x0002 */ u16 _0002;
/* 0x0004 */ u16 _0004;
/* 0x0006 */ u8 _0006[10];
/* 0x0010 */ s16* adpcm_code_book;
/* 0x0014 */ commonch* common_channel;
/* 0x0018 */ delay synth_delay[4];
/* 0x0B58 */ u8 _0B58[0x30];
/* 0x0B88 */ smzwavetable* used_samples[128];
/* 0x0D88 */ Bgloadreq requested_samples[128];
/* 0x1788 */ s32 num_used_samples;
/* 0x178C */ s32 num_requested_samples;
/* 0x1790 */ Bgload bgloads[16];
/* 0x1D10 */ OSMesgQueue bgload_mq;
/* 0x1D28 */ u8 _1D28[0x40];
/* 0x1D68 */ Bgload* current_bgload;
/* 0x1D6C */ u32 slow_load_pos;
/* 0x1D70 */ lpscache lps_cache[2];
/* 0x1E38 */ OSPiHandle* cart_handle;
/* 0x1E3C */ OSPiHandle* drive_handle;
/* 0x1E40 */ OSMesgQueue external_load_queue;
/* 0x1E58 */ OSMesg external_load_mesg_buf[16];
/* 0x1E98 */ OSMesgQueue preload_sample_queue;
/* 0x1EB0 */ OSMesg preload_sample_mesg_buf[16];
/* 0x1EF0 */ OSMesgQueue cur_audio_frame_dma_queue;
/* 0x1F08 */ OSMesg cur_audio_frame_dma_mesg_buf[64];
/* 0x2008 */ OSIoMesg cur_adio_frame_dma_io_mesg_buf[64];
/* 0x2608 */ OSMesgQueue sync_dma_queue;
/* 0x2620 */ OSMesg sync_dma_queue_msg[1];
/* 0x2624 */ OSIoMesg sync_dma_io_mesg;
/* 0x263C */ WaveLoad* waveload_list;
/* 0x2640 */ u32 num_waveloads;
/* 0x2644 */ u32 waveload_count;
/* 0x2648 */ s32 _2648;
/* 0x264C */ u8 waveload_dma_queue0[256];
/* 0x274C */ u8 waveload_dma_queue1[256];
/* 0x284C */ u8 waveload_dma_queue0_rpos; /* read pos */
/* 0x284D */ u8 waveload_dma_queue1_rpos; /* read pos */
/* 0x284E */ u8 waveload_dma_queue0_wpos; /* write pos */
/* 0x284F */ u8 waveload_dma_queue1_wpos; /* write pos */
/* 0x2850 */ ArcHeader* seq_header;
/* 0x2854 */ ArcHeader* bank_header;
/* 0x2858 */ ArcHeader* wave_header;
/* 0x285C */ ArcHeader* data_header;
/* 0x2860 */ u16* map_header;
/* 0x2864 */ u16 num_sequences;
/* 0x2868 */ voiceinfo* voice_info;
/* 0x286C */ audioparams audio_params;
/* 0x2894 */ f32 _2894; /* tempo scale? */
/* 0x2898 */ s32 waveload_dma_buf0_size;
/* 0x289C */ s32 waveload_dma_buf1_size;
/* 0x28A0 */ u8 _28A0[16];
/* 0x28B0 */ s32 waveload_dma_cur_buf_size;
/* 0x28B4 */ s32 max_audio_cmds;
/* 0x28B8 */ s32 num_channels;
/* 0x28BC */ s16 max_tempo;
/* 0x28BE */ s8 sound_mode;
/* 0x28C0 */ s32 frame_audio_task_count;
/* 0x28C4 */ s32 current_frame_dma_count;
/* 0x28C8 */ s32 rsp_task_idx;
/* 0x28CC */ s32 current_ai_buffer_idx;
/* 0x28D0 */ Acmd* abi_cmd_bufs[3];
/* 0x28DC */ Acmd* unused_current_abi_cmd_buf;
/* 0x28E0 */ void* unused_current_audio_task;
/* 0x28E4 */ u8 unused_rsp_tasks[2][0x50]; // Actually a struct but we don't need it
/* 0x2984 */ u8 _2984[0x54]; // unsure what this is, new to DnM+/AC?
/* 0x29D8 */ f32 _29D8;
/* 0x29DC */ s32 refresh_rate;
/* 0x29E0 */ s16* ai_buffers[4];
/* 0x29F0 */ s16 num_samples_per_frame[4];
/* 0x29F8 */ u32 audio_random_seed;
/* 0x29FC */ s32 audio_error_flags; // unsure about the name, from MM
/* 0x2A00 */ vu32 reset_timer;
/* 0x2A04 */ SequenceCallback seq_callbacks[4];
/* 0x2A14 */ s8 _2A14;
/* 0x2A18 */ s32 num_abi_cmds_max;
/* 0x2A1C */ s32 _2A1C;
/* 0x2A20 */ ALHeap session_heap;
/* 0x2A34 */ ALHeap external_heap;
/* 0x2A48 */ ALHeap init_heap;
/* 0x2A5C */ ALHeap misc_heap;
/* 0x2A70 */ ALHeap unused_heap0;
/* 0x2A84 */ ALHeap unused_heap1;
/* 0x2A98 */ ALHeap sz_data_heap;
/* 0x2AAC */ ALHeap data_heap;
/* 0x2AC0 */ ALHeap sz_auto_heap;
/* 0x2AD4 */ SZHeap seq_heap;
/* 0x2BF0 */ SZHeap bank_heap;
/* 0x2D0C */ SZHeap wave_heap;
/* 0x2E28 */ ALHeap emem_heap;
/* 0x2E3C */ ALHeapEntry emem_entries[32];
/* 0x2FBC */ SwHeap emem_persistent_wave_heap;
/* 0x3254 */ SwHeap emem_temporary_wave_heap;
/* 0x34EC */ AudioHeapstrc audio_heap_info;
/* 0x34FC */ DataHeapstrc cache_heap;
/* 0x3504 */ StayHeapstrc persistent_common_heap_info;
/* 0x3510 */ StayHeapstrc temporary_common_heap_info;
/* 0x351C */ u8 wave_load_status[172];
/* 0x35C8 */ u8 bank_load_status[172];
/* 0x3674 */ u8 sequence_load_status[252];
/* 0x3770 */ u8 reset_status;
/* 0x3771 */ u8 spec_id;
/* 0x3774 */ s32 audio_reset_fadeout_frames_left;
/* 0x3778 */ f32* adsr_decay_table;
/* 0x377C */ u8* audio_heap_p;
/* 0x3780 */ size_t audio_heap_size;
/* 0x3784 */ channel* channels;
/* 0x3788 */ struct group_ groups[AUDIO_GROUP_MAX];
/* 0x3E68 */ note notes[AUDIO_NOTE_MAX];
/* 0x8668 */ sub null_sub_track; /* used for 'null' sub tracks */
/* 0x8748 */ group* groups_p[AUDIO_GROUP_MAX];
/* 0x877C */ s32 sample_state_offset;
/* 0x8780 */ link note_link;
/* 0x8790 */ chnode channel_node; /* main chnode */
/* 0x87D0 */ struct group_ main_group;
/* 0x8930 */ sub main_sub;
/* 0x8A30 */ u8 thread_cmd_write_pos;
/* 0x8A31 */ u8 thread_cmd_read_pos;
/* 0x8A32 */ u8 thread_cmd_queue_finished;
/* 0x8A34 */ u16 thread_cmd_group_mask[AUDIO_GROUP_MAX];
/* 0x8A40 */ OSMesgQueue* spec_change_mq_p;
/* 0x8A44 */ OSMesgQueue* task_start_mq_p;
/* 0x8A48 */ OSMesgQueue* thread_cmd_proc_mq_p;
/* 0x8A4C */ OSMesgQueue task_start_mq;
/* 0x8A64 */ OSMesgQueue thread_cmd_proc_mq;
/* 0x8A7C */ OSMesgQueue spec_change_mq;
/* 0x8A94 */ OSMesg task_start_msg_buf[1];
/* 0x8A98 */ OSMesg spec_change_msg_buf[1];
/* 0x8A9C */ OSMesg thread_cmd_proc_msg_buf[4];
/* 0x8AAC */ AudioPort audio_port_cmds[256];
/* 0x92AC */ s32 _92AC;
} AudioGlobals;
typedef union SOUNDID_ {
struct {
u8 wave_id;
u8 inst_id;
u8 _02;
u8 _03;
};
u32 uint32;
} SOUNDID;
typedef s32 (*PlayerCallBack)(void*);
typedef struct PLAYER_CALL_ {
PlayerCallBack callback;
void* arg;
u32 DSP_mode;
} PLAYER_CALL;
#ifdef __cplusplus
}
#endif
#endif
+16
View File
@@ -0,0 +1,16 @@
#ifndef AUDIOTABLE_H
#define AUDIOTABLE_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
extern f32 PCENTTABLE[];
extern f32 PCENTTABLE2[];
extern envdat DEFAULT_ENV[];
extern f32 PITCHTABLE[];
extern u8 DEFAULT_VTABLE[];
extern u8 DEFAULT_GTABLE[];
extern u8 BDB_SEQDATA[];
#endif
+18 -3
View File
@@ -1,16 +1,31 @@
#ifndef AUDIOTHREAD_H
#define AUDIOTHREAD_H
#include "types.h"
#include "types.h"
#include "jaudio_NES/audiostruct.h"
#include "dolphin/os.h"
#define AUDIO_THREAD_FLAG_DVD (1 << 0)
#define AUDIO_THREAD_FLAG_AUDIO (1 << 1)
#define AUDIO_THREAD_FLAG_NEOS (1 << 2)
extern volatile int intcount;
OSThread jac_audioThread[3];
OSThread jac_neosThread;
OSThread jac_dvdThread;
extern void NeosSync(void);
#ifdef __cplusplus
extern "C" {
#endif
void StartAudioThread(void*, u32, u32, u32);
extern void DspSyncCountClear(int count);
extern int DspSyncCountCheck(void);
extern void StartAudioThread(void* pHeap, s32 heapSize, u32 aramSize, u32 flags);
#ifdef __cplusplus
}
#endif
#endif
#endif
+29
View File
@@ -0,0 +1,29 @@
#ifndef AUDIOWORK_H
#define AUDIOWORK_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
#include "jaudio_NES/rate.h"
#include "jaudio_NES/audiotable.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*VFRAME_CALLBACK)(void);
typedef u32 (*GRP_CALLBACK)(s8, group*);
typedef void* (*SOUND_CALLBACK)(smzwavetable*, s32, s8, s32);
typedef Acmd* (*DACOUT_CALLBACK)(Acmd*, s32, s32);
extern AudioGlobals AG;
extern VFRAME_CALLBACK NA_VFRAME_CALLBACK;
extern SequenceCallback NA_CALLBACK;
extern GRP_CALLBACK NA_GRP_CALLBACK;
extern SOUND_CALLBACK NA_SOUND_CALLBACK;
extern DACOUT_CALLBACK NA_DACOUT_CALLBACK;
#ifdef __cplusplus
}
#endif
#endif
+23
View File
@@ -0,0 +1,23 @@
#ifndef CHANNEL_H
#define CHANNEL_H
#include "types.h"
#include "jaudio_NES/audiowork.h"
extern s32 OverwriteBank(s32 type, s32 bankId, s32 idx, s32 voicetable);
extern channel* Nas_AllocationOnRequest(note* n);
extern wtstr* NoteToVoice(voicetable* voicetbl, s32 note);
extern voicetable* ProgToVp(s32 prog, s32 note);
extern percvoicetable* PercToPp(s32 perc, s32 note);
extern veffvoicetable* VpercToVep(s32 vperc, s32 note);
extern void Nas_UpdateChannel(void);
extern void Nas_DeAllocAllVoices(chnode* node);
extern void Nas_AllocVoices(chnode* node, s32 num);
extern void Nas_InitChNode(chnode* node);
extern void Nas_Release_Channel(note* n);
extern void Nas_Release_Channel_Force(note* n);
#endif
+12
View File
@@ -0,0 +1,12 @@
#ifndef CPUBUF_H
#define CPUBUF_H
#include "types.h"
#include "jaudio_NES/rate.h"
#include "jaudio_NES/audiocommon.h"
extern s16* CpubufProcess(DSPBUF_EVENTS event);
extern void CpuFrameEnd(void);
extern s16* MixCpu(s32 nSamples);
#endif
+9
View File
@@ -0,0 +1,9 @@
#ifndef DRIVER_H
#define DRIVER_H
#include "types.h"
#include "jaudio_NES/audiowork.h"
extern Acmd* Nas_smzAudioFrame(Acmd* cmds, s32* processed_cmds, s16* pSamples, s32 nSamples);
#endif
+22
View File
@@ -0,0 +1,22 @@
#ifndef DSPBOOT_H
#define DSPBOOT_H
#include "types.h"
typedef struct STRUCT_DSP_TASK2 {
/* 0x00 */ u16* iram_mmem_addr;
/* 0x04 */ u32 iram_length;
/* 0x08 */ u16 iram_addr;
/* 0x0A */ u16* dram_mmem_addr;
/* 0x0E */ u32 dram_length;
/* 0x12 */ u16 dram_addr;
/* 0x16 */ u16 dsp_init_vector;
}DSPTaskInfo2;
extern s32 __DSPCheckMXICBoot2(DSPTaskInfo2* task);
extern void DSPInit2(DSPTaskInfo2* task);
extern void DspBoot(void);
extern u16 jdsp[];
#endif
+13
View File
@@ -0,0 +1,13 @@
#ifndef DSPBUF_H
#define DSPBUF_H
#include "types.h"
#include "jaudio_NES/audiocommon.h"
#include "jaudio_NES/rate.h"
extern s16* DspbufProcess(DSPBUF_EVENTS event);
extern s16* MixDsp(s32 nSamples);
extern void UpdateDSP(void);
extern void DspFrameEnd(void);
#endif
+8
View File
@@ -0,0 +1,8 @@
#ifndef DSPDRIVER_H
#define DSPDRIVER_H
#include "types.h"
extern void UpdateDSPchannelAll(void);
#endif
+9
View File
@@ -0,0 +1,9 @@
#ifndef DSPINTERFACE_H
#define DSPINTERFACE_H
#include "types.h"
extern void DSP_InitBuffer(void);
extern void DSP_InvalChannelAll(void);
#endif
+10
View File
@@ -0,0 +1,10 @@
#ifndef DSPPROC_H
#define DSPPROC_H
#include "types.h"
extern u32 DSPReleaseHalt(void);
extern void DsyncFrame(u32 subframes, u32 dspbuf_start, u32 dspbuf_end);
extern void DwaitFrame();
#endif
+3 -3
View File
@@ -7,11 +7,11 @@
extern "C" {
#endif
void Probe_Start(void);
void Probe_Finish(void);
extern void Probe_Start(s32 id, const char* label);
extern void Probe_Finish(s32 id);
#ifdef __cplusplus
}
#endif
#endif
#endif
+23
View File
@@ -0,0 +1,23 @@
#ifndef DUMMYROM_H
#define DUMMYROM_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
#include "libultra/libultra.h"
#define DUMMYROM_DRAM_TO_ARAM 0
#define DUMMYROM_ARAM_TO_DRAM 1
extern u8* JAC_ARAM_DMA_BUFFER_TOP;
ALHeap aram_hp; /* placed in common bss */
extern u32 GetNeos_FileTop(void);
extern u32 GetNeosRomTop(void);
extern u32 GetNeosRom_PreLoaded(void);
extern void SetPreCopy_NeosRom(u8* load_addr, u32 load_size, BOOL cut_flag);
extern BOOL ARAMStartDMAmesg(u32 dir, u32 dramAddr, u32 aramAddr, u32 size, s32 unused, OSMesgQueue* mq);
extern void Jac_SetAudioARAMSize(u32 size);
extern void ARAllocFull(u32* outSize);
extern void Jac_InitARAM(u32 loadAudiorom);
#endif
+30
View File
@@ -0,0 +1,30 @@
#ifndef DVDTHREAD_H
#define DVDTHREAD_H
#include "types.h"
#include "dolphin/dvd.h"
typedef void (*Jac_DVDCallback)(u32);
typedef s32 (*TaskCallback)(void*);
typedef void (*ErrorCallback)(char*, u8* addr);
extern void DVDT_ExtendPath(char* dst, char* ext);
extern s32 DVDT_AddTaskHigh(TaskCallback callback, void* stackp, size_t len);
extern s32 DVDT_AddTask(TaskCallback callback, void* stackp, size_t len);
extern void jac_dvdproc_init();
extern void* jac_dvdproc(void*);
extern s32 DVDT_LoadtoARAM_Main(void* arg);
extern s32 DVDT_LoadtoARAM(u32 owner, char* name, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback);
extern s32 DVDT_ARAMtoDRAM_Main(void* arg);
extern s32 DVDT_DRAMtoARAM_Main(void* arg);
extern s32 DVDT_ARAMtoDRAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback);
extern s32 DVDT_DRAMtoARAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback);
extern s32 DVDT_CheckFile(char* file);
extern void DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback);
extern s32 Jac_CheckFile(char* file);
extern void Jac_RegisterDVDErrorCallback(ErrorCallback callback);
extern s32 Jac_RegisterFastOpen(char* file);
extern BOOL Jac_DVDOpen(char* name, DVDFileInfo* info);
#endif
+12
View File
@@ -0,0 +1,12 @@
#ifndef EFFECT_H
#define EFFECT_H
#include "types.h"
#include "jaudio_NES/audiowork.h"
extern void Nas_ChannelModInit(channel* ch);
extern void Nas_SweepInit(channel* ch);
extern void Nas_MainCtrl(group* grp);
#endif
+5 -2
View File
@@ -14,8 +14,8 @@ extern void Na_BgmStart(u8);
extern void Na_BgmCrossfadeStart(u8);
extern void Na_BgmStop(u16);
extern void Na_SysTrgStart(u16);
extern void Na_PlyWalkSe(int, u16, f32);
extern void Na_PlyWalkSeRoom(int, u16, f32);
extern void Na_PlyWalkSe(u16, u16, f32);
extern void Na_PlyWalkSeRoom(u8, u16, f32);
extern void Na_NpcWalkSe(int, u16, f32);
extern void Na_NpcWalkSeRoom(int, u16, f32);
extern void Na_PlayerStatusLevel(f32, int);
@@ -61,6 +61,9 @@ extern void Na_RestartPrepare();
extern u8 Na_CheckRestartReady();
extern void Na_Restart();
extern u8 sou_now_bgm_handle;
extern u8 sou_chime_status;
#ifdef __cplusplus
}
#endif
+11
View File
@@ -0,0 +1,11 @@
#ifndef GAME64_CPP_H
#define GAME64_CPP_H
#include "types.h"
#include "jaudio_NES/game64.h"
/* C++ linkage */
extern u8 angle2pan(u16 angle, f32 dist);
extern f32 distance2vol(f32 distance);
#endif
+8
View File
@@ -0,0 +1,8 @@
#ifndef IPLDEC_H
#define IPLDEC_H
#include "types.h"
extern BOOL DspExtraTaskCheck(void);
#endif
+8
View File
@@ -0,0 +1,8 @@
#ifndef JA_CALC_H
#define JA_CALC_H
#include "types.h"
extern void Jac_InitSinTable(void);
#endif
+7 -1
View File
@@ -7,7 +7,13 @@
extern "C" {
#endif
extern void Na_GetRadioCounter(void*);
typedef struct kappa_ {
u16 unk0;
f32 unk4;
}kappa;
extern int Na_GetKappaCounter(kappa*);
extern void Na_SetKappaSeqHandle(int flag);
#ifdef __cplusplus
}
+9 -3
View File
@@ -2,14 +2,20 @@
#define MELODY_H
#include "types.h"
#include "jaudio_NES/audiocommon.h"
#ifdef __cplusplus
extern "C" {
#endif
extern void Na_Inst(u16, u8*);
extern void Na_FurnitureInst(u32, u8, u8*, u16, f32);
extern int Na_InstCountGet();
extern void Na_MelodyInit(void);
extern void Na_Inst(u16 inst, u8* pData);
extern s8 Na_InstCountGet(void);
extern s16 Na_MelodyGetSubTrackNum(s16 inst);
extern void Na_FurnitureInst(u32 id, u8 inst, u8* melody, u16 angle, f32 dist);
extern void Na_MelodyVoice(s16 voice);
extern u32 na_melody_id_hist[];
#ifdef __cplusplus
}
+20
View File
@@ -0,0 +1,20 @@
#ifndef JAUDIO_MEMORY_H
#define JAUDIO_MEMORY_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
extern void Nas_HeapInit(ALHeap* heap, u8* base, s32 len);
extern void* Nas_HeapAlloc(ALHeap* heap, s32 size);
extern void* Nas_HeapAlloc_CL(ALHeap*, s32 size);
extern u32 Nas_SzCacheCheck(s32 type, s32 cache_type, s32 id);
extern void Nas_SzStayDelete(s32 type);
extern void Nas_SetDelayLineParam(s32 delayIdx, s32 param_type, s32 param_value, s32 init);
extern void Nas_SetBPFilter(s16* filter, s32 lowpass_cutoff, s32 highpass_cutoff);
extern s32 Nas_SpecChange(void);
#endif
+12
View File
@@ -0,0 +1,12 @@
#ifndef NEOSTHREAD_H
#define NEOSTHREAD_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
extern u32 Neos_Update(s16* dst);
extern void ImageLoaded(u32 param);
extern BOOL Neos_CheckBoot(void);
extern void* neosproc(void* param);
#endif
+17
View File
@@ -0,0 +1,17 @@
#ifndef OS_H
#define OS_H
#include "types.h"
#include "libultra/libultra.h"
extern void Z_osWritebackDCacheAll();
extern void osInvalDCache2(void* src, s32 size);
extern void osWritebackDCache2(void* src, s32 size);
extern void Z_osCreateMesgQueue (OSMesgQueue* mq, OSMesg* msg, s32 count );
extern s32 Z_osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags );
extern s32 Z_osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags );
extern s32 Z_osEPiStartDma (OSPiHandle * handler, OSIoMesg* msg, s32 dir);
extern void Z_bcopy (void* dst, void* src, size_t size);
#endif
+23
View File
@@ -0,0 +1,23 @@
#ifndef PLAYERCALL_H
#define PLAYERCALL_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
#ifdef __cplusplus
extern "C" {
#endif
extern void ResetPlayerCallback();
extern s32 Jac_RegisterDspPlayerCallback(PlayerCallBack callback, void* arg);
extern s32 Jac_RegisterPlayerCallback(PlayerCallBack callback, void* arg);
#ifdef __cplusplus
}
#endif
/* C++ linkage, should these go in a different header file? */
extern void PlayerCallback();
extern void DspPlayerCallback();
#endif
+3 -3
View File
@@ -2,16 +2,16 @@
#define RADIO_H
#include "types.h"
#include "audio.h"
#ifdef __cplusplus
extern "C" {
#endif
extern void Na_GetKappaCounter(void*);
extern int Na_GetRadioCounter(Radio_c* radio);
#ifdef __cplusplus
}
#endif
#endif
#endif
+19
View File
@@ -0,0 +1,19 @@
#ifndef JAUDIO_RANDOM_H
#define JAUDIO_RANDOM_H
#include "types.h"
#include "jaudio_NES/audiostruct.h"
#include "jaudio_NES/audiowork.h"
#ifdef __cplusplus
extern "C" {
#endif
extern s32 GetRandom_s32(void);
extern f32 GetRandom_sf32(void);
#ifdef __cplusplus
}
#endif
#endif
+19
View File
@@ -0,0 +1,19 @@
#ifndef RATE_H
#define RATE_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
extern u32 JAC_AI_SETTING;
extern u32 JAC_SUBFRAMES;
extern u32 JAC_FRAMESAMPLES;
extern u32 DAC_SIZE;
#ifdef __cplusplus
}
#endif
#endif
+8 -6
View File
@@ -8,13 +8,15 @@
extern "C" {
#endif
extern void Na_RhythmStart(u32, s8, s8);
extern void Na_RhythmStop(u32);
extern void Na_RhythmInit();
extern s8 Na_GetRhythmSubTrack(u32 idx);
extern void Na_RhythmStart(u32 idx, s8 arg1, s8 arg2);
extern void Na_RhythmStop(u32 idx);
extern void Na_RhythmAllStop();
extern f32 Na_GetRhythmAnimCounter(u32);
extern s8 Na_GetRhythmDelay(u32);
extern void Na_GetRhythmInfo(TempoBeat_c* rhythm);
extern void Na_SetRhythmInfo(TempoBeat_c* rhythm);
extern f32 Na_GetRhythmAnimCounter(u32 idx);
extern s8 Na_GetRhythmDelay(u32 idx);
extern void Na_GetRhythmInfo(TempoBeat_c* tempo);
extern void Na_SetRhythmInfo(TempoBeat_c* tempo);
#ifdef __cplusplus
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef RSPSIM_H
#define RSPSIM_H
#include "types.h"
extern void RspStart2(u32* pTaskCmds, s32 allTasks, s32 param_3);
#endif
+12
View File
@@ -0,0 +1,12 @@
#ifndef SAMPLE_H
#define SAMPLE_H
#include "types.h"
extern void Jac_imixcopy(s16* ta, s16* tb, s16* td, s32 s);
extern void Jac_bcopyfast(u32* src, u32* dest, u32 size);
extern void Jac_bcopy(void* src, void* dest, s32 size);
extern void Jac_bzerofast(u32* dest, u32 size);
extern void Jac_bzero(void* dest, s32 size);
#endif
+5 -9
View File
@@ -2,22 +2,18 @@
#define STAFF_H
#include "types.h"
#include "audio.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct staff_roll_info_s{
s16 unk0;
int unk4;
f64 unk8;
}StaffRoll;
extern void Na_GetStaffRollInfo(void*);
extern void Na_StaffRollInit(void);
extern void Na_StaffRollStart(s16 seq_no);
extern void Na_GetStaffRollInfo(StaffRollInfo_c* info);
#ifdef __cplusplus
}
#endif
#endif
#endif

Some files were not shown because too many files have changed in this diff Show More