Full Code of TheOnlyZac/sly1 for AI

main bdb64a038e1f cached
418 files
1.5 MB
598.4k tokens
1799 symbols
1 requests
Download .txt
Showing preview only (1,684K chars total). Download the full file or copy to clipboard to get everything.
Repository: TheOnlyZac/sly1
Branch: main
Commit: bdb64a038e1f
Files: 418
Total size: 1.5 MB

Directory structure:
gitextract_7h7wlxdh/

├── .gitattributes
├── .github/
│   └── workflows/
│       ├── build.yml
│       ├── frogress.yml
│       └── progress.yml
├── .gitignore
├── README.md
├── config/
│   ├── checksum.sha1
│   ├── readme.md
│   ├── sly1.yaml
│   ├── sly1_may19.yaml
│   ├── symbol_addrs.txt
│   ├── symbol_addrs_may19.txt
│   └── symbol_addrs_old.txt
├── configure.py
├── docs/
│   ├── BEGINNERSGUIDE.md
│   ├── CONTRIBUTING.md
│   ├── DISTROBOX.md
│   └── STYLEGUIDE.md
├── include/
│   ├── 989snd.h
│   ├── ac.h
│   ├── act.h
│   ├── actseg.h
│   ├── alarm.h
│   ├── alo.h
│   ├── aseg.h
│   ├── asega.h
│   ├── barrier.h
│   ├── bas.h
│   ├── basic.h
│   ├── bbmark.h
│   ├── bez.h
│   ├── binoc.h
│   ├── bis.h
│   ├── blend.h
│   ├── blip.h
│   ├── bomb.h
│   ├── bq.h
│   ├── break.h
│   ├── brx.h
│   ├── bsp.h
│   ├── button.h
│   ├── cat.h
│   ├── cd.h
│   ├── chkpnt.h
│   ├── cid.h
│   ├── clip.h
│   ├── clock.h
│   ├── cm.h
│   ├── cnvo.h
│   ├── coin.h
│   ├── common.h
│   ├── cplcy.h
│   ├── credit.h
│   ├── crout.h
│   ├── crusher.h
│   ├── crv.h
│   ├── dart.h
│   ├── dartgun.h
│   ├── dialog.h
│   ├── difficulty.h
│   ├── dl.h
│   ├── dmas.h
│   ├── dysh.h
│   ├── dzg.h
│   ├── emitter.h
│   ├── ensure.h
│   ├── eyes.h
│   ├── fader.h
│   ├── find.h
│   ├── flash.h
│   ├── fly.h
│   ├── font.h
│   ├── freeze.h
│   ├── frm.h
│   ├── frzg.h
│   ├── game.h
│   ├── gcc/
│   │   └── math.h
│   ├── geom.h
│   ├── gifs.h
│   ├── glbs.h
│   ├── glob.h
│   ├── gomer.h
│   ├── gs.h
│   ├── hide.h
│   ├── hnd.h
│   ├── ik.h
│   ├── include_asm.h
│   ├── intrinsics.h
│   ├── jlo.h
│   ├── joy.h
│   ├── jsg.h
│   ├── jt.h
│   ├── jump.h
│   ├── keyhole.h
│   ├── labels.inc
│   ├── landing.h
│   ├── lgn.h
│   ├── lib/
│   │   └── libkernl/
│   │       └── filestub.h
│   ├── light.h
│   ├── lo.h
│   ├── lookat.h
│   ├── macro.inc
│   ├── mark.h
│   ├── mat.h
│   ├── mb.h
│   ├── memcard.h
│   ├── memory.h
│   ├── missile.h
│   ├── mpeg.h
│   ├── mq.h
│   ├── mrkv.h
│   ├── ms.h
│   ├── murray.h
│   ├── oid.h
│   ├── path.h
│   ├── phasemem.h
│   ├── pipe.h
│   ├── pnt.h
│   ├── po.h
│   ├── prog.h
│   ├── proxy.h
│   ├── puffer.h
│   ├── pzo.h
│   ├── rail.h
│   ├── rat.h
│   ├── rchm.h
│   ├── render.h
│   ├── rip.h
│   ├── rog.h
│   ├── rs.h
│   ├── rumble.h
│   ├── rwm.h
│   ├── sb.h
│   ├── sce/
│   │   ├── libdma.h
│   │   ├── memset.h
│   │   └── rand.h
│   ├── screen.h
│   ├── sdk/
│   │   ├── ee/
│   │   │   ├── eekernel.h
│   │   │   ├── eestruct.h
│   │   │   ├── libpad.h
│   │   │   ├── sifdev.h
│   │   │   └── sifrpc.h
│   │   └── libcdvd.h
│   ├── sensor.h
│   ├── shadow.h
│   ├── shape.h
│   ├── shd.h
│   ├── shdanim.h
│   ├── sky.h
│   ├── slotheap.h
│   ├── sm.h
│   ├── smartguard.h
│   ├── so.h
│   ├── solve.h
│   ├── sort.h
│   ├── sound.h
│   ├── spaprops.h
│   ├── speaker.h
│   ├── spire.h
│   ├── splice/
│   │   ├── bif.h
│   │   ├── eval.h
│   │   ├── frame.h
│   │   ├── gc.h
│   │   ├── method.h
│   │   ├── pair.h
│   │   ├── proc.h
│   │   ├── ref.h
│   │   ├── serialize.h
│   │   ├── sidebag.h
│   │   ├── spliceutils.h
│   │   ├── splotheap.h
│   │   └── vecmat.h
│   ├── splicemap.h
│   ├── spliceobj.h
│   ├── sprbuf.h
│   ├── sqtr.h
│   ├── step.h
│   ├── stepact.h
│   ├── stepcane.h
│   ├── stepguard.h
│   ├── stephang.h
│   ├── stephide.h
│   ├── steppipe.h
│   ├── steppower.h
│   ├── steprail.h
│   ├── steprun.h
│   ├── stepside.h
│   ├── stepzap.h
│   ├── stream.h
│   ├── suv.h
│   ├── sw.h
│   ├── tail.h
│   ├── tank.h
│   ├── target.h
│   ├── text.h
│   ├── thread.h
│   ├── tn.h
│   ├── transition.h
│   ├── turret.h
│   ├── tv.h
│   ├── types.h
│   ├── ub.h
│   ├── ui.h
│   ├── update.h
│   ├── util.h
│   ├── vb.h
│   ├── vec.h
│   ├── vifs.h
│   ├── vis.h
│   ├── vol.h
│   ├── vtables.h
│   ├── water.h
│   ├── waypoint.h
│   ├── wipe.h
│   ├── wm.h
│   ├── wr.h
│   ├── xform.h
│   └── zap.h
├── requirements.txt
├── scripts/
│   ├── build.sh
│   ├── check_progress.py
│   ├── checks.sh
│   ├── codematcher/
│   │   ├── match_all.sh
│   │   ├── match_file.sh
│   │   └── match_function_live.sh
│   ├── diff.sh
│   ├── extract_elf.sh
│   ├── frogress/
│   │   ├── mapfile_progress.sh
│   │   └── upload_progress.py
│   ├── quickstart.sh
│   ├── readme.md
│   ├── run.sh
│   ├── setup_prodg_linux.sh
│   └── windows/
│       ├── backup_registry.bat
│       ├── run.bat
│       └── setup_prodg_windows.bat
├── src/
│   ├── P2/
│   │   ├── 989snd.c
│   │   ├── ac.c
│   │   ├── act.c
│   │   ├── actseg.c
│   │   ├── alarm.c
│   │   ├── alo.c
│   │   ├── aseg.c
│   │   ├── asega.c
│   │   ├── barrier.c
│   │   ├── bas.c
│   │   ├── basic.c
│   │   ├── bbmark.c
│   │   ├── bez.c
│   │   ├── binoc.c
│   │   ├── bis.c
│   │   ├── blend.c
│   │   ├── blip.c
│   │   ├── bomb.c
│   │   ├── bq.c
│   │   ├── break.c
│   │   ├── brx.c
│   │   ├── bsp.c
│   │   ├── button.c
│   │   ├── cat.c
│   │   ├── cd.c
│   │   ├── chkpnt.c
│   │   ├── clip.c
│   │   ├── clock.c
│   │   ├── cm.c
│   │   ├── cnvo.c
│   │   ├── coin.c
│   │   ├── cplcy.c
│   │   ├── credit.c
│   │   ├── crout.c
│   │   ├── crusher.c
│   │   ├── crv.c
│   │   ├── dart.c
│   │   ├── dartgun.c
│   │   ├── dialog.c
│   │   ├── difficulty.c
│   │   ├── dl.c
│   │   ├── dmas.c
│   │   ├── dysh.c
│   │   ├── dzg.c
│   │   ├── emitter.c
│   │   ├── eyes.c
│   │   ├── fader.c
│   │   ├── find.c
│   │   ├── flash.c
│   │   ├── fly.c
│   │   ├── font.c
│   │   ├── freeze.c
│   │   ├── frm.c
│   │   ├── frzg.c
│   │   ├── game.c
│   │   ├── geom.c
│   │   ├── gifs.c
│   │   ├── glbs.c
│   │   ├── glob.c
│   │   ├── gomer.c
│   │   ├── gs.c
│   │   ├── hide.c
│   │   ├── hnd.c
│   │   ├── ik.c
│   │   ├── jlo.c
│   │   ├── joy.c
│   │   ├── jsg.c
│   │   ├── jt.c
│   │   ├── jump.c
│   │   ├── keyhole.c
│   │   ├── landing.c
│   │   ├── lgn.c
│   │   ├── light.c
│   │   ├── lo.c
│   │   ├── lookat.c
│   │   ├── main.c
│   │   ├── mark.c
│   │   ├── mat.c
│   │   ├── mb.c
│   │   ├── memory.c
│   │   ├── missile.c
│   │   ├── mpeg.c
│   │   ├── mrkv.c
│   │   ├── ms.c
│   │   ├── murray.c
│   │   ├── path.c
│   │   ├── phasemem.c
│   │   ├── pipe.c
│   │   ├── pnt.c
│   │   ├── po.c
│   │   ├── prog.c
│   │   ├── proxy.c
│   │   ├── puffer.c
│   │   ├── pzo.c
│   │   ├── rail.c
│   │   ├── rat.c
│   │   ├── rchm.c
│   │   ├── render.c
│   │   ├── rip.c
│   │   ├── rog.c
│   │   ├── rumble.c
│   │   ├── rwm.c
│   │   ├── sb.c
│   │   ├── screen.c
│   │   ├── sensor.c
│   │   ├── shadow.c
│   │   ├── shape.c
│   │   ├── shd.c
│   │   ├── shdanim.c
│   │   ├── sky.c
│   │   ├── slotheap.c
│   │   ├── sm.c
│   │   ├── smartguard.c
│   │   ├── so.c
│   │   ├── solve.c
│   │   ├── sort.c
│   │   ├── sound.c
│   │   ├── speaker.c
│   │   ├── spire.c
│   │   ├── splice/
│   │   │   ├── bif.cpp
│   │   │   ├── eval.cpp
│   │   │   ├── frame.cpp
│   │   │   ├── gc.cpp
│   │   │   ├── method.cpp
│   │   │   ├── pair.cpp
│   │   │   ├── proc.cpp
│   │   │   ├── ref.cpp
│   │   │   ├── serialize.cpp
│   │   │   ├── sidebag.cpp
│   │   │   ├── spliceutils.cpp
│   │   │   ├── splotheap.cpp
│   │   │   └── vecmat.cpp
│   │   ├── splicemap.c
│   │   ├── spliceobj.c
│   │   ├── sprbuf.c
│   │   ├── sqtr.c
│   │   ├── step.c
│   │   ├── stepact.c
│   │   ├── stepcane.c
│   │   ├── stepguard.c
│   │   ├── stephang.c
│   │   ├── stephide.c
│   │   ├── steppipe.c
│   │   ├── steppower.c
│   │   ├── steprail.c
│   │   ├── steprun.c
│   │   ├── stepside.c
│   │   ├── stream.c
│   │   ├── suv.c
│   │   ├── sw.c
│   │   ├── tail.c
│   │   ├── tank.c
│   │   ├── target.c
│   │   ├── text.c
│   │   ├── thread.c
│   │   ├── tn.c
│   │   ├── transition.c
│   │   ├── turret.c
│   │   ├── tv.c
│   │   ├── ub.c
│   │   ├── ui.c
│   │   ├── update.c
│   │   ├── util.c
│   │   ├── vec.c
│   │   ├── vifs.c
│   │   ├── vis.c
│   │   ├── water.c
│   │   ├── waypoint.c
│   │   ├── wipe.c
│   │   ├── wm.c
│   │   ├── wr.c
│   │   ├── xform.c
│   │   └── zap.c
│   └── readme.md
└── tools/
    ├── codematcher/
    │   ├── LICENSE.txt
    │   ├── README.md
    │   ├── codematcher
    │   ├── ghidra_tips.txt
    │   ├── match_all.cmd
    │   └── match_single.cmd
    └── objdiff/
        ├── LICENSE
        └── objdiff-cli-linux-x86_64

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.h linguist-language=C++
*.c linguist-language=C++


================================================
FILE: .github/workflows/build.yml
================================================
name: Build project and validate checksum

on:
  push:
    branches:
      - "*"

jobs:
  build:
    if: github.repository_owner == 'theonlyzac'
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: "3.x"

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -U -r requirements.txt

      - name: Setup wine
        run: |
          sudo dpkg --add-architecture i386
          sudo apt-get update
          sudo apt-get install wine32

      - name: Setup build environment
        run: |
          sudo apt-get install binutils-mips-linux-gnu
          scripts/setup_prodg_linux.sh
          curl -o disc/SCUS_971.98 "${{ secrets.FILE_URL }}"

      - name: Run build script
        run: |
          python configure.py
          ninja


================================================
FILE: .github/workflows/frogress.yml
================================================
name: Post mapfile_parser progress to Frogress endpoint

on:
  push:
    branches:
      - main
      - progress

jobs:
  frogress-upload:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: "3.9.x"

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -U -r requirements.txt

      - name: Setup wine
        run: |
          sudo dpkg --add-architecture i386
          sudo apt-get update
          sudo apt-get install wine32

      - name: Setup build environment
        run: |
          sudo apt-get install binutils-mips-linux-gnu
          scripts/setup_prodg_linux.sh
          curl -o disc/SCUS_971.98 "${{ secrets.FILE_URL }}"

      - name: Run build script
        run: |
          python configure.py
          ninja

      - name: Post to frogress endpoint
        run: |
          python3 scripts/frogress/upload_progress.py --frogress_api_key ${{ secrets.FROGRESS_API_KEY }}


================================================
FILE: .github/workflows/progress.yml
================================================
name: Upload objdiff report for Decomp.dev bot

on:
  push:
    branches:
      - main
      - progress

jobs:
  report-upload:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: "3.9.x"

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -U -r requirements.txt

      - name: Setup wine
        run: |
          sudo dpkg --add-architecture i386
          sudo apt-get update
          sudo apt-get install wine32

      - name: Setup build environment
        run: |
          sudo apt-get install binutils-mips-linux-gnu
          scripts/setup_prodg_linux.sh
          curl -o disc/SCUS_971.98 "${{ secrets.FILE_URL }}"

      - name: Configure and generate report
        run: |
          python configure.py --objects
          ninja
          ./tools/objdiff/objdiff-cli report generate > report.json

      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: SCUS_971.98_report
          path: ./report.json


================================================
FILE: .gitignore
================================================
# Project-specific files
SCUS_971.98
*[Ss][Cc][Uu][Ss]*
*971*98*
SCUS_*.*
*.elf
disc/*
reference/*

# Objdiff
objdiff.json
report.json

# Compiler
prodg*
tools/cc/
tools/wibo-i686
usr/

# Splat
splat/
assets/
asm/
undefined_funcs_auto.txt
undefined_syms_auto.txt
.splache
.ninja_log
*.ninja
permuter_settings.toml

# Documentation
html/

## MacOS
.DS_Store

## Linux
*.swp

## WSL
*:Zone.Identifier

## Binary/object products
**/bin/
**/obj/

## Clang-tooling things
**/compile_commands.json

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app
*.elf

# Linker scripts
*.ld

# Python
env/
__pycache__/
*.pyc

# Miscellaneous
.vscode
temp/
*.diff
*.AppImage


================================================
FILE: README.md
================================================
# 🦝 Sly Cooper and the Thievius Raccoonus

<!-- Build status shield -->
[build-url]:https://github.com/TheOnlyZac/sly1/actions/workflows/build.yml
[build-badge]: https://img.shields.io/github/actions/workflow/status/theonlyzac/sly1/build.yml?branch=main&label=build

[decompdev-url]: https://decomp.dev/TheOnlyZac/sly1
[data-progress-badge]: https://decomp.dev/TheOnlyZac/sly1.svg?mode=shield&label=data&measure=matched_data_percent

[engine-url]: https://decomp.dev/TheOnlyZac/sly1/SCUS_971.98?category=P2
[engine-progress-badge]: https://decomp.dev/TheOnlyZac/sly1.svg?mode=shield&category=P2&label=engine&measure=fuzzy_match_percent

[splice-url]: https://decomp.dev/TheOnlyZac/sly1/SCUS_971.98?category=splice
[splice-progress-badge]: https://decomp.dev/TheOnlyZac/sly1.svg?mode=shield&category=splice&label=splice&measure=fuzzy_match_percent

<!-- Contributors shield -->
[contributors-url]: https://github.com/theonlyzac/sly1/graphs/contributors
[contributors-badge]: https://img.shields.io/github/contributors/theonlyzac/sly1?color=%23db6d28

<!-- Discord shield -->
[discord-url]: https://discord.gg/2GSXcEzPJA
[discord-badge]: https://img.shields.io/discord/439454661100175380?color=%235865F2&logo=discord&logoColor=%23FFFFFF

<!-- Docs shield -->
[docs-url]: https://theonlyzac.github.io/sly1
[docs-badge]: https://img.shields.io/badge/docs-github.io-2C4AA8

<!-- Wiki shield -->
[wiki-url]: https://slymods.info
[wiki-badge]: https://img.shields.io/badge/wiki-slymods.info-2C4AA8

<!-- Shields -->
[![Build][build-badge]][build-url] [![Engine Progress][engine-progress-badge]][engine-url] [![Splice Progress][splice-progress-badge]][splice-url] [![Data Progress][data-progress-badge]][decompdev-url] [![Contributors][contributors-badge]][contributors-url] [![Discord Channel][discord-badge]][discord-url] [![Docs][docs-badge]][docs-url] [![Wiki][wiki-badge]][wiki-url]

[<img src="./docs/logo.png" style="margin:7px" align="right" width="33%" alt="Sly 1 Decompilation Logo by Cooper941">][docs-url]

This is a work-in-progress decompilation of [*Sly Cooper and the Thievius Raccoonus*](https://en.wikipedia.org/wiki/Sly_Cooper_and_the_Thievius_Raccoonus) for the PlayStation 2. It builds the NTSC-U version of the game, `SCUS_971.98` (SHA1: `57dc305d`).

Our goal is to fully decompile the game engine to matching source code. This repo does **not** contain any assets or original code from the game's files; you need your own copy of the game to build and run it.

Documentation of the code is hosted at [theonlyzac.github.io/sly1](https://theonlyzac.github.io/sly1). For more info on the game's internal systems and mechanics, check out the [SlyMods Wiki][wiki-url].

New contributors are welcome to make a pull request! If you would like to help but aren't sure where to start, check out [CONTRIBUTING.md](/docs/CONTRIBUTING.md) and [join our Discord server][discord-url] if you have any questions.

[![Quickstart](https://img.shields.io/badge/⚡%20Quickstart-093fbe?style=for-the-badge)](#-quickstart)
[![Manual Setup](https://img.shields.io/badge/⚙️%20Manual%20Setup-093fbe?style=for-the-badge)](#%EF%B8%8F-manual-setup)
[![Running the Game](https://img.shields.io/badge/🎮%20Running%20the%20Game-093fbe?style=for-the-badge)](#-running-the-game)
[![Project Structure](https://img.shields.io/badge/📁%20Project%20Structure-093fbe?style=for-the-badge)](#-project-structure)
[![FAQ](https://img.shields.io/badge/❓%20FAQ-093fbe?style=for-the-badge)](#-frequently-asked-questions)
[![Contributors](https://img.shields.io/badge/🩵%20Contributors-093fbe?style=for-the-badge)](#-contributors)
[![Star History](https://img.shields.io/badge/⭐%20Star%20History-093fbe?style=for-the-badge)](#-star-history)
[![Discord](https://img.shields.io/badge/Discord-093fbe?style=for-the-badge&logo=discord)](https://discord.gg/2GSXcEzPJA)

## ⚡ Quickstart

You can quickly setup the project on Debian-based systems such as Ubuntu (or WSL) using the quickstart script. Follow these three steps to get started:

> **NOTE:** You can follow along on other distros by using the [Distrobox Guide](./docs/DISTROBOX.md) to set up a Debian container.

### 1. Clone the repo

```bash
git clone https://github.com/theonlyzac/sly1
cd sly1
```

### 2. Run quickstart

Run the `quickstart.sh` script in the `scripts` directory. It may ask for your password to install dependencies.

You have two options to automatically extract your original game executable:

- <b>Method 1:</b> Copy the NTSC-U Sly 1 game ISO to the `disc` directory and then run:

  ```bash
  ./scripts/quickstart.sh
  ```

- <b>Method 2:</b> Specify a path to the ISO:

  ```bash
  ./scripts/quickstart.sh /path/to/GameBackup.iso
  ```

Otherwise, just copy the `SCUS_971.98` file from your game disc to the `disc` directory manually.

### 3. Build the project

```bash
./scripts/build.sh
```

If the build succeeds, you will see this:

```
out/SCUS_971.98: OK
```

If you have any issues, or you prefer to set up the project manually, follow the instructions below. Instructions to run the game are also provided below.

## ⚙️ Manual Setup

The project can be built on Linux (or Windows using WSL). Follow the instructions below to set up the build environment.

> **Note:** These instructions assume a Debian-based system such as Ubuntu. For other distributions, adapt the package manager commands and package names accordingly.

### 1. Clone the repository

Clone the repo to your local machine:

```bash
git clone https://github.com/TheOnlyZac/sly1
cd sly1
```

### 2. Extract your game's ELF file

To build the project, you will need to extract the original ELF file from your own legally obtained copy of the game. Mount the disc on your PC and copy the file `SCUS_971.98` from your disc to the `disc` directory of this project.

### 3. Setup Python environment

Install Python 3.9 or higher, pip and venv:

```bash
sudo apt install python3 python3-pip python3-venv
```

Create a Python environment for the project:

```bash
python3 -m venv env
```

Activate the environment:

```bash
source env/bin/activate
```

Then install the required Python packages:

```bash
pip3 install -U -r requirements.txt
```

### 4. Setup build environment

Install 32 bit MIPS assembler and Wine:

```bash
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install binutils-mips-linux-gnu wine32
```

> **Note:** For a lighter and faster alternative to Wine, download [`wibo-i686`](https://github.com/decompals/wibo/releases/) to the `tools` directory.

Install Ninja build system:

```bash
sudo apt install ninja-build
```

Setup the compiler using the provided script:

```bash
./scripts/setup_prodg_linux.sh
```

### 5. Configure and build the project

Run the configure script and the build with ninja:

```bash
python3 configure.py
ninja
```

The default behavior is to split the binary using Splat, build the object files (inserting the split assembly in place of non-matching functions), link the matching executable, and confirm that the checksum of the built executable matches the original.

You can alter the behavior by passing any of the following arguments to  `configure.py`:

* `--clean` - Delete any existing build files and configure the project.
* `--clean-only` - Delete any existing build files **without** configuring the project.
* `--skip-checksum` - Skip the checksum verification step. This is necessary if you are intentionally changing the code, but note that the elf may not boot.
* `--objects` - Builds the object files for matching with objdiff and generates an objdiff config file. Outputs two sets of object files: `obj/target` and `obj/current` (the latter of which will be updated automatically by objdiff as you edit the source code).

## 🎮 Running the Game

Running the compiled executable requires [PCSX2 2.0](https://pcsx2.net/). You must have your own copy of the original game and the BIOS from your own PS2. They are not included in this repo and we cannot provide them for you.

Once you have those, and you have built the executable `SCUS_971.98`, you can run it using one of three methods:

### Method 1: Autorun script

The `run.sh` script in the `scripts` directory will run the last successful build in the PCSX2 emulator. It will automatically detect PCSX2 installed via package manager, Flatpak, AppImage, or XDG Desktop entries in that order and use the first ISO found in the `disc` directory to load assets.

Optionally, you can specify what ISO file to use:

```bash
./scripts/run.sh /path/to/GameBackup.iso
```

To detect the PCSX2 AppImage, it must be placed in the `tools` directory, or be "Installed" via an AppImage manager utility.

### Method 2: Run from PCSX2 CLI

To boot the elf in PCSX2 from the command line, use the following command:

```bash
pcsx2 -elf "./out/SCUS_971.98" "/path/to/GameBackup.iso"
```

* Replace `pcsx2` with the path to your PCSX2 executable if not found automatically:
  * <b>AppImage:</b> Use the path to the `.appimage` file.
  * <b>Flatpak:</b> Grant PCSX2 access to your home directory with `flatpak override --user net.pcsx2.PCSX2 --filesystem=home` or a specific directory using `--filesystem=/path/to/files`. Then use `flatpak run net.pcsx2.PCSX2` as the executable. Relative paths to the ELF and ISO files will not work, only full system paths.
  * <b>Windows:</b> Use the path to `pcsx2.exe`.
* The `-elf` parameter specifies the path to the `SCUS_971.98` you built from this project. Replace the example path if necessary. The emulator will use this ELF to boot the game.
* The last argument is the path to your game ISO. Replace the example path with the path to a backup of your own game disc. This is where the emulator will load assets from.

### Method 3: Run from PCSX2 GUI

1. In your PCSX2 games folder, make an alias (Linux) or symbolic link (Windows) called `SCUS_971.98.elf`, which points to the `out/SCUS_971.98` file built by this project.
    * Note: The alias/symlink must point to `out/SCUS_971.98`, not `out/SCUS_971.98.elf`.
2. The alias/symlink will be recognized as a game in PCSX2. Right click on it, then click `Properties... > Disc Path > Browse` and select the ISO of your game backup.
3. Click "Close" and boot the game as normal.

You only have to make the alias/symlink once, and it will update every time you build the project.

## 📁 Project Structure

The project files are sorted into the following directories. Many of them have their own readme with more info about what they contain.

* `include` - Header files for the game engine.
* `src` - The decompiled source code.
  * All of the code for the game engine is in `src/P2`.
  * Code for the game's scripting engine is in `src/P2/splice`.
* `config` - Config files for Splat (binary splitting tool).
* `scripts` - Utility scripts for setting up the build environment.
* `docs` - Documentation and instructions for contributing.
* `tools` - Utilities for function matching.
* `reference` - Reference files for functions and data structures.

When you build the executable, the following directories will be created.

* `asm` - Disassembled assembly code from the elf.
* `assets`- Binary data extracted from the elf.
* `obj` - Compiled object files.
* `out` - Compiled executables.

## ❓ Frequently Asked Questions

### What is a decompilation?

When the developers created the game, they wrote source code and compiled it to assembly code that can run on the PS2. A decompilation involves reverse-engineering the assembly code to produce new, original code that compiles to the same assembly. This process leaves us with source code that is similar to and behaves the same as the source code (though not necessarily identical), which helps us understand what the programmers were thinking when they made the game.

### How do you decompile the code?

We use a tool called [Splat](https://github.com/ethteck/splat/) to split the binary into assembly files representing each individual function. We then reimplement every function and data structure by writing C++ code that compiles to the same assembly code. We do not copy any code from the original game binary into the decompilation.

### Has this ever been done before?

There are many other decompilation projects, but this was one of the first ones for the PS2. Our inspirations include as the [Super Mario 64 decomp](https://github.com/n64decomp/sm64) for the N64 and the [Breath of the Wild decomp](https://github.com/zeldaret/botw) for the Wii U (the latter being more similar in scope to this project). There is also a Jak & Daxter decomp/PC port called [OpenGOAL](https://github.com/open-goal/jak-project), though that game is 98% GOAL language rather than C/C++.

### Is this a matching decomp?

Yes. This was the first PS2 decompilation project that targeted the PS2 and utilized function matching, before it was even possible to produce a byte-matching executable. We have built a matching elf since July 2024. Our ultimate goal is to match 100% of the game's functions.

### What is Splice?

Splice is the game's scripting engine; it handles things like scripted events, animated cutscenes, and guard spawning by executing scripts stored in the level files. The code for Splice is a distinct subset of the game engine code, which is why it has its own folder and progress percentage.

### How can I help?

If you want to contribute, check out [CONTRIBUTING.md](/docs/CONTRIBUTING.md) and feel free to [join our discord server](https://discord.gg/2GSXcEzPJA)!

## 🩵 Contributors

Thank you to everyone who has volunteered their time to make this project possible!

<a href="https://github.com/theonlyzac/sly1/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=theonlyzac/sly1" />
</a>

<small>Made with [contrib.rocks](https://contrib.rocks).</small>

## ⭐ Star History

<a href="https://star-history.com/#theonlyzac/sly1&Date">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=theonlyzac/sly1&type=Date&theme=dark" />
    <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=theonlyzac/sly1&type=Date" />
    <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=theonlyzac/sly1&type=Date" />
  </picture>
</a>


================================================
FILE: config/checksum.sha1
================================================
57dc305db57932ad3f1122966cdb695d2e62a47a  out/SCUS_971.98


================================================
FILE: config/readme.md
================================================
# Splat Config Files

This directory contains config files for splat, the tool we use to split and disassemble the game binary. The config files are used to tell splat how to split the binary and what to name the output files.

## Files in this directory
- `sly1.yaml` - Main config file for splat. Contains the offsets of each file split in the game binary. Creating new `.c` files involves modifying this file to create a `c` split and then running `python3 configure.py` to generate the new files.
- `symbol_addrs.txt` - Contains the addresses of symbols in the game binary. Used by splat to properly reference functions and variables in the game code when splitting the binary.
- `checksum.sha1` - SHA1 checksum of the original game binary. Used to verify the integrity of the binary after compilation.

## Adding new splits
To add a new source code file to the project, you must add the split to `sly1.yaml`. Here is an example of some file splits:
```yaml
    - [0x1f560, c, P2/brx]
    - [0x1fe70, asm, P2/ac]
    #- [0x, asm, P2/act]
```
- The first line tells Splat to split the binary at offset `0x1f560` and create a new file `P2/brx.c` (if it doesn't exist). It defines a translation unit starting at `0x1f560` and ending at the beginning of the next split. The `.c` file will have INCLUDE_ASM macros for each function in the split.
- The second line tells Splat that the data starting from offset `0x1fe70` is in the translation unit `P2/ac`, but not to create a new `.c` file yet. It will only create `.s` files in the `asm/nonmatchings/` directory for each function in the split.
- The third line is commented out and does nothing, because we know the next translation unit is `P2/act`, but we don't yet know what offset that translation unit starts at. When we find out (by finding the end of the last function in `P2/ac` and the start of the first function in `P2/act`), we can uncomment this line and add the offset.

When splat is run, it will create `.s` assembly files for each non-matching functions in each split in the `asm/nonmatchings/` directory.


================================================
FILE: config/sly1.yaml
================================================
# Splat config for Sly 1 NTSC-U (PS2)
name: Sly Cooper and the Thievius Raccoonus (USA)
sha1: 57dc305db57932ad3f1122966cdb695d2e62a47a

options:
  basename: SCUS_971.98
  target_path: disc/SCUS_971.98
  elf_path: SCUS_971.98
  base_path: ../
  platform: ps2
  compiler: EEGCC

  # Output paths
  asm_path: asm
  src_path: src
  build_path: obj

  # Assembly options
  generate_asm_macros_files: False
  named_regs_for_c_funcs: False
  find_file_boundaries: False
  disasm_unknown: True

  # Rodata options
  rodata_string_guesser_level: 0 # improve string detection
  suggestion_rodata_section_start: True
  pair_rodata_to_text: False
  migrate_rodata_to_functions: True

  # Auto-generate undefined functions and symbols
  create_undefined_funcs_auto: True
  undefined_funcs_auto_path: config/undefined_funcs_auto.txt
  create_undefined_syms_auto: True
  undefined_syms_auto_path: config/undefined_syms_auto.txt

  # Manually defined symvols
  symbol_addrs_path: config/symbol_addrs.txt

  # Splat extensions
  extensions_path: tools/splat_ext

  # ELF sections
  section_order: [".text", ".vutext", ".rodata", ".data", ".bss"]
  auto_link_sections: [".rodata", ".data", ".bss"]

  # Linker script options
  subalign: 8

segments:
  - [0, databin, elf_header]

  - name: main
    type: code
    start: 0x001000
    vram: 0x100000
    bss_size: 0x3B1304
    subsegments:
    - [0x001000, asm, sce/crt0] # starts with 2 nops
    - [0x001178, asm, P2/ps2t/spaprops] # ext should be .ic

    #--------------------------------------------------------
    # Splice sources
    # All .cpp files
    #--------------------------------------------------------
    - [0x13698, cpp, P2/splice/bif] #MARK: P2/splice
    - [0x19d48, cpp, P2/splice/eval]
    - [0x1b328, cpp, P2/splice/frame]
    - [0x1b678, cpp, P2/splice/gc]
    - [0x1be78, cpp, P2/splice/method]
    - [0x1beb8, cpp, P2/splice/pair]
    - [0x1bf98, cpp, P2/splice/proc]
    - [0x1c008, cpp, P2/splice/ref]
    - [0x1ca28, cpp, P2/splice/serialize]
    - [0x1cd28, cpp, P2/splice/sidebag]
    - [0x1cf70, cpp, P2/splice/spliceutils]
    - [0x1d128, cpp, P2/splice/splotheap]
    - [0x1d508, cpp, P2/splice/vecmat]

    #--------------------------------------------------------
    # P2 sources
    # All .c files (but compiled as c++)
    #--------------------------------------------------------
    - [0x1dbb8, c, P2/989snd] #MARK: P2
    - [0x1f560, c, P2/brx]
    - [0x1fe70, c, P2/ac]
    - [0x22228, c, P2/act]
    - [0x23f28, c, P2/actseg]
    - [0x243c0, c, P2/alarm]
    - [0x24dc0, c, P2/alo]
    # Note: Anticrack check for ITM firewall is 0x2c760, maybe it's own TU?
    - [0x2c868, c, P2/aseg]
    - [0x2e3f8, c, P2/asega]
    - [0x30840, c, P2/barrier]
    - [0x30cf0, c, P2/bas]
    - [0x310e8, c, P2/basic]
    - [0x31168, c, P2/bez]
    - [0x31f48, c, P2/binoc]
    - [0x38290, c, P2/bis]
    - [0x395a0, c, P2/bbmark]
    - [0x39ff0, c, P2/blend]
    - [0x3ab70, c, P2/blip]
    - [0x3c4c0, c, P2/bomb]
    - [0x3d988, c, P2/bq]
    - [0x3dcf8, c, P2/break]
    - [0x3efd8, c, P2/bsp]
    - [0x3f7c0, c, P2/button]
    - [0x41790, c, P2/cat]
    - [0x417a8, c, P2/cd]
    - [0x41d90, c, P2/chkpnt]
    - [0x429e8, c, P2/clip]
    - [0x43ed0, c, P2/clock]
    - [0x44140, c, P2/cm]
    - [0x47100, c, P2/cnvo]
    - [0x47340, c, P2/coin]
    - [0x4a398, c, P2/cplcy]
    - [0x4bbd0, c, P2/credit]
    - [0x4c0c0, c, P2/crout]
    - [0x4c550, c, P2/crusher]
    - [0x4e0a8, c, P2/crv]
    - [0x4fe40, c, P2/dart]
    - [0x50740, c, P2/dartgun]
    - [0x514e0, c, P2/dialog]
    - [0x529e0, c, P2/difficulty]
    - [0x53438, c, P2/dl]
    - [0x53810, c, P2/dmas]
    - [0x53e28, c, P2/dysh]
    - [0x54528, c, P2/dzg]
    - [0x559c8, c, P2/emitter]
    - [0x5a680, c, P2/eyes]
    - [0x5aad0, c, P2/fader]
    - [0x5aca0, asm, P2/UNKNOWN1] # Not in the prototype.
    - [0x5af20, c, P2/find]
    - [0x5b8b0, c, P2/flash]
    - [0x5bae0, c, P2/fly]
    - [0x5d178, c, P2/font]
    - [0x5f6a8, c, P2/frm]
    - [0x60678, c, P2/freeze]
    - [0x60f88, c, P2/frzg]
    - [0x61070, c, P2/game]
    - [0x61e80, c, P2/geom]
    - [0x621b8, c, P2/gifs]
    - [0x629c0, c, P2/glbs]
    - [0x63810, c, P2/glob]
    - [0x68d68, c, P2/gomer]
    - [0x69130, c, P2/gs]
    - [0x6ac58, c, P2/hide]
    - [0x6ba18, asm, P2/hideout]
    - [0x6d470, c, P2/hnd]
    - [0x6d4e8, c, P2/ik]
    - [0x6de00, c, P2/jlo]
    - [0x6f0b8, c, P2/joy]
    - [0x70608, c, P2/jt]
    - [0x79008, asm, P2/jp] # Might be something else.
    - [0x7c998, c, P2/jsg]
    - [0x7e248, c, P2/jump]
    - [0x80e90, c, P2/keyhole]
    - [0x81eb0, c, P2/landing]
    - [0x81f68, c, P2/lgn]
    - [0x83c18, c, P2/lo]
    - [0x84cc8, c, P2/light]
    - [0x86358, c, P2/lookat]
    - [0x86758, c, P2/main]
    - [0x86c18, c, P2/mark]
    - [0x894c0, c, P2/mat]
    - [0x8b388, c, P2/mb]
    - [0x8c580, asm, P2/memcard]
    - [0x8e430, c, P2/memory]
    - [0x8e8e0, c, P2/missile]
    - [0x8f410, c, P2/mpeg]
    - [0x90988, c, P2/mrkv]
    - [0x909d8, c, P2/ms]
    - [0x90ef8, c, P2/murray]
    - [0x917e0, c, P2/path]
    - [0x92e70, c, P2/phasemem]
    - [0x92ec0, c, P2/pipe]
    - [0x93068, c, P2/pnt]
    - [0x931a8, c, P2/po]
    - [0x94210, c, P2/prog]
    - [0x94598, asm, P2/prompt]
    - [0x973d8, c, P2/proxy]
    - [0x97938, c, P2/puffer]
    - [0x99980, c, P2/pzo]
    - [0x9bf00, c, P2/rail]
    - [0x9c038, c, P2/rat]
    - [0x9d440, c, P2/rchm]
    - [0x9e410, c, P2/render]
    - [0x9f040, c, P2/rip]
    - [0xa4ae0, c, P2/rog]
    - [0xa8b20, c, P2/rumble]
    - [0xa8fe8, c, P2/rwm]
    - [0xaa8f8, c, P2/sb]
    - [0xaac68, c, P2/screen]
    - [0xafcb0, c, P2/sensor]
    - [0xb2ac8, c, P2/shadow]
    - [0xb3840, c, P2/shape]
    - [0xb3988, c, P2/shd]
    - [0xb5920, c, P2/shdanim]
    - [0xb6cd8, c, P2/sky]
    - [0xb6d80, c, P2/slotheap]
    - [0xb6f50, c, P2/sm]
    - [0xb7ec8, c, P2/smartguard]
    - [0xb8968, c, P2/so]
    - [0xbd760, c, P2/solve]
    - [0xbf068, c, P2/sort]
    - [0xbf1e8, c, P2/sound]
    - [0xc1f30, c, P2/speaker]
    - [0xc20a8, c, P2/spire]
    - [0xc2190, c, P2/splicemap]
    - [0xc24c0, c, P2/spliceobj]
    - [0xc3430, c, P2/sprbuf]
    - [0xc39e8, c, P2/sqtr]
    - [0xc4390, asm, P2/squish] # Might be something else.
    - [0xc5458, c, P2/step]
    - [0xc6f18, c, P2/stepact]
    - [0xc71e0, c, P2/stepcane]
    - [0xc7f48, c, P2/stepguard]
    - [0xcd410, c, P2/stephang]
    - [0xcefb8, c, P2/stephide]
    - [0xd24f0, c, P2/steppipe]
    - [0xd39c8, c, P2/steppower]
    - [0xd41d0, c, P2/steprail]
    - [0xd46f0, c, P2/steprun]
    - [0xd5148, c, P2/stepside]
    - [0xd5848, asm, P2/stepzap]
    - [0xd8100, c, P2/stream]
    - [0xd83a8, c, P2/suv]
    - [0xdc480, c, P2/sw]
    - [0xdece0, c, P2/tail]
    - [0xdf798, c, P2/tank]
    - [0xe0d48, c, P2/target]
    - [0xe0e80, asm, P2/tatk] # Not in the prototype. Related to master thief sprints.
    - [0xe18f8, c, P2/text]
    - [0xe3268, c, P2/thread]
    - [0xe3420, c, P2/tn]
    - [0xe5e38, c, P2/transition]
    - [0xe6378, c, P2/turret]
    - [0xe6e70, c, P2/tv]
    - [0xe98d0, c, P2/ub]
    - [0xea088, c, P2/ui]
    - [0xeac78, c, P2/update]
    - [0xeb408, c, P2/util]
    - [0xec460, asm, P2/vb]
    - [0xee650, c, P2/vec]
    - [0xef318, c, P2/vifs]
    - [0xef900, c, P2/vis]
    - [0xefc60, c, P2/water]
    - [0xf0838, c, P2/waypoint]
    - [0xf0ce8, c, P2/wipe]
    - [0xf1468, c, P2/wm]
    - [0xf3758, c, P2/wr]
    - [0xf49f8, c, P2/xform]
    - [0xf5f70, c, P2/zap]

    ## Segments in prototype confirmed not present in release:
    # P2/cycle.c - some kind of wheeled vehicle
    # P2/dsp.c - unknown.
    # P2/hg.c - hang glider
    # P2/stepski.c - skiing
    # P2/map2d.c - unknown
    # P2/menu - debug menu
    # P2/vife.c - vif encoder
    # P2/wibu_ee.c - wibukey encryption
    # P2/rope.c - unknown
    # P2/sc.c - unknown
    # P2/mouthgame.c - unknown

    #--------------------------------------------------------
    # Libs
    # TODO: Verify start address.
    #--------------------------------------------------------
    - [0xF69C0, asm, sce/libs] # #MARK: libs
    #- [0xF76F8, asm, sce/rand]
    #- [0xF7738, asm]

    #--------------------------------------------------------
    # Vutext
    #--------------------------------------------------------
    - [0x112E10, textbin, vutext] #MARK: vutext

    #--------------------------------------------------------
    # Rodata (read-only data)
    #--------------------------------------------------------
    - [0x118380, rodata] #MARK: rodata
    # - [0x1225a0, .rodata, P2/cm] # todo causes errors
    - [0x141000, rodata] # todo
    - [0x149FE0, .rodata, P2/splice/bif]
    - [0x14A200, rodata] #todo: remove line and uncomment next for RefEvalAssert
    # - [0x14A200, .rodata, P2/splice/eval]
    - [0x14A2F0, .rodata, P2/splice/ref]
    - [0x14A3A0, .rodata, P2/splice/serialize]
    - [0x14A428, rodata] #, P2/989snd]
    - [0x14A870, rodata]
    #- [0x14AE20, .rodata, P2/cd]
    - [0x14afe0, .rodata, P2/dart]
    - [0x14aff8, rodata] # P2/dartgun Alignment issue, this should be 0x14b000.
    - [0x14B0E0, .rodata, P2/dmas]
    - [0x14B0F8, rodata]
    - [0x14c1e8, .rodata, P2/main]
    - [0x14c258, rodata]
    - [0x14f600, .rodata, P2/ub]
    - [0x14f670, .rodata, P2/ui]
    - [0x14f6d0, rodata]
    #- [0x14f7d0, .rodata, P2/wm]
    #- [0x14f840, .rodata, P2/wr]
    #- [0x14f860, .rodata, P2/xform]

    #--------------------------------------------------------
    # Data (variable data)
    #--------------------------------------------------------
    - [0x151580, data] #MARK: data
    #- [0x, data, P2/splice/bif]
    #- [0x, data, P2/splice/eval]
    #- [0x, data, P2/splice/frame]
    - [0x15af38, data, P2/splice/gc]
    #- [0x, data, P2/splice/pair]
    #- [0x, data, P2/splice/serialize]
    #- [0x, data, P2/splice/sidebag]
    #- [0x, data, P2/splice/spliceutils]
    - [0x15d250, data, P2/splice/splotheap]
    - [0x15d2f0, data, P2/splice/vecmat]
    - [0x15d340, .data, P2/989snd]
    - [0x161e60, data, P2/act]
    - [0x161e70, data, P2/alo]
    - [0x162090, data, P2/binoc]
    #- [0x162314, data, P2/blip] # TODO: Alignment issue.
    - [0x162320, data, P2/bomb]
    - [0x162390, data, P2/bsp]
    #- [0x1623ec, data, P2/cd] # TODO: Alignment issue.
    - [0x162420, data, P2/chkpnt]
    - [0x162850, .data, P2/clock]
    - [0x162880, data, P2/cm]
    - [0x1629a0, data, P2/coin]
    - [0x162bf0, data, P2/cplcy]
    #- [0x, data, P2/credit]
    #- [0x, data, P2/crout]
    #- [0x, data, P2/crusher]
    #- [0x, data, P2/crv]
    - [0x162cc8, data, P2/dart]
    - [0x162ce0, data, P2/dartgun]
    - [0x162d08, data, P2/dialog]
    - [0x162d40, data, P2/difficulty]
    #- [0x162f14, data, P2/dmas] # TODO: Alignment issue.
    - [0x162f30, data, P2/dysh]
    - [0x162f70, data, P2/emitter]
    - [0x163180, data, P2/fly]
    - [0x163250, data, P2/font]
    #- [0x, data, P2/frm]
    #- [0x, data, P2/freeze]
    #- [0x, data, P2/frzg]
    - [0x1633c0, data, P2/game]
    #- [0x1633d8, data]

    #- [0x, data, P2/geom]
    #- [0x, data, P2/gifs]
    #- [0x, data, P2/glbs]
    #- [0x, data, P2/glob]
    #- [0x, data, P2/gomer]
    #- [0x, data, P2/gs]
    #- [0x, data, P2/hide]
    #- [0x, data, P2/hnd]
    #- [0x, data, P2/ik]
    #- [0x, data, P2/jlo]
    - [0x163a30, data, P2/joy]
    - [0x163e10, data, P2/jt]
    #- [0x163e40, data] # TBD

    #- [0x, data, P2/jp]
    #- [0x164e34, data, P2/jsg] # TODO: Alignment issue.
    - [0x164e50, data, P2/jump]
    - [0x165098, data, P2/keyhole]
    - [0x1650b0, data, P2/lgn]
    - [0x165260, data, P2/light]
    - [0x165770, data, P2/lookat]
    - [0x1657a8, .data, P2/main]
    - [0x165840, data, P2/mark]
    - [0x165910, data, P2/mb]
    - [0x165a40, data, P2/memcard]
    #- [0x16a9a4, data, P2/memory] # TODO: Alignment issue.
    - [0x16a9b0, data, P2/missile]
    - [0x16a9c0, data, P2/mpeg]
    - [0x16ab50, data, P2/ms]
    - [0x16ab60, data, P2/murray]
    - [0x16ab78, data, P2/path]
    #- [0x16aba4, data, P2/phasemem] # TODO: Alignment issue.
    - [0x16aba8, data, P2/pipe]
    - [0x16abc0, data, P2/po]
    - [0x16acd8, data, P2/prompt]
    - [0x16b710, data, P2/puffer]
    - [0x16b910, data, P2/pzo]
    - [0x16bb90, data, P2/rat]
    - [0x16bbd0, data, P2/rchm]
    - [0x16bbf0, data, P2/render]
    - [0x16c530, data, P2/rip]
    - [0x16c778, data, P2/rog]
    #- [0x16d3dc, data, P2/rumble] # TODO: Alignment issue.
    #- [0x, data, P2/rwm]
    #- [0x, data, P2/screen]
    - [0x1754b8, data, P2/sensor]
    - [0x1754f0, data, P2/shadow]
    - [0x1754f8, data, P2/shd]
    #- [0x, data, P2/shdanim]
    #- [0x, data, P2/sky]
    #- [0x, data, P2/sm]
    #- [0x, data, P2/smartguard]
    #- [0x, data, P2/so]
    #- [0x, data, P2/solve]
    #- [0x, data, P2/sort]
    - [0x175720, data, P2/sound]
    - [0x1758f0, data, P2/sprbuf]
    - [0x175998, data, P2/sqtr]
    #- [0x, data, P2/squish]
    #- [0x, data, P2/step]
    #- [0x, data, P2/stepact]
    #- [0x, data, P2/stepcane]
    #- [0x, data, P2/stepguard]
    #- [0x, data, P2/stephang]
    #- [0x, data, P2/stephide]
    #- [0x, data, P2/steppipe]
    #- [0x, data, P2/steppower]
    - [0x175f90, data, P2/steprail]
    - [0x175fa0, data, P2/steprun]
    - [0x175fc0, data, P2/stepzap]
    - [0x1761d0, data, P2/suv]
    - [0x176630, data, P2/sw]
    - [0x176730, data, P2/tail]
    - [0x176740, data, P2/tank]
    - [0x1768d0, data, P2/target]
    - [0x1768e0, data, P2/tatk]
    - [0x176940, data, P2/text]
    - [0x176958, data, P2/thread]
    - [0x176970, data, P2/tn]
    - [0x176af0, data, P2/transition]
    - [0x176b28, data, P2/turret]
    - [0x176b50, data, P2/tv]
    - [0x176b60, data, P2/ub]
    - [0x176bc0, data, P2/ui]
    - [0x176c18, data, P2/update]
    - [0x176c40, data, P2/util]
    - [0x176c70, data, P2/vb]
    - [0x176dd0, data, P2/vifs]
    - [0x176e10, data, P2/waypoint]
    - [0x176f80, data, P2/wipe]
    - [0x176fc0, data, P2/wm]
    - [0x177680, databin]

    ## Files with seemingly no data;
    # - P2/brx
    # - P2/ac
    # - P2/actseg
    # - P2/alarm
    # - P2/aseg
    # - P2/asega
    # - P2/barrier
    # - P2/bas
    # - P2/basic
    # - P2/bbmark
    # - P2/bez
    # - P2/bis
    # - P2/blend
    # - P2/bq
    # - P2/break
    # - P2/button
    # - P2/cat
    # - P2/clip
    # - P2/cnvo
    # - P2/dl
    # - P2/dsp
    # - P2/dzg
    # - P2/eyes
    # - P2/fader
    # - P2/UNKNOWN1
    # - P2/find
    # - P2/flash
    # - P2/landing
    # - P2/lo
    # - P2/mat
    # - P2/mrkv
    # - P2/pnt
    # - P2/prog
    # - P2/proxy
    # - P2/rail
    # - P2/shape
    # - P2/slotheap
    # - P2/speaker
    # - P2/splicemap
    # - P2/spliceobj
    # - P2/stepside
    # - P2/stream
    # - P2/vec
    # - P2/vis
    # - P2/water
    # - P2/xform
    # - P2/zap

  - [0x1A1C70, databin]
  - [0x1A20D0]


================================================
FILE: config/sly1_may19.yaml
================================================
name: Sly Cooper May 19 2002 Prototype
sha1: 3e5fdf0c479a0f548e90b05d7fc558cd8e94f5c1

options:
  basename: sly1_may19
  target_path: disc/sly1_may19.elf
  elf_path: SCUS_971.98
  base_path: ../
  platform: ps2
  compiler: GCC

  asm_path: splat/may19/asm
  src_path: splat/may19/src
  build_path: build

  find_file_boundaries: False
  disasm_unknown: True
  named_regs_for_c_funcs: False

  create_undefined_funcs_auto: True
  undefined_funcs_auto_path: config/undefined_funcs_auto_may19.txt

  create_undefined_syms_auto: True
  undefined_syms_auto_path: config/undefined_syms_auto_may19.txt

  symbol_addrs_path: config/symbol_addrs_may19.txt

  extensions_path: tools/splat_ext

  section_order: [".text", ".rodata", ".data", ".bss"]

  auto_all_sections: [".rodata", ".data", ".bss"]

subalign: 0x4

segments:
  - [0, databin, elf_header]

  - name: main
    type: code
    start: 0x001000
    vram: 0x100000
    bss_size: 0x3B1304
    subsegments:
    - [0x001000, asm, sce/crt0] # starts with 2 nops
    - [0x10c0, c, P2/ps2t/spaprops.ic]

    #----------------------------------------
    # Splice sources
    #----------------------------------------
    - [0x11de8, cpp, P2/splice/bif]
    - [0x19d50, cpp, P2/splice/eval]
    - [0x1b8f0, cpp, P2/splice/frame]
    - [0x1bde0, cpp, P2/splice/gc]
    - [0x1c6a8, cpp, P2/splice/method]
    - [0x1c6f8, cpp, P2/splice/pair]
    - [0x1c810, cpp, P2/splice/proc]
    - [0x1c890, cpp, P2/splice/ref]
    - [0x1d468, cpp, P2/splice/serialize]
    - [0x1d810, cpp, P2/splice/sidebag]
    - [0x1dbf8, cpp, P2/splice/spliceutils]
    - [0x1ddc0, cpp, P2/splice/splotheap]
    - [0x1e0f0, cpp, P2/splice/vecmat]

    #----------------------------------------
    # P2 sources
    #----------------------------------------
    - [0x1e888, c, P2/989snd]
    - [0x203e0, c, P2/brx]
    - [0x210a8, c, P2/ac]
    - [0x237c0, c, P2/act]
    - [0x25530, c, P2/actseg]
    - [0x25a08, c, P2/alarm]
    - [0x26548, c, P2/alo]
    - [0x2ecb0, c, P2/aseg]
    - [0x30d90, c, P2/asega]
    - [0x33520, c, P2/barrier]
    - [0x33a20, c, P2/bas]
    - [0x33e88, c, P2/basic]
    - [0x33f18, c, P2/bez]
    - [0x34d60, c, P2/binoc]
    - [0x3b480, c, P2/bis]
    - [0x3c960, c, P2/bbmark]
    - [0x3d468, c, P2/blend]
    - [0x3e098, c, P2/blip]
    - [0x3fd58, c, P2/bomb]
    - [0x40fc0, c, P2/bone]
    - [0x41278, c, P2/bq]
    - [0x41608, c, P2/break]
    - [0x42978, c, P2/bsp]
    - [0x43190, c, P2/button]
    - [0x45630, c, P2/cat]
    - [0x460e8, c, P2/can]
    - [0x46e10, c, P2/cd]
    - [0x47388, c, P2/chkpnt]
    - [0x47f48, c, P2/clip]
    - [0x49410, c, P2/clock]
    - [0x496c8, c, P2/cm]
    - [0x4cb58, c, P2/cnvo]
    - [0x4ce48, c, P2/coin]
    - [0x4f808, c, P2/cplcy]
    - [0x51578, c, P2/credit]
    - [0x51ac8, c, P2/crout]
    - [0x51f58, c, P2/crusher]
    - [0x52a50, c, P2/crv]
    - [0x54be8, c, P2/cycle]
    - [0x56770, c, P2/dart]
    - [0x571d8, c, P2/dartgun]
    - [0x58158, c, P2/dialog]
    - [0x595b0, c, P2/difficulty]
    - [0x59cf8, c, P2/dl]
    - [0x5a150, c, P2/dmas]
    - [0x5a838, c, P2/dsp]
    - [0x5ac98, c, P2/dysh]
    - [0x5b538, c, P2/dzg]
    - [0x5cb88, c, P2/emitter]
    - [0x62108, c, P2/eyes]
    - [0x625d0, c, P2/fader]
    - [0x627e0, c, P2/find]
    - [0x631e8, c, P2/flash]
    - [0x63468, c, P2/fly]
    - [0x64dd8, c, P2/font]
    - [0x677b8, c, P2/frm]
    - [0x68a30, c, P2/freeze]
    - [0x69480, c, P2/frzg]
    - [0x69590, c, P2/game]
    - [0x6a3f8, c, P2/geom]
    - [0x6a770, c, P2/gifs]
    - [0x6afd8, c, P2/glbs]
    - [0x6bff8, c, P2/glob]
    - [0x720f8, c, P2/gomer]
    - [0x729d0, c, P2/gs]
    - [0x748f8, c, P2/hg]
    - [0x75550, c, P2/hide]
    - [0x764a8, c, P2/hnd]
    - [0x76518, c, P2/ik]
    - [0x76e90, c, P2/jack]
    - [0x7b0d0, c, P2/jlo]
    - [0x7c478, c, P2/joy]
    - [0x7da08, c, P2/jt]
    - [0x866e8, c, P2/jp]
    - [0x880f8, c, P2/jsg]
    - [0x89630, c, P2/jump]
    - [0x8c068, c, P2/keyhole]
    - [0x8d170, c, P2/landing]
    - [0x8d250, c, P2/lgn]
    - [0x8fcd8, c, P2/lo]
    - [0x910d8, c, P2/light]
    - [0x92c48, c, P2/lookat]
    - [0x93028, c, P2/main]
    - [0x93b88, c, P2/map2d]
    - [0x93c78, c, P2/mark]
    - [0x96598, c, P2/mat]
    - [0x98840, c, P2/mecha]
    - [0x99c70, c, P2/mb]
    - [0x9aec0, c, P2/memcard]
    - [0x9aec8, c, P2/memory]
    - [0x9b608, c, P2/menu]
    - [0x9f7f0, c, P2/missile]
    - [0xa0770, c, P2/mouthgame]
    - [0xa1208, c, P2/mpeg]
    - [0xa2838, c, P2/mrkv]
    - [0xa2898, c, P2/ms]
    - [0xa2e00, c, P2/murray]
    - [0xa3410, c, P2/path]
    - [0xa4dd0, c, P2/phasemem]
    - [0xa4e28, c, P2/pipe]
    - [0xa4fc0, c, P2/pnt]
    - [0xa50d8, c, P2/po]
    - [0xa5c08, c, P2/prog]
    - [0xa6020, c, P2/prompt]
    - [0xa7750, c, P2/proxy]
    - [0xa7da0, c, P2/puffer]
    - [0xaa248, c, P2/pzo]
    - [0xac6e0, c, P2/rail]
    - [0xac7c0, c, P2/rat]
    - [0xade58, c, P2/rchm]
    - [0xaf900, c, P2/render]
    - [0xb0890, c, P2/rip]
    - [0xb69e0, c, P2/rog]
    - [0xbb3c0, c, P2/rope]
    - [0xbbc78, c, P2/rumble]
    - [0xbc000, c, P2/rwm]
    - [0xbd618, c, P2/sampler]
    - [0xbd970, c, P2/sc]
    - [0xbe370, c, P2/screen]
    - [0xc2d18, c, P2/sensor]
    - [0xc6018, c, P2/shadow]
    - [0xc6f08, c, P2/shape]
    - [0xc7190, c, P2/shd]
    - [0xc95e0, c, P2/shdanim]
    - [0xca988, c, P2/sky]
    - [0xcaa28, c, P2/slotheap]
    - [0xcac48, c, P2/sm]
    - [0xcbd98, c, P2/smartguard]
    - [0xcc968, c, P2/so]
    - [0xd1af8, c, P2/solve]
    - [0xd3580, c, P2/sort]
    - [0xd3710, c, P2/sound]
    - [0xd6570, c, P2/speaker]
    - [0xd6770, c, P2/spire]
    - [0xd6850, c, P2/splicemap]
    - [0xd6df8, c, P2/spliceobj]
    - [0xd8050, c, P2/sprbuf]
    - [0xd8640, c, P2/sqtr]
    - [0xd9060, c, P2/squish]
    - [0xd97a0, c, P2/step]
    - [0xdb4c0, c, P2/stepact]
    - [0xdb798, c, P2/stepcane]
    - [0xdc540, c, P2/stepguard]
    - [0xe1cf8, c, P2/stephang]
    - [0xe3838, c, P2/stephide]
    - [0xe5eb0, c, P2/steppipe]
    - [0xe7110, c, P2/steppower]
    - [0xe7628, c, P2/steprun]
    - [0xe8188, c, P2/stepside]
    - [0xe88b8, c, P2/stepski]
    - [0xe9e30, c, P2/stepzap]
    - [0xec048, c, P2/stream]
    - [0xec360, c, P2/suv]
    - [0xf0788, c, P2/sw]
    - [0xf32e8, c, P2/tail]
    - [0xf3e28, c, P2/tank]
    - [0xf5940, c, P2/target]
    - [0xf5b88, c, P2/text]
    - [0xf78b8, c, P2/thread]
    - [0xf7b38, c, P2/tn]
    - [0xfa030, c, P2/transition]
    - [0xfa758, c, P2/turret]
    - [0xfb1b0, c, P2/tv]
    - [0xfdec8, c, P2/ub]
    - [0xff688, c, P2/ui]
    - [0x1005b0, c, P2/update]
    - [0x100ef0, c, P2/util]
    - [0x102000, c, P2/vec]
    - [0x102cc8, c, P2/vife]
    - [0x10a658, c, P2/vifs]
    - [0x10ac98, c, P2/vis]
    - [0x10b070, c, P2/water]
    - [0x10be78, c, P2/waypoint]
    - [0x10c398, c, P2/wibu_ee]
    - [0x10c4e8, c, P2/wipe]
    - [0x10cd18, c, P2/wm]
    - [0x10ee10, c, P2/wr]
    - [0x110338, c, P2/xform]
    - [0x111da0, c, P2/zap]

    #----------------------------------------

    - [0x113e00, data]

    - [0x12e900, bin, vutext]

    - [0x192d00, rodata]

  - [0x1a1f80, databin]
  - [0xBC8E6D]


================================================
FILE: config/symbol_addrs.txt
================================================

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// MISC/UNKNOWN
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_start = 0x100008; // type:func
_exit = 0x1000B8; // type:func

_gpReg = 0x2832F0;

g_chzCiphertext = 0x2483b8; // size:0x9
g_chzThePasswordIs = 0x24a848; // size:0x14

//g_rng = 0x276680; // size:0x5c
//g_prng = 0x27696c; // size:0x4

// start of .vutext section
D_00211E10 = 0x211E10; // size:0x4


D_00270458 = 0x270458; // size:0x4
SMP_00274f78 = 0x274f78; // size:0xC

////////////////////////////////////////////////////////////////
// ps2t/spaprops.ic
////////////////////////////////////////////////////////////////
BuildEopids__Fv = 0x109488; // type:func


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// P2 ENGINE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////
// P2/splice/bif.cpp
////////////////////////////////////////////////////////////////
RefOpAdd__FiP4CRefP6CFrame      = 0x112698; // type:func
RefOpSub__FiP4CRefP6CFrame      = 0x112968; // type:func
RefOpMult__FiP4CRefP6CFrame     = 0x112C38; // type:func
RefOpDiv__FiP4CRefP6CFrame      = 0x113240; // type:func
RefOpPrint__FiP4CRefP6CFrame    = 0x113730; // type:func
RefOpPrintFrame__FiP4CRefP6CFrame = 0x113780; // type:func
RefOpPrintSidebag__FiP4CRefP6CFrame = 0x1137D0; // type:func
RefOpIntEqual__FiP4CRefP6CFrame = 0x113820; // type:func
RefCmp__FP4CRef4CMPK            = 0x113888; // type:func
RefOpL__FiP4CRefP6CFrame        = 0x1139E8; // type:func
RefOpLE__FiP4CRefP6CFrame       = 0x113A18; // type:func
RefOpG__FiP4CRefP6CFrame        = 0x113A48; // type:func
RefOpGE__FiP4CRefP6CFrame       = 0x113A78; // type:func
RefOpEqv__FiP4CRefP6CFrame      = 0x113AA8; // type:func
RefEqualHelper__FP4CRefT0       = 0x113B60; // type:func
RefOpEqual__FiP4CRefP6CFrame    = 0x113E48; // type:func
RefOpIsBoolean__FiP4CRefP6CFrame = 0x113E78; // type:func
RefOpIsNum__FiP4CRefP6CFrame    = 0x113EE0; // type:func
RefOpIsFloat__FiP4CRefP6CFrame  = 0x113F48; // type:func
RefOpIsInteger__FiP4CRefP6CFrame = 0x113FB0; // type:func
RefOpIsSymbol__FiP4CRefP6CFrame = 0x114018; // type:func
RefOpIsVector__FiP4CRefP6CFrame = 0x114080; // type:func
RefOpIsMatrix__FiP4CRefP6CFrame = 0x1140E8; // type:func
RefOpIsClq__FiP4CRefP6CFrame    = 0x114150; // type:func
RefOpIsLm__FiP4CRefP6CFrame     = 0x1141B8; // type:func
RefOpIsSmp__FiP4CRefP6CFrame    = 0x114220; // type:func
RefOpIsList__FiP4CRefP6CFrame   = 0x114288; // type:func
RefOpIsNull__FiP4CRefP6CFrame   = 0x114300; // type:func
RefOpIsObject__FiP4CRefP6CFrame = 0x114360; // type:func
RefOpIsNullObj__FiP4CRefP6CFrame = 0x1143C8; // type:func
RefOpIsMethod__FiP4CRefP6CFrame = 0x114438; // type:func
RefOpIsProcedure__FiP4CRefP6CFrame = 0x1144A0; // type:func
RefOpAreNear__FiP4CRefP6CFrame  = 0x114518; // type:func
RefOpNot__FiP4CRefP6CFrame      = 0x1145C8; // type:func
RefOpCons__FiP4CRefP6CFrame     = 0x114638; // type:func
RefOpCar__FiP4CRefP6CFrame      = 0x1146E0; // type:func
RefOpCdr__FiP4CRefP6CFrame      = 0x114740; // type:func
RefOpSetCadr__FiP4CRefP6CFrame4BIFK = 0x1147B8; // type:func
RefOpSetCar__FiP4CRefP6CFrame   = 0x114858; // type:func
RefOpSetCdr__FiP4CRefP6CFrame   = 0x114888; // type:func
RefOpLength__FiP4CRefP6CFrame   = 0x1148B8; // type:func
RefOpNth__FiP4CRefP6CFrame      = 0x114950; // type:func
RefOpIsMember__FiP4CRefP6CFrame = 0x1149F0; // type:func
RefOpList__FiP4CRefP6CFrame     = 0x114B80; // type:func
RefOpAppend__FiP4CRefP6CFrame   = 0x114BB0; // type:func
RefOpMap__FiP4CRefP6CFrame      = 0x114D18; // type:func
RefOpFilter__FiP4CRefP6CFrame   = 0x114F48; // type:func
RefOpForEach__FiP4CRefP6CFrame  = 0x1151C0; // type:func
RefOpEval__FiP4CRefP6CFrame     = 0x115398; // type:func
RefOpVector__FiP4CRefP6CFrame   = 0x115440; // type:func
RefOpMatrix__FiP4CRefP6CFrame   = 0x115510; // type:func
RefOpSetMusicRegister__FiP4CRefP6CFrame = 0x1156B0; // type:func
RefOpClq__FiP4CRefP6CFrame      = 0x115710; // type:func
RefOpLm__FiP4CRefP6CFrame       = 0x1157E0; // type:func
RefOpSmp__FiP4CRefP6CFrame      = 0x1158B8; // type:func
RefOpGetElement__FiP4CRefP6CFrame = 0x1159B8; // type:func
RefOpRandomSeed__FiP4CRefP6CFrame = 0x115B78; // type:func
RefOpRandom__FiP4CRefP6CFrame   = 0x115C00; // type:func
RefUfo__FP4CRef4UFOK            = 0x115CA0; // type:func
RefOpSqrt__FiP4CRefP6CFrame     = 0x115D48; // type:func
RefOpSin__FiP4CRefP6CFrame      = 0x115D78; // type:func
RefOpCos__FiP4CRefP6CFrame      = 0x115DA8; // type:func
RefOpTan__FiP4CRefP6CFrame      = 0x115DD8; // type:func
RefOpAsin__FiP4CRefP6CFrame     = 0x115E08; // type:func
RefOpAcos__FiP4CRefP6CFrame     = 0x115E38; // type:func
RefOpAtan__FiP4CRefP6CFrame     = 0x115E68; // type:func
RefOpRadNormalize__FiP4CRefP6CFrame = 0x115E98; // type:func
RefOpAtan2__FiP4CRefP6CFrame    = 0x115EC8; // type:func
RefOpVectorDotProduct__FiP4CRefP6CFrame = 0x115F70; // type:func
RefOpVectorCrossProduct__FiP4CRefP6CFrame = 0x115FF8; // type:func
RefOpVectorLth__FiP4CRefP6CFrame = 0x116080; // type:func
RefOpVectorDistance__FiP4CRefP6CFrame = 0x116108; // type:func
RefOpVectorDistanceSquared__FiP4CRefP6CFrame = 0x1161F8; // type:func
RefOpVectorNormalize__FiP4CRefP6CFrame = 0x1162D0; // type:func
RefOpVectorProjectNormal__FiP4CRefP6CFrame  = 0x116400; // type:func
RefOpVectorProjectTangent__FiP4CRefP6CFrame = 0x116490; // type:func
RefOpVectorBallisticVelocity__FiP4CRefP6CFrame = 0x116520; // type:func
RefOpVectorRadianNormal__FiP4CRefP6CFrame = 0x116600; // type:func
RefOpMatrixTranspose__FiP4CRefP6CFrame = 0x1166C0; // type:func
RefOpMatrixInvert__FiP4CRefP6CFrame = 0x116740; // type:func
RefOpMatrixCalculateDmat__FiP4CRefP6CFrame = 0x1167C0; // type:func
RefOpMatrixInterpolateRotate__FiP4CRefP6CFrame = 0x116840; // type:func
RefOpMatrixDecomposeToTranslate__FiP4CRefP6CFrame = 0x116978; // type:func
RefOpMatrixDecomposeToRotate__FiP4CRefP6CFrame = 0x1169E8; // type:func
RefOpMatrixDecomposeToEuler__FiP4CRefP6CFrame = 0x116A88; // type:func
RefOpMatrixDecomposeToRadianNormal__FiP4CRefP6CFrame = 0x116B08; // type:func
RefOpMatrixLookAt__FiP4CRefP6CFrame = 0x116BC8; // type:func
RefOpMatrixTiltUpright__FiP4CRefP6CFrame = 0x116C80; // type:func
RefOpClqEvaluate__FiP4CRefP6CFrame = 0x116D20; // type:func
RefOpClqEvaluateLm__FiP4CRefP6CFrame = 0x116DC8; // type:func
RefOpClqFit__FiP4CRefP6CFrame   = 0x116EA8; // type:func
RefOpLmLimit__FiP4CRefP6CFrame  = 0x116FE8; // type:func
RefOpLmCheck__FiP4CRefP6CFrame  = 0x117080; // type:func
RefOpFloor__FiP4CRefP6CFrame    = 0x117118; // type:func
RefOpCeiling__FiP4CRefP6CFrame  = 0x117180; // type:func
RefOpRound__FiP4CRefP6CFrame    = 0x1171F0; // type:func
RefOpTruncate__FiP4CRefP6CFrame = 0x117260; // type:func
RefOpAbs__FiP4CRefP6CFrame      = 0x1172C8; // type:func
RefOpMaximum__FiP4CRefP6CFrame  = 0x117360; // type:func
RefOpMinimum__FiP4CRefP6CFrame  = 0x117478; // type:func
RefOpModulo__FiP4CRefP6CFrame   = 0x117598; // type:func
RefOpCurrentTime__FiP4CRefP6CFrame = 0x117610; // type:func
RefOpScheduleCallback__FiP4CRefP6CFrame = 0x117668; // type:func
RefOpDeferObjectUpdate__FiP4CRefP6CFrame = 0x117880; // type:func
RefOpObjectOption__FiP4CRefP6CFrame4BIFK = 0x117910; // type:func
RefOpAddO__FiP4CRefP6CFrame     = 0x117A30; // type:func
RefOpEnsureO__FiP4CRefP6CFrame  = 0x117A60; // type:func
RefOpSetO__FiP4CRefP6CFrame     = 0x117A90; // type:func
RefOpGetO__FiP4CRefP6CFrame     = 0x117AC0; // type:func
RefPairFromAplo__FiPP2LO        = 0x117AF0; // type:func
RefOpFindObject__FiP4CRefP6CFrame = 0x117BC8; // type:func
RefOpFindObjects__FiP4CRefP6CFrame = 0x117C48; // type:func
RefOpFindNearestObject__FiP4CRefP6CFrame = 0x117D00; // type:func
RefOpFindNearestObjects__FiP4CRefP6CFrame = 0x117D78; // type:func
RefOpFindPlayerObject__FiP4CRefP6CFrame = 0x117E20; // type:func
RefOpFindWorldObject__FiP4CRefP6CFrame = 0x117E78; // type:func
RefOpFindCameraObject__FiP4CRefP6CFrame = 0x117ED0; // type:func
RefOpFindClassObjects__FiP4CRefP6CFrame = 0x117F28; // type:func
RefOpFindObjectsInBoundingBox__FiP4CRefP6CFrame = 0x117FE0; // type:func
RefOpFindObjectsInBoundingSphere__FiP4CRefP6CFrame = 0x1180C0; // type:func
RefOpHitTestObjectsImpl__F4BIFKiP4CRefP6CFrame = 0x118198; // type:func
RefOpHitTestObjects__FiP4CRefP6CFrame = 0x1183B8; // type:func
RefOpHitTestObjectsFirst__FiP4CRefP6CFrame = 0x118458; // type:func
RefOpConvertObjectPosition__FiP4CRefP6CFrame = 0x1184F8; // type:func
RefOpConvertObjectVector__FiP4CRefP6CFrame = 0x118580; // type:func
RefOpConvertObjectMatrix__FiP4CRefP6CFrame = 0x118608; // type:func
RefOpNearClipCenter__FiP4CRefP6CFrame = 0x118698; // type:func
RefOpStartSound__FiP4CRefP6CFrame = 0x118720; // type:func
RefOpStopSound__FiP4CRefP6CFrame = 0x1187E8; // type:func
RefOpStartRumble__FiP4CRefP6CFrame = 0x118850; // type:func
RefOpEmitSmokeCloud__FiP4CRefP6CFrame = 0x1188F0; // type:func
RefOpPredictAnimationEffect__FiP4CRefP6CFrame = 0x118988; // type:func
__8VU_FLOATf                    = 0x118CF0; // type:func
__9VU_VECTORRC6VECTOR           = 0x118D10; // type:func
__as__6VECTORG9VU_VECTOR        = 0x118D20; // type:func
__ml__FG8VU_FLOATG9VU_VECTOR    = 0x118D30; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/eval.cpp
////////////////////////////////////////////////////////////////
RefEvalSymbol__FP5CPairP6CFrame     = 0x118D48; // type:func
RefEvalSet__FP5CPairP6CFrame        = 0x118DB8; // type:func
RefEvalDefine__FP5CPairP6CFrame     = 0x118E80; // type:func
RefEvalAssert__FP5CPairP6CFrame     = 0x118F48; // type:func
RefEvalIf__FP5CPairP6CFrame         = 0x119030; // type:func
RefEvalOr__FP5CPairP6CFrame         = 0x119128; // type:func
RefEvalAnd__FP5CPairP6CFrame        = 0x119218; // type:func
RefEvalCond__FP5CPairP6CFrame       = 0x119310; // type:func
RefEvalCase__FP5CPairP6CFrame       = 0x1194A8; // type:func
RefEvalLet__FP5CPairP6CFrame        = 0x1196C8; // type:func
RefEvalWhile__FP5CPairP6CFrame      = 0x119878; // type:func
RefEvalLambda__FP5CPairP6CFrame     = 0x119970; // type:func
RefEvalLambdaBody__FP5CPairP6CFrame = 0x119A58; // type:func
RefEvalBegin__FP5CPairP6CFrame      = 0x119AF8; // type:func
RefEvalApply__FP5CPairP6CFrame      = 0x119BB0; // type:func
RefEvalImport__FP5CPairP6CFrame     = 0x119FA0; // type:func
RefEval__FP5CPairP6CFrame           = 0x11A080; // type:func

chzSpliceAssert                     = 0x249200; // size:0x10


////////////////////////////////////////////////////////////////
// P2/splice/frame.cpp
////////////////////////////////////////////////////////////////
SetSingleParent__6CFrameP6CFrame = 0x11A328; // type:func
AddParent__6CFrameP6CFrame       = 0x11A338; // type:func
RefAddBinding__6CFrameUiP4CRef   = 0x11A358; // type:func
RefSetBinding__6CFrameUiP4CRef   = 0x11A400; // type:func
FFindBinding__6CFrameUiiP4CRef   = 0x11A498; // type:func
PrefFindBinding__6CFrameUii      = 0x11A4D8; // type:func
CloneTo__6CFrameP6CFrame         = 0x11A5B0; // type:func
PframeNew__Fv                    = 0x11A630; // type:func
DeleteFrame__FP6CFrame           = 0x11A670; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/gc.cpp
////////////////////////////////////////////////////////////////
__3CGc                          = 0x11A678; // type:func
_$_3CGc                         = 0x11A680; // type:func
Startup__3CGc                   = 0x11A6A8; // type:func
Shutdown__3CGc                  = 0x11A6B8; // type:func
AddRootFrame__3CGcP6CFrame      = 0x11A6C0; // type:func
AddRootSidebag__3CGcP8CSidebag  = 0x11A708; // type:func
PushFrame__3CGcP6CFrame         = 0x11A728; // type:func
PframePop__3CGc                 = 0x11A748; // type:func
PushPair__3CGcP5CPair           = 0x11A770; // type:func
PpairPop__3CGc                  = 0x11A790; // type:func
PushProc__3CGcP5CProc           = 0x11A7B8; // type:func
PprocPop__3CGc                  = 0x11A7D8; // type:func
UpdateRecyclable__3CGc          = 0x11A800; // type:func
MarkLiveObjects__3CGc           = 0x11A850; // type:func
Collect__3CGc                   = 0x11AB58; // type:func
gc__static_initialization_and_destruction_0 = 0x11ADF8; // type:func
_GLOBAL_$I$g_gc                 = 0x11AE38; // type:func
_GLOBAL_$D$g_gc                 = 0x11AE58; // type:func

g_gc                            = 0x259F38; // size:0x2314


////////////////////////////////////////////////////////////////
// P2/splice/method.cpp
////////////////////////////////////////////////////////////////
PmethodNew__Fv = 0x11AE78; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/pair.cpp
////////////////////////////////////////////////////////////////
CloneTo__5CPairP5CPairP6CFrame = 0x11AEB8; // type:func
PpairNew__Fv                   = 0x11AF28; // type:func
DeletePair__FP5CPair           = 0x11AF78; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/proc.cpp
////////////////////////////////////////////////////////////////
CloneTo__5CProcP5CProcP6CFrame = 0x11af98; // type:func
PprocNew__Fv                   = 0x11afc8; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/ref.cpp
////////////////////////////////////////////////////////////////
__4CRef = 0x11B008; // type:func
__4CRefRC4CRef = 0x11B018; // type:func
_$_4CRef = 0x11B060; // type:func
__as__4CRefRC4CRef = 0x11B0A8; // type:func
__eq__4CRefRC4CRef = 0x11B0F8; // type:func
CloneTo__4CRefP4CRefP6CFrame = 0x11B258; // type:func
Decref__4CRef = 0x11B418; // type:func
Incref__4CRef = 0x11B4A8; // type:func
SetTag__4CRef4TAGK = 0x11B538; // type:func
SetS32__4CRefi = 0x11B570; // type:func
SetF32__4CReff = 0x11B5B0; // type:func
SetBool__4CRefi = 0x11B5F0; // type:func
SetSymid__4CRefUi = 0x11B640; // type:func
SetBifk__4CRef4BIFK = 0x11B680; // type:func
SetPair__4CRefP5CPair = 0x11B6C0; // type:func
SetProc__4CRefP5CProc = 0x11B700; // type:func
SetVector__4CRefP6VECTOR = 0x11B740; // type:func
SetMatrix__4CRefP7MATRIX4 = 0x11B788; // type:func
SetClq__4CRefP3CLQ = 0x11B7D0; // type:func
SetLm__4CRefP2LM = 0x11B818; // type:func
SetSmp__4CRefP3SMP = 0x11B860; // type:func
SetBasic__4CRefP5BASIC = 0x11B8A8; // type:func
SetMethod__4CRefP7CMethod = 0x11B8E8; // type:func
RefCoerceS32__4CRef = 0x11B928; // type:func
RefCoerceF32__4CRef = 0x11B9A8; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/serialize.cpp
////////////////////////////////////////////////////////////////
PpairSerializeIn__FP18CBinaryInputStream = 0x11BA28; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/sidebag.cpp
////////////////////////////////////////////////////////////////
RefAddBinding__8CSidebagiP4CRef = 0x11BD28; // type:func
RefSetBinding__8CSidebagiP4CRef = 0x11BDD0; // type:func
FFindBinding__8CSidebagiP4CRef  = 0x11BE90; // type:func
CloneTo__8CSidebagP8CSidebag    = 0x11BEE0; // type:func
PsidebagNew__Fv                 = 0x11BF30; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/spliceutils.cpp
////////////////////////////////////////////////////////////////
StartupSplice__Fv = 0x11BF70; // type:func
ShutdownSplice__Fv = 0x11C040; // type:func
spliceutils__static_initialization_and_destruction_0 = 0x11C0A8; // type:func
_GLOBAL_$I$g_splotheapPair = 0x11C0E8; // type:func
_GLOBAL_$D$g_splotheapPair = 0x11C108; // type:func


////////////////////////////////////////////////////////////////
// P2/splice/splotheap.cpp
////////////////////////////////////////////////////////////////
Startup__10CSplotheapii         = 0x11C128; // type:func
Shutdown__10CSplotheap          = 0x11C1D0; // type:func
PvAllocUnsafe__10CSplotheap     = 0x11C1D8; // type:func
PvAllocClear__10CSplotheap      = 0x11C240; // type:func
PsplotLookup__10CSplotheapi     = 0x11C288; // type:func
UpdateRecyclable__10CSplotheap  = 0x11C2A0; // type:func
UnmarkAll__10CSplotheap         = 0x11C2B0; // type:func
FreeGarbage__10CSplotheap       = 0x11C2E8; // type:func
PvFromPsplot__FP5SPLOT          = 0x11C3B8; // type:func
PsplotFromPv__FPv               = 0x11C3C0; // type:func
FIsPvGarbage__FPv               = 0x11C3C8; // type:func
MarkPvAlive__FPv                = 0x11C3F0; // type:func
FUN_0011C418                    = 0x11C418; // type:func
FUN_0011C498                    = 0x11C498; // type:func
FUN_0011C4E8                    = 0x11C4E8; // type:func

g_splotheapPair                 = 0x25C250; // size:0x1C
g_splotheapFrame                = 0x25C270; // size:0x1C
g_splotheapUnk1                 = 0x25C290; // size:0x1C
g_splotheapProc                 = 0x25C2B0; // size:0x1C
g_splotheapMethod               = 0x25C2D0; // size:0x1C


////////////////////////////////////////////////////////////////
// P2/splice/vecmat.cpp
////////////////////////////////////////////////////////////////
PvectorNew__Fv = 0x11c508; // type:func
IncrefVector__FP6VECTOR = 0x11c580; // type:func
DecrefVector__FP6VECTOR = 0x11c5b0; // type:func
junk_0011C610 = 0x11C610; // type:func
PmatrixNew__Fv = 0x11c618; // type:func
IncrefMatrix__FP7MATRIX4 = 0x11c690; // type:func
DecrefMatrix__FP7MATRIX4 = 0x11c6c0; // type:func
DeleteMatrix__FP7MATRIX4 = 0x11c720; // type:func
PclqNew__Fv = 0x11c748; // type:func
IncrefClq__FP3CLQ = 0x11c7c0; // type:func
DecrefClq__FP3CLQ = 0x11c7f0; // type:func
junk_0011C850 = 0x11C850; // type:func
PlmNew__Fv = 0x11c858; // type:func
IncrefLm__FP2LM = 0x11c8d0; // type:func
DecrefLm__FP2LM = 0x11c900; // type:func
junk_0011C960 = 0x11C960; // type:func
PsmpNew__Fv = 0x11c968; // type:func
IncrefSmp__FP3SMP = 0x11c9e0; // type:func
DecrefSmp__FP3SMP = 0x11ca20; // type:func
StartupSpliceStructuredTypeFactories__Fv = 0x11ca90; // type:func
ShutdownSpliceStructuredTypeFactories__Fv = 0x11cbb0; // type:func

_t18CStructTypeFactory1Z6VECTOR$s_cmax  = 0x25C2F0; // size:0x4
_t18CStructTypeFactory1Z7MATRIX4$s_cmax = 0x25C2F4; // size:0x4
_t18CStructTypeFactory1Z3CLQ$s_cmax     = 0x25C2F8; // size:0x4
_t18CStructTypeFactory1Z2LM$s_cmax      = 0x25C2FC; // size:0x4
_t18CStructTypeFactory1Z3SMP$s_cmax     = 0x25C300; // size:0x4

_t18CStructTypeFactory1Z6VECTOR$s_acref  = 0x27B300; // size:0x4
_t18CStructTypeFactory1Z7MATRIX4$s_acref = 0x27B304; // size:0x4
_t18CStructTypeFactory1Z3CLQ$s_acref     = 0x27B308; // size:0x4
_t18CStructTypeFactory1Z2LM$s_acref      = 0x27B30C; // size:0x4
_t18CStructTypeFactory1Z3SMP$s_acref     = 0x27B310; // size:0x4

_t18CStructTypeFactory1Z6VECTOR$s_slotheap  = 0x62C558; // size:0x10
_t18CStructTypeFactory1Z7MATRIX4$s_slotheap = 0x62C568; // size:0x10
_t18CStructTypeFactory1Z3CLQ$s_slotheap     = 0x62C578; // size:0x10
_t18CStructTypeFactory1Z2LM$s_slotheap      = 0x62C588; // size:0x10
_t18CStructTypeFactory1Z3SMP$s_slotheap     = 0x62C598; // size:0x10


////////////////////////////////////////////////////////////////
// P2/989snd.c
////////////////////////////////////////////////////////////////
// Unmangled names were in the header with extern "C"
snd_StartSoundSystem = 0x0011cbb8; //type:func size:632
snd_FlushSoundCommands = 0x0011ce30; //type:func size:556
junk_0x0011d060 = 0x0011d060; //type:func size:24
snd_GotReturns__Fv = 0x0011d078; //type:func size:152
snd_PrepareReturnBuffer__FPUii = 0x0011d110; //type:func size:36
junk_0x0011d138 = 0x0011d138; //type:func size:8
snd_BankLoadByLoc = 0x0011d140; //type:func size:356
snd_BankLoadByLoc_CB = 0x0011d2a8; //type:func size:316
junk_0x0011d3e8 = 0x0011d3e8; //type:func size:56
snd_ResolveBankXREFS = 0x0011d420; //type:func size:44
snd_UnloadBank = 0x0011d450; //type:func size:48
snd_SetMasterVolume = 0x0011d480; //type:func size:52
snd_GetMasterVolume = 0x0011d4b8; //type:func size:40
snd_SetPlaybackMode = 0x0011d4e0; //type:func size:48
junk_0x0011d510 = 0x0011d510; //type:func size:16
snd_SetMixerMode = 0x0011d520; //type:func size:52
snd_SetGroupVoiceRange = 0x0011d558; //type:func size:60
snd_PlaySoundVolPanPMPB = 0x0011d598; //type:func size:60
junk_0x0011d5d8 = 0x0011d5d8; //type:func size:40
snd_StopSound = 0x0011d600; //type:func size:48
junk_0x0011d630 = 0x0011d630; //type:func size:16
snd_PauseSound = 0x0011d640; //type:func size:48
snd_ContinueSound = 0x0011d670; //type:func size:48
junk_0x0011d6a0 = 0x0011d6a0; //type:func size:8
snd_PauseAllSoundsInGroup = 0x0011d6a8; //type:func size:48
snd_ContinueAllSoundsInGroup = 0x0011d6d8; //type:func size:48
snd_SoundIsStillPlaying = 0x0011d708; //type:func size:40
snd_SoundIsStillPlaying_CB = 0x0011d730; //type:func size:48
snd_IsSoundALooper = 0x0011d760; //type:func size:44
junk_0x0011d790 = 0x0011d790; //type:func size:8
snd_SetSoundVolPan = 0x0011d798; //type:func size:60
snd_GetSoundOriginalPitch = 0x0011d7d8; //type:func size:44
junk_0x0011d808 = 0x0011d808; //type:func size:8
snd_SetSoundPitch = 0x0011d810; //type:func size:52
junk_0x0011d848 = 0x0011d848; //type:func size:24
snd_AutoVol = 0x0011d860; //type:func size:60
junk_0x0011d8a0 = 0x0011d8a0; //type:func size:16
snd_SetMIDIRegister = 0x0011d8b0; //type:func size:60
snd_GetMIDIRegister = 0x0011d8f0; //type:func size:44
junk_0x0011d920 = 0x0011d920; //type:func size:8
snd_SetGlobalExcite = 0x0011d928; //type:func size:48
junk_0x0011d958 = 0x0011d958; //type:func size:16
snd_SendIOPCommandAndWait__FiiPc = 0x0011d968; //type:func size:404
snd_SendIOPCommandNoWait__FiiPcPFiUl_vUl = 0x0011db00; //type:func size:724
snd_PostMessage__Fv = 0x0011ddd8; //type:func size:64
snd_SendCurrentBatch__Fv = 0x0011de18; //type:func size:316
snd_InitVAGStreamingEx = 0x0011df58; //type:func size:180
snd_StopAllStreams = 0x0011e010; //type:func size:44
junk_0x0011e040 = 0x0011e040; //type:func size:8
snd_PlayVAGStreamByLoc = 0x0011e048; //type:func size:96
junk_0x0011e0a8 = 0x0011e0a8; //type:func size:8
snd_ContinueVAGStream = 0x0011e0b0; //type:func size:48
snd_IsVAGStreamBuffered_CB = 0x0011e0e0; //type:func size:48
snd_StreamSafeCheckCDIdle = 0x0011e110; //type:func size:40
snd_StreamSafeCdRead = 0x0011e138; //type:func size:188
snd_StreamSafeCdSync = 0x0011e1f8; //type:func size:168
snd_StreamSafeCdBreak = 0x0011e2a0; //type:func size:72
snd_StreamSafeCdGetError = 0x0011e2e8; //type:func size:60
snd_SetReverbType = 0x0011e328; //type:func size:52
snd_SetReverbDepth = 0x0011e360; //type:func size:60
snd_PreAllocReverbWorkArea = 0x0011e3a0; //type:func size:52
junk_0x0011e3d8 = 0x0011e3d8; //type:func size:80
snd_InitMovieSound = 0x0011e428; //type:func size:56
snd_ResetMovieSound = 0x0011e460; //type:func size:36
junk_0x0011e488 = 0x0011e488; //type:func size:16
snd_CloseMovieSound = 0x0011e498; //type:func size:36
snd_StartMovieSound = 0x0011e4c0; //type:func size:56
snd_GetTransStatus = 0x0011e4f8; //type:func size:36
junk_0x0011e520 = 0x0011e520; //type:func size:24
snd_GetDopplerPitchMod = 0x0011e538; //type:func size:36

gCommBusy = 0x0025c340; // size:0x4
gAwaitingInts = 0x0025c344; // size:0x4
gUnkBankLoadError = 0x0025c348; // size:0x4
gStreamingInited = 0x0025c34c; // size:0x4
gCdCallback = 0x0025c350; // size:0x4
gSSRead = 0x0025c354; // size:0x4
gSSReadDone = 0x0025c358; // size:0x4
gLoadingFromFS = 0x0025c35c; // size:0x4
gSndCommandBuffePtr = 0x0025c360; // size:0x8
gCommandBuffeBytesAvail = 0x0025c368; // size:0x8
gSndCommandReturnDefPtr = 0x0025c370; // size:0x8
gReturnValuesPtr = 0x0025c378; // size:0x8
gCommandFillBuffer = 0x0025c380; // size:0x4
gCaching = 0x0025c384; // size:0x4
gLoadBusy = 0x0025c388; // size:0x4
gLoadReturnDef = 0x0025c390; // size:0x10
gLoadCB = 0x0025c3a0; // size:0x4
gLoadUserData = 0x0025c3a8; // size:0x8
gSyncBuffer = 0x0025c3c0; // size:0x40
gSyncSendBuffer = 0x0025c400; // size:0x40
gSyncStringBuffer = 0x0025c440; // size:0x100
gSndCommandBuffer1 = 0x0025c540; // size:0x1000
gSndCommandBuffer2 = 0x0025d540; // size:0x1000
gSndCommandReturnDef1 = 0x0025e540; // size:0x1000
gSndCommandReturnDef2 = 0x0025f540; // size:0x1000
gActualReturnValues1 = 0x00260540; // size:0x420
gActualReturnValues2 = 0x00260980; // size:0x420
gStats = 0x00260dc0; // size:0x20
gLoadReturnValue = 0x00260e00; // size:0x10
gLoadParams = 0x00260e40; // size:0x20
gSLClientData = 0x0027b4c8; // size:0x28
gSLClientLoaderData = 0x027b4f0; // size:0x28


////////////////////////////////////////////////////////////////
// P2/brx.c
////////////////////////////////////////////////////////////////
StartupBrx__Fv = 0x11e560; // type:func
PloNew__F3CIDP2SWP3ALO3OIDi = 0x11E580; // type:func
LoadOptionFromBrx__FPvP5EOPIDP18CBinaryInputStream = 0x11E680; // type:func
LoadOptionsFromBrx__FPvP18CBinaryInputStream = 0x11EC40; // type:func
IploFromStockOid__Fi = 0x11ECA0; // type:func
LoadSwObjectsFromBrx__FP2SWP3ALOP18CBinaryInputStream = 0x11ECB8; // type:func
SetLoDefaults__FP2LO = 0x11EDA8; // type:func

g_aeopid = 0x2505D8;


////////////////////////////////////////////////////////////////
// P2/ac.c
////////////////////////////////////////////////////////////////
FindKey__FfiiiPcPfT5PPv                                = 0x11EE70; // type:func
EvaluateAcp__FP3ACPP3ALOffiP6VECTORT5                  = 0x11EF40; // type:func
GetAcpTimes__FP3ACPPiPPf                               = 0x11EF48; // type:func
EvaluateAcr__FP3ACRP3ALOffiP7MATRIX3P6VECTOR           = 0x11EF60; // type:func
EvaluateAcrEul__FP3ACRP3ALOffiP6VECTORT5               = 0x11EF68; // type:func
GetAcrTimes__FP3ACRPiPPf                               = 0x11EF70; // type:func
EvaluateAcs__FP3ACSP3ALOfiP7MATRIX3                    = 0x11EF88; // type:func
GetAcsTimes__FP3ACSPiPPf                               = 0x11EF90; // type:func
EvaluateAcg__FP3ACGP3ALOffiPfT5                        = 0x11EFA8; // type:func
GetAcgTimes__FP3ACGPiPPf                               = 0x11EFB0; // type:func
LoadAcgbFromBrx__FP4ACGBP18CBinaryInputStream          = 0x11EFC8; // type:func
EvaluateAcgb__FP4ACGBP3ALOffiPfT5                      = 0x11F0C8; // type:func
GetAcgbTimes__FP4ACGBPiPPf                             = 0x11F180; // type:func
LoadAcgbwFromBrx__FP5ACGBWP18CBinaryInputStream        = 0x11F210; // type:func
EvaluateAcgbw__FP5ACGBWP3ALOffiPfT5                    = 0x11F320; // type:func
GetAcgbwTimes__FP5ACGBWPiPPf                           = 0x11F3E8; // type:func
EvaluateAcgl__FP4ACGLP3ALOffiPfT5                      = 0x11F478; // type:func
LoadAcglFromBrx__FP4ACGLP18CBinaryInputStream          = 0x11F568; // type:func
GetAcglTimes__FP4ACGLPiPPf                             = 0x11F620; // type:func
EvaluateApacg__FPP3ACGP3ALOffiP6VECTORN25              = 0x11F6B0; // type:func
LoadApacgFromBrx__FPP3ACGP6VECTORP18CBinaryInputStream = 0x11F798; // type:func
GetApacgTimes__FPP3ACGPiPPf                            = 0x11F850; // type:func
EvaluateAkvb__FiP3KVBffiP6VECTORT5                     = 0x11F9F8; // type:func
LoadAkvbFromBrx__FPiPP3KVBP18CBinaryInputStream        = 0x11FA88; // type:func
GetAkvbTimes__FiP3KVBPiPPf                             = 0x11FB98; // type:func
EvaluateAcpc__FP4ACPCP3ALOffiP6VECTORT5                = 0x11FC20; // type:func
LoadAcpcFromBrx__FP4ACPCP18CBinaryInputStream          = 0x11FC90; // type:func
GetAcpcTimes__FP4ACPCPiPPf                             = 0x11FDB8; // type:func
EvaluateAcpb__FP4ACPBP3ALOffiP6VECTORT5                = 0x11FDD8; // type:func
LoadAcpbFromBrx__FP4ACPBP18CBinaryInputStream          = 0x11FE40; // type:func
GetAcpbTimes__FP4ACPBPiPPf                             = 0x11FED8; // type:func
EvaluateAcrc__FP4ACRCP3ALOffiP7MATRIX3P6VECTOR         = 0x11FF08; // type:func
EvaluateAcrcEul__FP4ACRCP3ALOffiP6VECTORT5             = 0x11FFA8; // type:func
LoadAcrcFromBrx__FP4ACRCP18CBinaryInputStream          = 0x11FFD8; // type:func
GetAcrcTimes__FP4ACRCPiPPf                             = 0x120110; // type:func
EvaluateAcrb__FP4ACRBP3ALOffiP7MATRIX3P6VECTOR         = 0x120130; // type:func
EvaluateAcrbEul__FP4ACRBP3ALOffiP6VECTORT5             = 0x1201D0; // type:func
LoadAcrbFromBrx__FP4ACRBP18CBinaryInputStream          = 0x1201F0; // type:func
GetAcrbTimes__FP4ACRBPiPPf                             = 0x1202C0; // type:func
EvaluateAcsc__FP4ACSCP3ALOfiP7MATRIX3                  = 0x1202F0; // type:func
LoadAcscFromBrx__FP4ACSCP18CBinaryInputStream          = 0x120360; // type:func
GetAcscTimes__FP4ACSCPiPPf                             = 0x120388; // type:func
EvaluateAcsb__FP4ACSBP3ALOfiP7MATRIX3                  = 0x1203A8; // type:func
LoadAcsbFromBrx__FP4ACSBP18CBinaryInputStream          = 0x120418; // type:func
GetAcsbTimes__FP4ACSBPiPPf                             = 0x120440; // type:func
EvaluateAcpbl__FP5ACPBLP3ALOffiP6VECTORT5              = 0x120470; // type:func
EvaluateAcrbl__FP5ACRBLP3ALOffiP7MATRIX3P6VECTOR       = 0x120700; // type:func
EvaluateAcgblt__FP6ACGBLTP3ALOffiPfT5                  = 0x120AA8; // type:func
EvaluateAcgblp__FP6ACGBLPP3ALOffiPfT5                  = 0x120D58; // type:func
PacpNew__F4ACVK                                        = 0x120FB0; // type:func
PacrNew__F4ACVK                                        = 0x121050; // type:func
PacsNew__F4ACVK                                        = 0x1210F0; // type:func
PacgNew__F4ACGK                                        = 0x121160; // type:func


////////////////////////////////////////////////////////////////
// P2/act.c
////////////////////////////////////////////////////////////////
PactNew__FP2SWP3ALOP5VTACT                             = 0x121228; // type:func
PactNewClone__FP3ACTP2SWP3ALO                          = 0x121280; // type:func
CloneAct__FP3ACTT0                                     = 0x1212D8; // type:func
InitAct__FP3ACTP3ALO                                   = 0x121338; // type:func
RetractAct__FP3ACTi                                    = 0x121358; // type:func
GetActPositionGoal__FP3ACTfP6VECTORT2                  = 0x1214B8; // type:func
GetActRotationGoal__FP3ACTfP7MATRIX3P6VECTOR           = 0x121508; // type:func
GetActTwistGoal__FP3ACTPfT1                            = 0x121568; // type:func
GetActScale__FP3ACTP7MATRIX3                           = 0x121580; // type:func
GGetActPoseGoal__FP3ACTi                               = 0x1215A8; // type:func
CalculateActDefaultAck__FP3ACT                         = 0x1215C0; // type:func
SnapAct__FP3ACTi                                       = 0x121648; // type:func
CalculateAloPositionSpring__FP3ALOfP6VECTORN22         = 0x121760; // type:func
ProjectActPosition__FP3ACT                             = 0x1218C0; // type:func
CalculateAloRotationSpring__FP3ALOfP7MATRIX3P6VECTORT3 = 0x121C48; // type:func
ProjectActRotation__FP3ACT                             = 0x121DE0; // type:func
ProjectActPose__FP3ACTi                                = 0x122488; // type:func
PredictAloPosition__FP3ALOfP6VECTORT2                  = 0x122550; // type:func
PredictAloRotation__FP3ALOfP7MATRIX3P6VECTOR           = 0x1225D0; // type:func
AdaptAct__FP3ACT                                       = 0x1226D8; // type:func
InitActval__FP6ACTVALP3ALO                             = 0x122708; // type:func
GetActvalPositionGoal__FP6ACTVALfP6VECTORT2            = 0x1227B0; // type:func
GetActvalRotationGoal__FP6ACTVALfP7MATRIX3P6VECTOR     = 0x1227F0; // type:func
GetActvalTwistGoal__FP6ACTVALPfT1                      = 0x122840; // type:func
GetActvalScale__FP6ACTVALP7MATRIX3                     = 0x122858; // type:func
GGetActvalPoseGoal__FP6ACTVALi                         = 0x122878; // type:func
InitActref__FP6ACTREFP3ALO                             = 0x122890; // type:func
GetActrefPositionGoal__FP6ACTREFfP6VECTORT2            = 0x122920; // type:func
GetActrefRotationGoal__FP6ACTREFfP7MATRIX3P6VECTOR     = 0x122968; // type:func
GetActrefTwistGoal__FP6ACTREFPfT1                      = 0x1229C0; // type:func
GetActrefScale__FP6ACTREFP7MATRIX3                     = 0x1229E0; // type:func
GGetActrefPoseGoal__FP6ACTREFi                         = 0x122A00; // type:func
InitActadj__FP6ACTADJP3ALO                             = 0x122A18; // type:func
GetActadjPositionGoal__FP6ACTADJfP6VECTORT2            = 0x122A80; // type:func
GetActadjRotationGoal__FP6ACTADJfP7MATRIX3P6VECTOR     = 0x122B30; // type:func
GetActadjTwistGoal__FP6ACTADJPfT1                      = 0x122C48; // type:func
GetActadjScale__FP6ACTADJP7MATRIX3                     = 0x122CB0; // type:func
GGetActadjPoseGoal__FP6ACTADJi                         = 0x122D90; // type:func
InitActbank__FP7ACTBANKP3ALO                           = 0x122DA0; // type:func
GetActbankRotationGoal__FP7ACTBANKfP7MATRIX3P6VECTOR   = 0x122DE0; // type:func


////////////////////////////////////////////////////////////////
// P2/actseg.c
////////////////////////////////////////////////////////////////
RetractActseg__FP6ACTSEGi = 0x122F28; // type:func
CloneActseg__FP6ACTSEGT0 = 0x122F88; // type:func
GetActsegPositionGoal__FP6ACTSEGfP6VECTORT2 = 0x122FE0; // type:func
GetActsegRotationGoal__FP6ACTSEGfP7MATRIX3P6VECTOR = 0x123120; // type:func
GetActsegTwistGoal__FP6ACTSEGPfT1 = 0x123270; // type:func
GetActsegScale__FP6ACTSEGP7MATRIX3 = 0x1232E8; // type:func
GGetActsegPoseGoal__FP6ACTSEGi = 0x123358; // type:func


////////////////////////////////////////////////////////////////
// P2/alarm.c
////////////////////////////////////////////////////////////////
BreakAlbrk__FP5ALBRK                          = 0x1233C0; // type:func
SetAlbrkAlarm__FP5ALBRKP5ALARM                = 0x123400; // type:func
InitAlarm__FP5ALARM                           = 0x123408; // type:func
PostAlarmLoad__FP5ALARM                       = 0x123448; // type:func
CloneAlarm__FP5ALARMT0                        = 0x123540; // type:func
UpdateAlarm__FP5ALARMf                        = 0x123578; // type:func
PostAlarmLoadCallbackHookup__FP5ALARM5MSGIDPv = 0x1236C8; // type:func
SetAlarmAlarms__FP5ALARM6ALARMS               = 0x123888; // type:func
TriggerAlarm__FP5ALARM4ALTK                   = 0x123AB0; // type:func
DisableAlarmAlbrk__FP5ALARM                   = 0x123B18; // type:func
EnableAlarmSensors__FP5ALARM                  = 0x123B28; // type:func
DisableAlarmSensors__FP5ALARM                 = 0x123BB0; // type:func
NotifyAlarmSensorsOnTrigger__FP5ALARM         = 0x123C20; // type:func
AddAlarmAlbrk__FP5ALARM3OID                   = 0x123C90; // type:func
AddAlarmSensor__FP5ALARM3OID                  = 0x123CB8; // type:func
AddAlarmStepguard__FP5ALARM3OID               = 0x123CE0; // type:func
SetAlarmRsmg__FP5ALARMi3OIDN22                = 0x123D08; // type:func
FGetAlarmSensorList__FP5ALARMPv               = 0x123D40; // type:func


////////////////////////////////////////////////////////////////
// P2/alo.c
////////////////////////////////////////////////////////////////
FIsZeroV__FP6VECTOR                                        = 0x123DC0; // type:func
FIsZeroW__FP6VECTOR                                        = 0x123E00; // type:func
FIsZeroDv__FP6VECTOR                                       = 0x123E48; // type:func
FIsZeroDw__FP6VECTOR                                       = 0x123E88; // type:func
InitAlo__FP3ALO                                            = 0x123ED0; // type:func
AddAloHierarchy__FP3ALO                                    = 0x124050; // type:func
OnAloAdd__FP3ALO                                           = 0x1240F8; // type:func
RemoveAloHierarchy__FP3ALO                                 = 0x124338; // type:func
OnAloRemove__FP3ALO                                        = 0x1243E0; // type:func
UpdateAloOrig__FP3ALO                                      = 0x124540; // type:func
SetAloParent__FP3ALOT0                                     = 0x1245A8; // type:func
ApplyAloProxy__FP3ALOP5PROXY                               = 0x124868; // type:func
BindAlo__FP3ALO                                            = 0x1249A8; // type:func
PostAloLoad__FP3ALO                                        = 0x124A48; // type:func
PostAloLoadCallback__FP3ALO5MSGIDPv                        = 0x124CC0; // type:func
SnipAloObjects__FP3ALOiP4SNIP                              = 0x124DF8; // type:func
UpdateAloHierarchy__FP3ALOf                                = 0x124EE8; // type:func
UpdateAlo__FP3ALOf                                         = 0x124FC0; // type:func
InvalidateAloLighting__FP3ALO                              = 0x1250C8; // type:func
UpdateAloXfWorld__FP3ALO                                   = 0x125108; // type:func
UpdateAloXfWorldHierarchy__FP3ALO                          = 0x125138; // type:func
PresetAloAccel__FP3ALOf                                    = 0x125438; // type:func
ProjectAloTransform__FP3ALOfi                              = 0x125440; // type:func
PredictAloTransform__FP3ALOT0fP6VECTORP7MATRIX3T3T3        = 0x125750; // type:func
PredictAloTransformAdjust__FP3ALOT0fP6VECTORP7MATRIX3T3T3  = 0x1259D8; // type:func
DupAloRo__FP3ALOP2ROT1                                     = 0x125B70; // type:func
RenderFastShadow__FP3ALOP2CMP2RO                           = 0x125BF0; // type:func
RenderAloAll__FP3ALOP2CMP2RO                               = 0x125C90; // type:func
RenderAloSelf__FP3ALOP2CMP2RO                              = 0x1261C0; // type:func
RenderAloGlobset__FP3ALOP2CMP2RO                           = 0x126270; // type:func
RenderAloLine__FP3ALOP2CMP6VECTORT2ff                      = 0x1268B8; // type:func
SetAloOverrideCel__FP3ALOG4RGBA                            = 0x126A48; // type:func
FUN_00126ab0                                               = 0x126AB0; // type:func
UpdateAloThrob__FP3ALOf                                    = 0x126AC8; // type:func
SetAloBlotContext__FP3ALOP4BLOT                            = 0x126BC0; // type:func
EnsureAloFader__FP3ALO                                     = 0x126C58; // type:func
FadeAloIn__FP3ALOf                                         = 0x126CB8; // type:func
FadeAloOut__FP3ALOf                                        = 0x126D60; // type:func
AdjustAloRtckMat__FP3ALOP2CM4RTCKP6VECTORP7MATRIX4         = 0x126DE8; // type:func
CloneAloHierarchy__FP3ALOT0                                = 0x126F78; // type:func
CloneAlo__FP3ALOT0                                         = 0x127048; // type:func
HandleAloMessage__FP3ALO5MSGIDPv                           = 0x127378; // type:func
TranslateAloToPos__FP3ALOP6VECTOR                          = 0x1273F0; // type:func
junk_00127468                                              = 0x127468; // type:func
RotateAloToMat__FP3ALOP7MATRIX3                            = 0x127478; // type:func
SetAloVelocityVec__FP3ALOP6VECTOR                          = 0x1274F8; // type:func
SetAloVelocityXYZ__FP3ALOfff                               = 0x127558; // type:func
SetAloAngularVelocityVec__FP3ALOP6VECTOR                   = 0x127590; // type:func
SetAloAngularVelocityXYZ__FP3ALOfff                        = 0x1275F0; // type:func
SetAloVelocityLocal__FP3ALOP6VECTOR                        = 0x127628; // type:func
GetAloVelocityLocal__FP3ALOP6VECTOR                        = 0x127678; // type:func
MatchAloOtherObject__FP3ALOT0                              = 0x1276C0; // type:func
CalculateAloMovement__FP3ALOT0P6VECTORN42                  = 0x1278A8; // type:func
CalculateAloTransform__FP3ALOT0iP6VECTORP7MATRIX3T3T3      = 0x127B20; // type:func
CalculateAloTransformAdjust__FP3ALOT0P6VECTORP7MATRIX3T2T2 = 0x127E60; // type:func
ConvertAloPos__FP3ALOT0P6VECTORT2                          = 0x128018; // type:func
ConvertAloVec__FP3ALOT0P6VECTORT2                          = 0x1280C0; // type:func
ConvertAloMat__FP3ALOT0P7MATRIX3T2                         = 0x128150; // type:func
FDrivenAlo__FP3ALO                                         = 0x128230; // type:func
RetractAloDrive__FP3ALO                                    = 0x128278; // type:func
ConvertAloMovement__FP3ALOT0P6VECTORN82                    = 0x128330; // type:func
CalculateAloDrive__FP3ALOP3CLQP2LMffPfN25                  = 0x128598; // type:func
FGetAloChildrenList__FP3ALOPv                              = 0x1288F0; // type:func
PactsegNewAlo__FP3ALO                                      = 0x128998; // type:func
LoadAloFromBrx__FP3ALOP18CBinaryInputStream                = 0x1289C0; // type:func
LoadAloAloxFromBrx__FP3ALOP18CBinaryInputStream            = 0x128C10; // type:func
BindAloAlox__FP3ALO                                        = 0x128DB8; // type:func
AdjustAloRotation__FP3ALOP7MATRIX3P6VECTOR                 = 0x128E88; // type:func
UnadjustAloRotation__FP3ALOP7MATRIX3                       = 0x128FD0; // type:func
SetAloInitialVelocity__FP3ALOP6VECTOR                      = 0x1290B8; // type:func
SetAloInitialAngularVelocity__FP3ALOP6VECTOR               = 0x1290E0; // type:func
PasegdEnsureAlo__FP3ALO                                    = 0x129108; // type:func
SetAloFastShadowRadius__FP3ALOf                            = 0x129170; // type:func
GetAloFastShadowRadius__FP3ALOPf                           = 0x129188; // type:func
SetAloFastShadowDepth__FP3ALOf                             = 0x1291A0; // type:func
GetAloFastShadowDepth__FP3ALOPf                            = 0x1291B8; // type:func
PshadowAloEnsure__FP3ALO                                   = 0x1291D0; // type:func
SetAloCastShadow__FP3ALOi                                  = 0x129228; // type:func
SetAloShadowShader__FP3ALO3OID                             = 0x129288; // type:func
SetAloShadowNearRadius__FP3ALOf                            = 0x1292B8; // type:func
SetAloShadowFarRadius__FP3ALOf                             = 0x1292E8; // type:func
SetAloShadowNearCast__FP3ALOf                              = 0x129318; // type:func
SetAloShadowFarCast__FP3ALOf                               = 0x129348; // type:func
SetAloShadowConeAngle__FP3ALOf                             = 0x129378; // type:func
SetAloShadowFrustrumUp__FP3ALOP6VECTOR                     = 0x1293A8; // type:func
SetAloDynamicShadowObject__FP3ALO3OID                      = 0x1293D8; // type:func
PshadowInferAlo__FP3ALO                                    = 0x129400; // type:func
GetAloCastShadow__FP3ALOPi                                 = 0x129440; // type:func
GetAloShadowShader__FP3ALOP3OID                            = 0x129450; // type:func
GetAloShadowNearRadius__FP3ALOPf                           = 0x129480; // type:func
GetAloShadowFarRadius__FP3ALOPf                            = 0x1294B0; // type:func
GetAloShadowNearCast__FP3ALOPf                             = 0x1294E0; // type:func
GetAloShadowFarCast__FP3ALOPf                              = 0x129510; // type:func
GetAloShadowConeAngle__FP3ALOPf                            = 0x129540; // type:func
GetAloShadowFrustrumUp__FP3ALOP6VECTOR                     = 0x129598; // type:func
GetAloEuler__FP3ALOP6VECTOR                                = 0x1295C8; // type:func
SetAloEuler__FP3ALOP6VECTOR                                = 0x129648; // type:func
EnsureAloActRestore__FP3ALO                                = 0x1296E0; // type:func
EnsureAloActla__FP3ALO                                     = 0x129730; // type:func
RecacheAloActList__FP3ALO                                  = 0x129780; // type:func
InsertAloAct__FP3ALOP3ACT                                  = 0x1299E0; // type:func
ResortAloActList__FP3ALO                                   = 0x129A58; // type:func
PasegaFindAlo__FP3ALO3OID                                  = 0x129B98; // type:func
PsmaFindAlo__FP3ALO3OID                                    = 0x129C20; // type:func
PasegaFindAloNearest__FP3ALO                               = 0x129CA8; // type:func
CreateAloActadj__FP3ALOiPP6ACTADJ                          = 0x129D00; // type:func
FIsAloStatic__FP3ALO                                       = 0x129D70; // type:func
ResolveAlo__FP3ALO                                         = 0x129DF8; // type:func
SetAloPositionSpring__FP3ALOf                              = 0x129E10; // type:func
SetAloPositionSpringDetail__FP3ALOP3CLQ                    = 0x129E88; // type:func
SetAloPositionDamping__FP3ALOf                             = 0x129EE0; // type:func
SetAloPositionDampingDetail__FP3ALOP3CLQ                   = 0x129F58; // type:func
SetAloRotationSpring__FP3ALOf                              = 0x129FB0; // type:func
SetAloRotationSpringDetail__FP3ALOP3CLQ                    = 0x12A028; // type:func
SetAloRotationDamping__FP3ALOf                             = 0x12A080; // type:func
SetAloRotationDampingDetail__FP3ALOP3CLQ                   = 0x12A0F8; // type:func
SetAloPositionSmooth__FP3ALOf                              = 0x12A150; // type:func
SetAloPositionSmoothMaxAccel__FP3ALOf                      = 0x12A1A0; // type:func
SetAloPositionSmoothDetail__FP3ALOP4SMPA                   = 0x12A200; // type:func
SetAloRotationSmooth__FP3ALOf                              = 0x12A270; // type:func
SetAloRotationSmoothMaxAccel__FP3ALOf                      = 0x12A2C0; // type:func
SetAloRotationSmoothDetail__FP3ALOP4SMPA                   = 0x12A320; // type:func
SetAloDefaultAckPos__FP3ALO3ACK                            = 0x12A390; // type:func
SetAloDefaultAckRot__FP3ALO3ACK                            = 0x12A398; // type:func
SetAloRestorePosition__FP3ALOi                             = 0x12A3A0; // type:func
FUN_0012a3c8                                               = 0x12A3C8; // type:func
FUN_0012a3e8                                               = 0x12A3E8; // type:func
FUN_0012a418                                               = 0x12A418; // type:func
SetAloRestorePositionAck__FP3ALO3ACK                       = 0x12A430; // type:func
SetAloRestoreRotation__FP3ALOi                             = 0x12A478; // type:func
SetAloRestoreRotationAck__FP3ALO3ACK                       = 0x12A4A0; // type:func
FUN_0012a4e8                                               = 0x12A4E8; // type:func
SetAloLookAt__FP3ALO3ACK                                   = 0x12A528; // type:func
SetAloLookAtIgnore__FP3ALOf                                = 0x12A580; // type:func
GetAloLookAtIgnore__FP3ALOPf                               = 0x12A5B8; // type:func
SetAloLookAtPanFunction__FP3ALOP3CLQ                       = 0x12A5D0; // type:func
GetAloLookAtPanFunction__FP3ALOP3CLQ                       = 0x12A610; // type:func
SetAloLookAtPanLimits__FP3ALOP2LM                          = 0x12A630; // type:func
GetAloLookAtPanLimits__FP3ALOP2LM                          = 0x12A678; // type:func
SetAloLookAtTiltFunction__FP3ALOP3CLQ                      = 0x12A6A0; // type:func
GetAloLookAtTiltFunction__FP3ALOP3CLQ                      = 0x12A6E0; // type:func
SetAloLookAtTiltLimits__FP3ALOP2LM                         = 0x12A700; // type:func
GetAloLookAtTiltLimits__FP3ALOP2LM                         = 0x12A748; // type:func
SetAloLookAtEnabledPriority__FP3ALOi                       = 0x12A770; // type:func
GetAloLookAtEnabledPriority__FP3ALOPi                      = 0x12A7A8; // type:func
SetAloLookAtDisabledPriority__FP3ALOi                      = 0x12A7C0; // type:func
GetAloLookAtDisabledPriority__FP3ALOPi                     = 0x12A7F8; // type:func
FUN_0012a810                                               = 0x12A810; // type:func
FUN_0012a848                                               = 0x12A848; // type:func
FUN_0012a860                                               = 0x12A860; // type:func
FUN_0012a888                                               = 0x12A888; // type:func
FUN_0012a8b8                                               = 0x12A8B8; // type:func
FUN_0012a8c8                                               = 0x12A8C8; // type:func
SetAloRotationMatchesVelocity__FP3ALOff3ACK                = 0x12A8D8; // type:func
PtargetEnsureAlo__FP3ALO                                   = 0x12A970; // type:func
SetAloTargetAttacks__FP3ALOi                               = 0x12A9C8; // type:func
SetAloTargetRadius__FP3ALOf                                = 0x12AA00; // type:func
SetAloTargetHitTest__FP3ALOi                               = 0x12AA28; // type:func
SetAloScrollingMasterSpeeds__FP3ALOff                      = 0x12AA50; // type:func
SetAloEyesClosed__FP3ALOf                                  = 0x12AAE8; // type:func
EnsureAloSfx__FP3ALO                                       = 0x12ABA8; // type:func
SetAloSfxid__FP3ALO5SFXID                                  = 0x12ABD0; // type:func
SetAloSfxidSpl__FP3ALO5SFXID                               = 0x12AC08; // type:func
GetAloSfxid__FP3ALOP5SFXID                                 = 0x12AC88; // type:func
SetAloSStart__FP3ALOf                                      = 0x12ACA0; // type:func
GetAloSStart__FP3ALOPf                                     = 0x12ACD8; // type:func
SetAloSFull__FP3ALOf                                       = 0x12ACF8; // type:func
SetAloSndRepeat__FP3ALOP2LM                                = 0x12AD30; // type:func
GetAloSFull__FP3ALOPf                                      = 0x12AD78; // type:func
SetAloUVolume__FP3ALOf                                     = 0x12AD98; // type:func
SetAloUDoppler__FP3ALOf                                    = 0x12ADD0; // type:func
GetAloUDoppler__FP3ALOPf                                   = 0x12AE08; // type:func
SetAloUVolumeSpl__FP3ALOf                                  = 0x12AE20; // type:func
GetAloUVolume__FP3ALOPf                                    = 0x12AE58; // type:func
SetAloUPitch__FP3ALOf                                      = 0x12AE78; // type:func
SetAloUPitchSpl__FP3ALOf                                   = 0x12AEB0; // type:func
GetAloUPitch__FP3ALOPf                                     = 0x12AEE8; // type:func
GetAloSndRepeat__FP3ALOP2LM                                = 0x12AF00; // type:func
StartAloSound__FP3ALO5SFXIDfffP2LM                         = 0x12AF38; // type:func
StopAloSound__FP3ALO                                       = 0x12B010; // type:func
EnsureAloThrob__FP3ALO                                     = 0x12B040; // type:func
SetAloThrobKind__FP3ALO6THROBK                             = 0x12B0B0; // type:func
GetAloThrobKind__FP3ALOP6THROBK                            = 0x12B128; // type:func
SetAloThrobInColor__FP3ALOP6VECTOR                         = 0x12B140; // type:func
GetAloThrobInColor__FP3ALOP6VECTOR                         = 0x12B180; // type:func
SetAloThrobOutColor__FP3ALOP6VECTOR                        = 0x12B1A0; // type:func
GetAloThrobOutColor__FP3ALOP6VECTOR                        = 0x12B1E0; // type:func
SetAloThrobDtInOut__FP3ALOf                                = 0x12B200; // type:func
GetAloThrobDtInOut__FP3ALOPf                               = 0x12B238; // type:func
SetAloInteractCane__FP3ALOi                                = 0x12B250; // type:func
GetAloInteractCane__FP3ALOPi                               = 0x12B260; // type:func
SetAloInteractCaneSweep__FP3ALOi                           = 0x12B270; // type:func
GetAloInteractCaneSweep__FP3ALOPi                          = 0x12B278; // type:func
SetAloInteractCaneRush__FP3ALOi                            = 0x12B288; // type:func
GetAloInteractCaneRush__FP3ALOPi                           = 0x12B290; // type:func
SetAloInteractCaneSmash__FP3ALOi                           = 0x12B2A0; // type:func
GetAloInteractCaneSmash__FP3ALOPi                          = 0x12B2A8; // type:func
SetAloInteractBomb__FP3ALOi                                = 0x12B2B8; // type:func
GetAloInteractBomb__FP3ALOPi                               = 0x12B2C0; // type:func
SetAloInteractShock__FP3ALOi                               = 0x12B2D0; // type:func
GetAloInteractShock__FP3ALOPi                              = 0x12B2D8; // type:func
FAbsorbAloWkr__FP3ALOP3WKR                                 = 0x12B2E8; // type:func
SetAloPoseCombo__FP3ALO3OID                                = 0x12B2F8; // type:func
SetAloForceCameraFade__FP3ALOi                             = 0x12B420; // type:func
SetAloRealClock__FP3ALOi                                   = 0x12B4C8; // type:func
FUN_0012b550                                               = 0x12B550; // type:func
FUN_0012b590                                               = 0x12B590; // type:func
FUN_0012b5b8                                               = 0x12B5B8; // type:func
junk_0012B6A0                                              = 0x12B6A0; // type:func
FUN_0012b6b8                                               = 0x12B6B8; // type:func
anticrack_itm_firewall                                     = 0x12B760; // type:func

// TODO: Where do these belong to?
g_vtactseg = 0x2197c0;
s_shadow = 0x27b520;


////////////////////////////////////////////////////////////////
// P2/aseg.c
////////////////////////////////////////////////////////////////
StartupAseg__Fv                                             = 0x12B868; // type:func
InitAseg__FP4ASEG                                           = 0x12B870; // type:func
LoadAsegFromBrx__FP4ASEGP18CBinaryInputStream               = 0x12B8C8; // type:func
LoadAsegEventsFromBrx__FP4ASEGP18CBinaryInputStreamiPiPP2EA = 0x12BC38; // type:func
CloneAseg__FP4ASEGP2LO                                      = 0x12C140; // type:func
PostAsegLoad__FP4ASEG                                       = 0x12C160; // type:func
PostAsegLoadCallback__FP4ASEG5MSGIDPv                       = 0x12C208; // type:func
ApplyAsegOvr__FP4ASEGP3ALOiP3OVRffiPP5ASEGA                 = 0x12C288; // type:func
ApplyAseg__FP4ASEGP3ALOffiPP5ASEGA                          = 0x12C7B0; // type:func
PasegaApplyAseg__FP4ASEGP3ALOffi                            = 0x12C7D8; // type:func
PasegaFindAseg__FP4ASEGP3ALO                                = 0x12C808; // type:func
EnsureAseg__FP4ASEGP3ALO4SEEKffiPP5ASEGA                    = 0x12C840; // type:func
PasegaEnsureAseg__FP4ASEGP3ALO4SEEKffi                      = 0x12C8F8; // type:func
ApplyAsegCur__FP4ASEGP3ALOffiPP5ASEGA                       = 0x12C918; // type:func
FWipingAseg__FP4ASEG                                        = 0x12C9A8; // type:func
FindAsegClosestPoint__FP4ASEGP3ALOP6VECTORfPfT2T2           = 0x12C9E8; // type:func
PeaFindAsegLabel__FP4ASEG3OID                               = 0x12CBE8; // type:func
TFindAsegLabel__FP4ASEG3OID                                 = 0x12CCC0; // type:func
PchnFindAseg__FP4ASEGP3ALO                                  = 0x12CCE8; // type:func
PredictAsegEffect__FP4ASEGffP3ALOT3iP6VECTORP7MATRIX3T6T6   = 0x12CD78; // type:func
GetAsegWaypoints__FP4ASEGP3ALOPiPPP8WAYPOINT                = 0x12D1B0; // type:func
StripAsegChn__FP4ASEGP3CHN                                  = 0x12D2A8; // type:func
StripAsegAlo__FP4ASEGP3ALO                                  = 0x12D398; // type:func
LoadAsegblFromBrx__FP6ASEGBLP18CBinaryInputStream           = 0x12D3E0; // type:func
PostAsegblLoad__FP6ASEGBL                                   = 0x12D3E8; // type:func
CloneAsegbl__FP6ASEGBLP2LO                                  = 0x12D3F0; // type:func


////////////////////////////////////////////////////////////////
// P2/asega.c
////////////////////////////////////////////////////////////////
PasegaNew__FP2SW                                       = 0x12D3F8; // type:func
SetAsegaHandsOff__FP5ASEGAi                            = 0x12D448; // type:func
UpdateAsegaIeaCur__FP5ASEGA                            = 0x12D4A8; // type:func
PactsegFindAsega__FP5ASEGA3OID                         = 0x12D570; // type:func
junk_0012D5C8                                          = 0x12D5C8; // type:func
HandleAsegaEvent__FP5ASEGAP2EAPi                       = 0x12D5D0; // type:func
HandleAsegaEventsFF__FP5ASEGAP4ASEGPi                  = 0x12E4E0; // type:func
HandleAsegaEvents__FP5ASEGAP4ASEGPi                    = 0x12E5D0; // type:func
RemoveAsega__FP5ASEGA                                  = 0x12E710; // type:func
RetractAsega__FP5ASEGA                                 = 0x12E760; // type:func
FUN_0012e928                                           = 0x12E928; // type:func
UFromEaErrorFunc__FP2EAf                               = 0x12E968; // type:func
FWrapAsegaTime__FP5ASEGAPfT1                           = 0x12E9E0; // type:func
UpdateAsega__FP5ASEGAf                                 = 0x12EBD8; // type:func
SeekAsega__FP5ASEGA4SEEKff                             = 0x12F0A0; // type:func
SnapAsega__FP5ASEGAi                                   = 0x12F190; // type:func
AdaptAsega__FP5ASEGA                                   = 0x12F1D8; // type:func
FindChnClosestPointLocal__FP3CHNP3ALOP6VECTORfffPfT2T2 = 0x12F210; // type:func
SetAsegaSpeed__FP5ASEGAf                               = 0x12F6B0; // type:func
SetAsegaMasterSpeed__FP5ASEGAf                         = 0x12F6D0; // type:func
SetAsegaPriority__FP5ASEGAi                            = 0x12F718; // type:func
SendAsegaMessage__FP5ASEGA5MSGIDPv                     = 0x12F760; // type:func
SubscribeAsegaStruct__FP5ASEGAPFPv5MSGIDPv_vPv         = 0x12F7E0; // type:func
SubscribeAsegaObject__FP5ASEGAP2LO                     = 0x12F810; // type:func


////////////////////////////////////////////////////////////////
// P2/barrier.c
////////////////////////////////////////////////////////////////
InitBarrier__FP7BARRIER                    = 0x12F840; // type:func
CloneBarrier__FP7BARRIERT0                 = 0x12F888; // type:func
PostBarrierLoad__FP7BARRIER                = 0x12F8C8; // type:func
UpdateBarrier__FP7BARRIERf                 = 0x12F9B8; // type:func
FIgnoreBarrierIntersection__FP7BARRIERP2SO = 0x12FA88; // type:func
NotifyBarrierImpact__FP7BARRIERP2XPi       = 0x12FB68; // type:func
AddBarrierObject__FP7BARRIER3OID           = 0x12FCB0; // type:func
AddBarrierClass__FP7BARRIER3CID            = 0x12FCD0; // type:func


////////////////////////////////////////////////////////////////
// P2/bas.c
////////////////////////////////////////////////////////////////
__18CBinaryAsyncStreamPv                        = 0x12FCF0; // type:func
_$_18CBinaryAsyncStream                         = 0x12FD30; // type:func
FOpenFile__18CBinaryAsyncStreamP13CFileLocation = 0x12FD78; // type:func
junk_0012FD98                                   = 0x12FD98; // type:func
FOpenSector__18CBinaryAsyncStreamUiUi           = 0x12FDA0; // type:func
Close__18CBinaryAsyncStream                     = 0x12FDE8; // type:func
StartSpooling__18CBinaryAsyncStream             = 0x12FE70; // type:func
FSpooling__18CBinaryAsyncStream                 = 0x12FF10; // type:func
FSpoolingComplete__18CBinaryAsyncStream         = 0x12FF20; // type:func
FinishSpooling__18CBinaryAsyncStream            = 0x12FFE8; // type:func
Spool__18CBinaryAsyncStream                     = 0x130070; // type:func
Skip__18CBinaryAsyncStreami                     = 0x1300D8; // type:func


////////////////////////////////////////////////////////////////
// P2/basic.c
////////////////////////////////////////////////////////////////
FIsBasicDerivedFrom__FP5BASIC3CID = 0x1300e8; // type:func
EnsureBasicSidebag__FP5BASIC = 0x130110; // type:func
GetBasicCid__FP5BASICP3CID = 0x130158; // type:func


////////////////////////////////////////////////////////////////
// P2/bez.c
////////////////////////////////////////////////////////////////
EvaluateBezierWeightedFloat__FfffffffffPfN29 = 0x130168; // type:func
EvaluateBezierFloat__FfffffffPfN27 = 0x1303F0; // type:func
EvaluateBezierPos__FfffP6VECTORN63 = 0x130540; // type:func
EvaluateBezierMat__FfffP7MATRIX3P6VECTORT3T4T3T4T4 = 0x130748; // type:func
TesselateBezier__FfffP6VECTORN33iT3 = 0x130B48; // type:func
SBezierPosLength__FffP6VECTORN32 = 0x130C20; // type:func
LimitBezierMulti__Fie = 0x130C58; // type:func


////////////////////////////////////////////////////////////////
// P2/binoc.c
////////////////////////////////////////////////////////////////
InitBei__FP3BEIP3CLQffi = 0x130F48; // type:func
GEvaluateBei__FP3BEIi = 0x131000; // type:func
InitBinoc__FP5BINOC5BLOTK = 0x1310F0; // type:func
ResetBinoc__FP5BINOC = 0x131140; // type:func
PostBinocLoad__FP5BINOC = 0x131198; // type:func
DrawBinocCompass = 0x1316E8; // type:func
DrawBinocZoom = 0x131F60; // type:func
DrawBinocReticle = 0x132500; // type:func
DrawBinocOutline = 0x133B58; // type:func
FUN_00134aa0 = 0x134AA0; // type:func
FUN_00134b48 = 0x134B48; // type:func
DrawBinocFilter = 0x135228; // type:func
FUN_00135550 = 0x135550; // type:func
open_close_binoc = 0x1356C0; // type:func
FUN_001357f0 = 0x1357F0; // type:func
FUN_00135858 = 0x135858; // type:func
FUN_001358d0 = 0x1358D0; // type:func
junk_00135E20 = 0x135E20; // type:func
FUN_00135E30 = 0x135E30; // type:func
junk_00135E40 = 0x135E40; // type:func
FUN_00135E48 = 0x135E48; // type:func
junk_00135E70 = 0x135E70; // type:func
SetBinocBfk = 0x135E78; // type:func
FUN_00135f48 = 0x135F48; // type:func
FUN_00136040 = 0x136040; // type:func
FUN_00136238 = 0x136238; // type:func
FUN_001363d0 = 0x1363D0; // type:func
SetBinocAchzDraw = 0x136408; // type:func
FDoneBinocAchz__FP5BINOC = 0x136530; // type:func
SetBinocLookat__FP5BINOCP3ALO = 0x1365A0; // type:func
SetBinocZoom__FP5BINOCf = 0x1365A8; // type:func
FUN_001365f0 = 0x1365F0; // type:func
FUN_00136648 = 0x136648; // type:func
DrawBinoc = 0x1366A0; // type:func
GetBinocReticleFocus__FP5BINOCPfT1 = 0x136EC8; // type:func
FUN_00136ef8 = 0x136EF8; // type:func
FUN_00136fa8 = 0x136FA8; // type:func
binoc__static_initialization_and_destruction_0 = 0x136FE8; // type:func
SetPos__8CTextBoxff = 0x137228; // type:func
SetSize__8CTextBoxff = 0x137238; // type:func
SetTextColor__8CTextBoxP4RGBA = 0x137248; // type:func
SetHorizontalJust__8CTextBox2JH = 0x137260; // type:func
SetVerticalJust__8CTextBox2JV = 0x137268; // type:func
_GLOBAL_$I$InitBei__FP3BEIP3CLQffi = 0x137270; // type:func


////////////////////////////////////////////////////////////////
// P2/bis.c
////////////////////////////////////////////////////////////////
__18CBinaryInputStreamPvii = 0x137290; // type:func
_$_18CBinaryInputStream = 0x1372E0; // type:func
FOpenSector__18CBinaryInputStreamUiUi = 0x137328; // type:func
OpenMemory__18CBinaryInputStreamiPv = 0x137398; // type:func
FOpenFile__18CBinaryInputStreamP13CFileLocation = 0x1373B0; // type:func
Close__18CBinaryInputStream = 0x1373D0; // type:func
DecrementCdReadLimit__18CBinaryInputStreami = 0x137480; // type:func
PumpCd__18CBinaryInputStream = 0x137490; // type:func
PumpHost__18CBinaryInputStream = 0x1377C0; // type:func
Pump__18CBinaryInputStream = 0x137820; // type:func
Decompress__18CBinaryInputStream = 0x1378A0; // type:func
Read__18CBinaryInputStreamiPv = 0x137A60; // type:func
Align__18CBinaryInputStreami = 0x137B60; // type:func
U8Read__18CBinaryInputStream = 0x137B90; // type:func
U16Read__18CBinaryInputStream = 0x137BE0; // type:func
U32Read__18CBinaryInputStream = 0x137C40; // type:func
junk_00137CB8 = 0x137CB8; // type:func
S8Read__18CBinaryInputStream = 0x137CC0; // type:func
S16Read__18CBinaryInputStream = 0x137D10; // type:func
S32Read__18CBinaryInputStream = 0x137D78; // type:func
junk_00137DF0 = 0x137DF0; // type:func
F32Read__18CBinaryInputStream = 0x137DF8; // type:func
ReadVector__18CBinaryInputStreamP6VECTOR = 0x137E70; // type:func
ReadVector4__18CBinaryInputStreamP7VECTOR4 = 0x137E90; // type:func
ReadMatrix__18CBinaryInputStreamP7MATRIX3 = 0x137EB0; // type:func
ReadMatrix4__18CBinaryInputStreamP7MATRIX4 = 0x137F08; // type:func
ReadGeom__18CBinaryInputStreamP4GEOM = 0x137FB0; // type:func
ReadBspc__18CBinaryInputStreamP4GEOMP4BSPC = 0x138278; // type:func
ReadVbsp__18CBinaryInputStreamPiPP4VBSP = 0x138398; // type:func
ReadStringSw__18CBinaryInputStreamPPc = 0x1384A0; // type:func
junk_00138510 = 0x138510; // type:func
Unknown1__18CBinaryInputStream = 0x138518; // type:func
Unknown2__18CBinaryInputStreamPPv = 0x138550; // type:func


////////////////////////////////////////////////////////////////
// P2/bbmark.c
////////////////////////////////////////////////////////////////
UpdateSwPox__FP2SWP3OXAT1UcUc         = 0x1385A0; // type:func
PoxAddSw__FP2SWP3OXAT1                = 0x138738; // type:func
PoxRemoveSw__FP2SWP3OXAT1             = 0x138788; // type:func
PoxFromSoSo__FP2SOT0                  = 0x1387C0; // type:func
PxpFirstFromSoSo__FP2SOT0             = 0x1387F8; // type:func
AddSwAaobrObject__FP2SWP2SO           = 0x138828; // type:func
RemoveSwAaobrObject__FP2SWP2SO        = 0x1388A0; // type:func
InvalidateSwAaox__FP2SW               = 0x1389C8; // type:func
UpdateSwAaox__FP2SW                   = 0x1389D0; // type:func
InvalidateSwXpForObject__FP2SWP2SOi   = 0x138BE0; // type:func
RecalcSwXpAll__FP2SWi                 = 0x138C00; // type:func
RecalcSwOxfFilterForObject__FP2SWP2SO = 0x138F28; // type:func


////////////////////////////////////////////////////////////////
// P2/blend.c
////////////////////////////////////////////////////////////////
VerifyAeaEquivalence__FiP2EAiT1                  = 0x138FF0; // type:func
EnsureAsegBlendDynamic__FP3ALOiiPviPiT5PP6ASEGBL = 0x139038; // type:func
FillBlAmrsg__FiiPviiP3OID                        = 0x139600; // type:func
CalculateBlendAmrsg__FiiPviiP4MRSGPf             = 0x139740; // type:func
ImrsgLookUp__FffiP4MRSGPf                        = 0x139970; // type:func
junk_001399F0                                    = 0x1399F0; // type:func
ReblendAsegbl__FP6ASEGBLiiPv                     = 0x1399F8; // type:func
SetAsegblSlerp__FP6ASEGBLP3ALO                   = 0x139B38; // type:func


////////////////////////////////////////////////////////////////
// P2/blip.c
////////////////////////////////////////////////////////////////
BuildBlipAqwGifs__FiPP2QW             = 0x139B70; // type:func
StartupBlips__Fv                      = 0x139C38; // type:func
PblipNew__FP5BLIPG                    = 0x139C70; // type:func
RemoveBlip__FP4BLIP                   = 0x139D28; // type:func
PblipgNew__FP2SW                      = 0x139D68; // type:func
InitBlipg__FP5BLIPG                   = 0x139DE8; // type:func
OnBlipgAdd__FP5BLIPG                  = 0x139E80; // type:func
OnBlipgRemove__FP5BLIPG               = 0x139EC8; // type:func
SetBlipgShader__FP5BLIPG3OID          = 0x139F80; // type:func
PropagateBlipgShader__FP5BLIPG        = 0x13A008; // type:func
SetBlipgEmitb__FP5BLIPGP5EMITB        = 0x13A128; // type:func
UpdateBlipg__FP5BLIPGf                = 0x13A3A0; // type:func
SubscribeBlipgObject__FP5BLIPGP2LO    = 0x13A418; // type:func
CblipeProjectBlipTransformAccel__FP7MATRIX4G8VU_FLOATP5BLIPPP5BLIPVP5BLIPXi6BLIPOKP6VECTORT7 = 0x13A498; // type:func
ProjectBlipgTransformAccel__FP5BLIPGf = 0x13A618; // type:func
ProjectBlipgTransform__FP5BLIPGfi     = 0x13A940; // type:func
RenderBlipgSelf__FP5BLIPGP2CMP2RO     = 0x13AD08; // type:func
DrawBlipg__FP3RPL                     = 0x13AD80; // type:func
PropagateBlipgShaders__Fi             = 0x13B430; // type:func

g_aqwBlipeGifsNormal     = 0x261314; // size:0x4
g_aqwBlipeGifsClampedAdd = 0x261318; // size:0x4


////////////////////////////////////////////////////////////////
// P2/bomb.c
////////////////////////////////////////////////////////////////
InitBomb__FP4BOMB                             = 0x13B4C0; // type:func
LoadBombFromBrx__FP4BOMBP18CBinaryInputStream = 0x13B598; // type:func
CloneBomb__FP4BOMBT0                          = 0x13B5C8; // type:func
PostBombLoad__FP4BOMB                         = 0x13B610; // type:func
HandleBombMessage__FP4BOMB5MSGIDPv            = 0x13B708; // type:func
UpdateBomb__FP4BOMBf                          = 0x13B778; // type:func
FUN_0013b828                                  = 0x13B828; // type:func
FUN_0013b9d8                                  = 0x13B9D8; // type:func
FUN_0013ba70                                  = 0x13BA70; // type:func
FAbsorbBombWkr__FP4BOMBP3WKR                  = 0x13BBA0; // type:func
FUN_0013bc80                                  = 0x13BC80; // type:func
PrimeBomb__FP4BOMBf                           = 0x13BE00; // type:func
ApplyBombThrow__FP4BOMBP2PO                   = 0x13BE18; // type:func
DetonateBomb__FP4BOMB                         = 0x13BF68; // type:func
PsfxEnsureBomb__FP4BOMB4ENSK                  = 0x13C950; // type:func


////////////////////////////////////////////////////////////////
// P2/bq.c
////////////////////////////////////////////////////////////////
Init__10CByteQueueiPv                 = 0x13C988; // type:func
Reset__10CByteQueue                   = 0x13C9B0; // type:func
CbFill__10CByteQueueiP11CQueueInput   = 0x13C9D0; // type:func
CbDrain__10CByteQueueiP12CQueueOutput = 0x13CAD8; // type:func
CbFill__10CByteQueueiPUc              = 0x13CC00; // type:func
FreeDrain__10CByteQueuei              = 0x13CC48; // type:func
CbRead__17CQueueInputMemoryiPv        = 0x13CC80; // type:func
CbRead__15CQueueInputFileiPv          = 0x13CCE8; // type:func
junk_0013CCF0                         = 0x13CCF0; // type:func


////////////////////////////////////////////////////////////////
// P2/break.c
////////////////////////////////////////////////////////////////
InitBrk__FP3BRK                             = 0x13CCF8; // type:func
LoadBrkFromBrx__FP3BRKP18CBinaryInputStream = 0x13CD80; // type:func
CloneBrk__FP3BRKT0                          = 0x13CDE8; // type:func
PostBrkLoad__FP3BRK                         = 0x13CE40; // type:func
PostBrkLoadCallbackHookup__FP3BRK5MSGIDPv   = 0x13CE80; // type:func
UpdateBrk__FP3BRKf                          = 0x13D068; // type:func
FAbsorbBrkWkr__FP3BRKP3WKR                  = 0x13D0B0; // type:func
BreakBrk__FP3BRK                            = 0x13D278; // type:func
SetBrkBroken__FP3BRKi                       = 0x13D820; // type:func
SetBrkExclude__FP3BRK3OID                   = 0x13D868; // type:func
SetBrkRemain__FP3BRK3OID                    = 0x13D8B0; // type:func
SetBrkFixed__FP3BRK3OID                     = 0x13D900; // type:func
SetBrkRemainFixed__FP3BRK3OID               = 0x13D950; // type:func
SetBrkOnPlayer__FP3BRKi                     = 0x13D9A0; // type:func
GetBrkOnPlayer__FP3BRKPi                    = 0x13D9E0; // type:func
SetBrkOnBomb__FP3BRKi                       = 0x13D9F0; // type:func
GetBrkOnBomb__FP3BRKPi                      = 0x13DA30; // type:func
AddBrkTouchObject__FP3BRK3OID               = 0x13DA48; // type:func
AddBrkTouchClass__FP3BRK3CID                = 0x13DA80; // type:func
FUN_0013DAB8                                = 0x13DAB8; // type:func
PsfxEnsureBrk__FP3BRK4ENSK                  = 0x13DAF0; // type:func
FCheckBrkTouchObject__FP3BRKP2SO            = 0x13DB28; // type:func
UpdateBrkp__FP4BRKPf                        = 0x13DC38; // type:func
HandleBrkpMessage__FP4BRKP5MSGIDPv          = 0x13DCA8; // type:func
FIgnoreBrkpIntersection__FP4BRKPP2SO        = 0x13DD08; // type:func
SetBrkpBrkps__FP4BRKP5BRKPS                 = 0x13DD78; // type:func
InitBreak__FP5BREAK                         = 0x13DDB8; // type:func
InitFragile__FP7FRAGILE                     = 0x13DDF0; // type:func
AdjustFragileNewXp__FP7FRAGILEP2XPi         = 0x13DE38; // type:func
AdjustZapbreakNewXp__FP8ZAPBREAKP2XPi       = 0x13DEE8; // type:func
UpdateZapbreak__FP8ZAPBREAKf                = 0x13df68; // type:func


////////////////////////////////////////////////////////////////
// P2/bsp.c
////////////////////////////////////////////////////////////////
ClsgClipEdgeToBsp__FP3BSPP6VECTORT1PiiP3LSG = 0x13DFD8; // type:func
PruneBsp__FP3BSPP6VECTORfPP3BSP             = 0x13E430; // type:func
PbspPointInBspQuick__FP6VECTORP3BSP         = 0x13E658; // type:func
CloneBspc__FP4GEOMP4BSPCT0T1                = 0x13E6C8; // type:func


////////////////////////////////////////////////////////////////
// P2/button.c
////////////////////////////////////////////////////////////////
PostAshLoad__FP2SWP3ASHP3ALO                      = 0x13E7C0; // type:func
FFoundAshAseg__FP3ASHP4ASEG                       = 0x13E868; // type:func
FAddAshAseg__FP3ASHP4ASEG                         = 0x13E8D8; // type:func
FAddAshOid__FP3ASH3OID                            = 0x13E8F8; // type:func
InitBtn__FP3BTN                                   = 0x13E918; // type:func
LoadBtn__FP3BTNP3ALO                              = 0x13E950; // type:func
PostBtnLoad__FP3BTN                               = 0x13EA38; // type:func
RestoreBtnFromCheckpointCallback__FP3BTN5MSGIDPv  = 0x13EAE0; // type:func
SetBtnRsmg__FP3BTNi3OIDN22                        = 0x13EB30; // type:func
SetBtnButtons__FP3BTN7BUTTONS                     = 0x13EB68; // type:func
FAddRsmg__FP4RSMGiPii3OIDN24                      = 0x13EC00; // type:func
TriggerRsmg__FP2SWiP4RSMGP2LOi                    = 0x13ECB0; // type:func
RunBtnAsegs__FP3BTN4IASHii                        = 0x13ED90; // type:func
TriggerBtn__FP3BTNii                              = 0x13EF50; // type:func
UntriggerBtn__FP3BTNi                             = 0x13F070; // type:func
InitButton__FP6BUTTON                             = 0x13F0E0; // type:func
LoadButtonFromBrx__FP6BUTTONP18CBinaryInputStream = 0x13F110; // type:func
InsertButtonPos__FP6BUTTONP3PNTP6VECTOR           = 0x13F140; // type:func
InsertButtonMat__FP6BUTTONP3XFMP7MATRIX3          = 0x13F1D8; // type:func
PostButtonLoad__FP6BUTTON                         = 0x13F290; // type:func
CloneButton__FP6BUTTONT0                          = 0x13F6C0; // type:func
SetButtonButtons__FP6BUTTON7BUTTONS               = 0x13F6F8; // type:func
FCheckButtonObject__FP6BUTTONP2SO                 = 0x13F718; // type:func
IposFindButtonClosest__FP6BUTTONPf                = 0x13F8A0; // type:func
ImatFindButtonClosest__FP6BUTTONPf                = 0x13F940; // type:func
PresetButtonAccel__FP6BUTTONf                     = 0x13FA10; // type:func
UpdateButtonInternalXps__FP6BUTTON                = 0x13FAE8; // type:func
UpdateButton__FP6BUTTONf                          = 0x13FD20; // type:func
FAbsorbButtonWkr__FP6BUTTONP3WKR                  = 0x140028; // type:func
InitVolbtn__FP6VOLBTN                             = 0x1400A8; // type:func
LoadVolbtnFromBrx__FP6VOLBTNP18CBinaryInputStream = 0x140100; // type:func
PostVolbtnLoad__FP6VOLBTN                         = 0x140140; // type:func
CloneVolbtn__FP6VOLBTNT0                          = 0x140200; // type:func
SetVolbtnButtons__FP6VOLBTN7BUTTONS               = 0x140238; // type:func
UpdateVolbtn__FP6VOLBTNf                          = 0x140258; // type:func
FGetVolbtnPushObjectsWithinList__FP6VOLBTNPv      = 0x140550; // type:func
AddBtnAseg__FP3BTNP3ALO3OID                       = 0x1405D0; // type:func
AddButtonAseg__FP6BUTTON3OID                      = 0x1405F0; // type:func
AddVolbtnAseg__FP6VOLBTN3OID                      = 0x140618; // type:func
AddBtnOffAseg__FP3BTNP3ALO3OID                    = 0x140640; // type:func
AddButtonOffAseg__FP6BUTTON3OID                   = 0x140660; // type:func
AddVolbtnOffAseg__FP6VOLBTN3OID                   = 0x140688; // type:func
AddButtonPushObject__FP6BUTTON3OID                = 0x1406B0; // type:func
AddButtonNoPushObject__FP6BUTTON3OID              = 0x1406D0; // type:func
AddButtonPushClass__FP6BUTTON3CID                 = 0x1406F0; // type:func
AddButtonNoPushClass__FP6BUTTON3CID               = 0x140710; // type:func
AddVolbtnPushObject__FP6VOLBTN3OID                = 0x140730; // type:func
SetButtonRsmg__FP6BUTTONi3OIDN22                  = 0x140750; // type:func
SetVolbtnRsmg__FP6VOLBTNi3OIDN22                  = 0x140770; // type:func


////////////////////////////////////////////////////////////////
// P2/cat.c
////////////////////////////////////////////////////////////////
StartupCatalog__Fv = 0x140790; // type:func
FUN_001407A0__FPUi = 0x1407A0; // type:func


////////////////////////////////////////////////////////////////
// P2/cd.c
////////////////////////////////////////////////////////////////
CpchzTokenizePath__FPc = 0x1407A8; // type:func
FValidCdMmode__Fv      = 0x140968; // type:func
SetCdMmode__Fv         = 0x1409A8; // type:func
StartupCd__Fv          = 0x1409D8; // type:func
UpdateCd__Fv           = 0x1409E0; // type:func
CdPath__FPcT0i         = 0x140B60; // type:func
ReadCd__FUiUiPv        = 0x140C28; // type:func
ReadCdDirect__FUiUiPv  = 0x140CC8; // type:func
FCdCompleted__Fi       = 0x140D68; // type:func
junk_00140D88          = 0x140D88; // type:func

g_cds = 0x2613EC; // size:0x4
g_scecd = 0x2613F0; // size:0x4
s_retCdRead = 0x2613F4; // size:0x4
s_retCdError = 0x2613F8; // size:0x4

s_cdmode = 0x247AA0; // size:0x4


////////////////////////////////////////////////////////////////
// P2/chkpnt.c
////////////////////////////////////////////////////////////////
ResetChkmgrCheckpoints__FP6CHKMGR = 0x140D90; // type:func
SaveChkmgrCheckpoint__FP6CHKMGR3OIDT1 = 0x140E10; // type:func
ReturnChkmgrToCheckpoint__FP6CHKMGR = 0x140ED0; // type:func
RestoreChkmgrFromCheckpoint__FP6CHKMGR = 0x140F48; // type:func
IchkAllocChkmgr__FP6CHKMGR = 0x140FF8; // type:func
FGetChkmgrIchk__FP6CHKMGRi = 0x141008; // type:func
SetChkmgrIchk__FP6CHKMGRi = 0x141040; // type:func
ClearChkmgrIchk__FP6CHKMGRi = 0x1410A0; // type:func
LoadVolFromBrx__FP3VOLP18CBinaryInputStream = 0x141108; // type:func
FCheckVolPoint__FP3VOLP6VECTOR = 0x141170; // type:func
InitChkpnt__FP6CHKPNT = 0x1411A8; // type:func
LoadChkpntFromBrx__FP6CHKPNTP18CBinaryInputStream = 0x141210; // type:func
BindChkpnt__FP6CHKPNT = 0x141338; // type:func
PostChkpntLoad__FP6CHKPNT = 0x141438; // type:func
CloneChkpnt__FP6CHKPNTT0 = 0x1415D0; // type:func
UpdateChkpnt__FP6CHKPNTf = 0x141690; // type:func
FUN_001417f0 = 0x1417F0; // type:func
TriggerChkpnt__FP6CHKPNT = 0x141870; // type:func
FUN_001419A0 = 0x1419A0; // type:func
FUN_001419C0 = 0x1419C0; // type:func
FUN_001419E0 = 0x1419E0; // type:func

g_chkmgr = 0x261420; // size:0x430


////////////////////////////////////////////////////////////////
// P2/clip.c
////////////////////////////////////////////////////////////////
PsoHitTestLineObjects__FiP6VECTORT1iPP2SOP3LSG         = 0x1419E8; // type:func
FUN_00141b48                                           = 0x141B48; // type:func
ClsgClipEdgeToObject__FP2SOP6VECTORT1iP3LSG            = 0x141C28; // type:func
ClsgClipEdgeToObjectPruned__FP2SOP3BSPP6VECTORT2iP3LSG = 0x141C90; // type:func
ClsgClipCylinderToObject__FP2SOP6VECTORT1fiP3LSG       = 0x141D00; // type:func
ClsgClipLineToSphere__FP6VECTORfT0T0iP3LSG             = 0x141D88; // type:func
ClsgClipEdgeToSphere__FP6VECTORfT0T0iP3LSG             = 0x141F48; // type:func
ClsgClipCylinderToSphere__FP6VECTORfT0T0fiP3LSG        = 0x142170; // type:func
ClsgClipEdgeToCylinder__FP6VECTORT0fT0T0iP3LSG         = 0x142278; // type:func
junk_00142990                                          = 0x142990; // type:func
SgnCompareMaa__FP3MAAT0                                = 0x142998; // type:func
ClsgMergeAlsg__FiP3LSG                                 = 0x1429F8; // type:func
ClsgClipCylinderToBsp__FP4BSPCP4GEOMP6VECTORT2fiP3LSG  = 0x142B78; // type:func
junk_00142EC8                                          = 0x142EC8; // type:func


////////////////////////////////////////////////////////////////
// P2/clock.c
////////////////////////////////////////////////////////////////
SetClockRate__Ff = 0x142ED0; // type:func
MarkClockTick__FP5CLOCK = 0x142F10; // type:func
MarkClockTickRealOnly__FP5CLOCK = 0x143030; // type:func
ResetClock__FP5CLOCKf = 0x1430B8; // type:func
SetClockEnabled__FP5CLOCKi = 0x1430C0; // type:func
StartupClock__Fv = 0x1430C8; // type:func
TickNow__Fv = 0x1430F8; // type:func

D_0024CD4C = 0x24cd4c; // size:0x4
g_rtClock = 0x261850; // size:0x4
g_rtClockPowerUp = 0x261854; // size:0x4
g_clock = 0x261858; // size:0x20
s_tickLastRaw = 0x261878; // size:0x4
cWrapAround = 0x27c000; // size:0x8


////////////////////////////////////////////////////////////////
// P2/cm.c
////////////////////////////////////////////////////////////////
StartupCm__Fv = 0x143140; // type:func
CalcCmAdjust__FP2CMP2SOP6CPDEFIP6VECTOR = 0x143148; // type:func
SpringCm__FfffP2CMP6VECTORP6VECTORP6VECTOR = 0x143180; // type:func
AdjustCmCpdefi__FP2CMP2SOfP6CPDEFI = 0x143208; // type:func
ResetCmAdjust__FP2CMP2SOP6CPDEFI = 0x1433E0; // type:func
GetCmCpdefi__FP2CMP2SOfP6CPDEFI = 0x143418; // type:func
BuildCmFgfn__FP2CMfP4FGFN = 0x1434C8; // type:func
RecalcCmFrustrum__FP2CM = 0x143560; // type:func
InitCm__FP2CM = 0x143648; // type:func
SetSwCameraFov__Ff = 0x1437C0; // type:func
FUN_001437e8 = 0x1437E8; // type:func
SetSwCameraFarClip__Ff = 0x143810; // type:func
FUN_00143838 = 0x143838; // type:func
FUN_00143860 = 0x143860; // type:func
FUN_00143888 = 0x143888; // type:func
SetSwCameraRgbaFog__FP2SWP4RGBA = 0x1438B0; // type:func
FUN_001438d8 = 0x1438D8; // type:func
SetCmPos__FP2CMP6VECTOR = 0x143900; // type:func
SetCmMat__FP2CMP7MATRIX3 = 0x143920; // type:func
SetCmFov__FP2CMf = 0x143940; // type:func
SetCmNearClip__FP2CMf = 0x143968; // type:func
SetCmFarClip__FP2CMf = 0x143988; // type:func
SetCmSProgress__FP2CMf = 0x1439A8; // type:func
FUN_001439c8__FP2CMf = 0x1439C8; // type:func
FUN_001439e8__FP2CMf = 0x1439E8; // type:func
SetCmRgbaFog__FP2CMP4RGBA = 0x143A08; // type:func
SetCmMrdRatio__FP2CMf = 0x143A38; // type:func
ResetCm = 0x143A60; // type:func
ClearCmFadeObjects__FP2CM = 0x143AF0; // type:func
AddCmFadeObject = 0x143AF8; // type:func
RemoveCmFadeObject = 0x143B20; // type:func
FUN_00143BA8 = 0x143BA8; // type:func
UpdateCmFade = 0x143BE0; // type:func
UpdateCmLast = 0x143E40; // type:func
SetupCmRotateToCam = 0x144008; // type:func
ConvertCmScreenToWorld = 0x144128; // type:func
ConvertCmWorldToScreen = 0x1441C0; // type:func
SetupCm__FP2CM = 0x144270; // type:func
CombineEyeLookAtProj = 0x1442C8; // type:func
BuildFrustrum = 0x1443C8; // type:func
UpdateCmMat4 = 0x144540; // type:func
DrawCm__FP2CM = 0x144848; // type:func
SetCmPosMat__FP2CMP6VECTORP7MATRIX3 = 0x1448C8; // type:func
SetCmLookAt = 0x144938; // type:func
ConvertWorldToCylindVelocity = 0x144978; // type:func
ConvertCylindToWorldVelocity = 0x144AA0; // type:func
ResetCmLookAtSmooth = 0x144B70; // type:func
SetCmLookAtSmooth = 0x144BE8; // type:func
AdjustCmJoy__FP2CMP3JOY5JOYIDPf = 0x144FF8; // type:func
junk_00145080 = 0x145080; // type:func
SetCmPolicy__FP2CM3CPPP5CPLCYP2SOPv = 0x145088; // type:func
RevokeCmPolicy__FP2CMi3CPPP5CPLCYP2SOPv = 0x1451F0; // type:func
FInsideCmMrd = 0x1453B0; // type:func
DecomposeCylind = 0x145438; // type:func
DecomposeSphere = 0x1454E0; // type:func
SetCmCut__FP2CMPf = 0x1455C0; // type:func
SetResetFlag__FP2CM = 0x1455E0; // type:func
ClearCmCut__FP2CM = 0x1455F0; // type:func
AdaptCm = 0x145610; // type:func
SetCm = 0x145718; // type:func
PsoEnemyStepguard = 0x145810; // type:func
FUN_00145950 = 0x145950; // type:func
FUN_00145b68 = 0x145B68; // type:func
FUN_00145DD8 = 0x145DD8; // type:func
FUN_00145de8 = 0x145DE8; // type:func
FUN_00145e68 = 0x145E68; // type:func
PushLookkCm__FP2CM5LOOKK = 0x145FB8; // type:func
LookkPopCm__FP2CM = 0x145FD8; // type:func
LookkCurCm__FP2CM = 0x145FF8; // type:func
SetCmSniperFocus__FP2CMP3PNTff = 0x146018; // type:func
FUN_00146028__FP2CM = 0x146028; // type:func
FUN_00146038 = 0x146038; // type:func
cm__static_initialization_and_destruction_0__Fii = 0x1460B8; // type:func
_GLOBAL_$I$StartupCm__Fv = 0x1460E0; // type:func

g_posEyeDefault = 0x261880; // size:0x10
g_posCenterDefault = 0x261890; // size:0x10
g_sNearFog = 0x2618a0; // size:0x4
g_sFarFog = 0x2618a4; // size:0x4
g_uFogMax = 0x2618a8; // size:0x4
g_rgbaFog = 0x2618b0; // size:0x4
// ...
DT_CmJoltMax = 0x2618c8; // size:0x4
SW_CmJolt = 0x2618cc; // size:0x4
s_clqUToUJolt = 0x2618d0; // size:0x10
s_dposJolt = 0x2618e0; // size:0x10
s_rotJolt = 0x2618f0; // size:0x10
s_vecRange = 0x261900; // size:0x10
s_vecOffset = 0x261910; // size:0x10
R_SetCmSpring = 0x261920; // size:0x4
R_SetCmDamping = 0x261924; // size:0x4

D_00261928 = 0x261928; // size:0x24
D_0026194C = 0x26194c; // size:0x4
D_00261950 = 0x261950; // size:0x4

s_smpSquishEye = 0x261958; // size:0xc

D_00261970 = 0x261970; // size:0x4
D_00261974 = 0x261974; // size:0x4
D_00261978 = 0x261978; // size:0x4
D_0026197C = 0x26197c; // size:0x4
D_00261980 = 0x261980; // size:0x4
D_00261984 = 0x261984; // size:0x4
D_00261988 = 0x261988; // size:0x4
D_0026198C = 0x26198c; // size:0x4

g_pcm = 0x261990; // size:0x4


////////////////////////////////////////////////////////////////
// P2/cnvo.c
////////////////////////////////////////////////////////////////
InitCnvo__FP4CNVO                             = 0x146100; // type:func
LoadCnvoFromBrx__FP4CNVOP18CBinaryInputStream = 0x146130; // type:func
PostCnvoLoad__FP4CNVO                         = 0x146178; // type:func
AdjustCnvoXpVelocity__FP4CNVOP2XPi            = 0x1461A8; // type:func
SetCnvoBeltSpeed__FP4CNVOf                    = 0x146240; // type:func
MatchCnvoScrollerToBeltSpeed__FP4CNVO         = 0x146298; // type:func


////////////////////////////////////////////////////////////////
// P2/coin.c
////////////////////////////////////////////////////////////////
InitDprize__FP6DPRIZE = 0x146340; // type:func
LoadDprizeFromBrx__FP6DPRIZEP18CBinaryInputStream = 0x1463C0; // type:func
CloneDprize__FP6DPRIZET0 = 0x146418; // type:func
PostDprizeLoad__FP6DPRIZE = 0x146470; // type:func
ProjectDprizeTransform__FP6DPRIZEfi = 0x146518; // type:func
FFilterDprizeObjects__FP6DPRIZEP2SO = 0x146D10; // type:func
CheckDprizeBounce__FP6DPRIZE = 0x146DB0; // type:func
CheckDprizeCollect__FP6DPRIZE = 0x1471B0; // type:func
FAbsorbDprizeWkr__FP6DPRIZEP3WKR = 0x1473E0; // type:func
UpdateDprize__FP6DPRIZEf = 0x147428; // type:func
RenderDprizeAll__FP6DPRIZEP2CMP2RO = 0x1478F0; // type:func
SetDprizeDprizes__FP6DPRIZE7DPRIZES = 0x147AB0; // type:func
InitCoin__FP4COIN = 0x147E40; // type:func
FUN_00147ed0 = 0x147ED0; // type:func
FUN_00147ef8 = 0x147EF8; // type:func
UpdateCoin__FP4COINf = 0x147FB0; // type:func
CreateSwCharm__FP2SW = 0x148038; // type:func
AddLife__FPv = 0x148178; // type:func
OnCoinSmack__FP4COIN = 0x1481A0; // type:func
SetCoinDprizes__FP4COIN7DPRIZES = 0x148298; // type:func
InitCharm__FP5CHARM = 0x148400; // type:func
SetCharmDprizes__FP5CHARM7DPRIZES = 0x148470; // type:func
InitKey__FP3KEY = 0x148510; // type:func
SetKeyDprizes__FP3KEY7DPRIZES = 0x148598; // type:func
FUN_00148698 = 0x148698; // type:func
FUN_00148718 = 0x148718; // type:func
FUN_00148748 = 0x148748; // type:func
FUN_00148770 = 0x148770; // type:func
FUN_00148828 = 0x148828; // type:func
FUN_00148888 = 0x148888; // type:func
FUN_00148910__FPfT0 = 0x148910; // type:func
FUN_00148938 = 0x148938; // type:func
CpdprizeAttractSwDprizes__FP2SW3CIDP6VECTORiPP6DPRIZE = 0x148AC0; // type:func
RemoveSwExtraneousCharms__FP2SW = 0x148CE0; // type:func
FUN_00148d90 = 0x148D90; // type:func
FUN_00148e18 = 0x148E18; // type:func
FUN_00148e40 = 0x148E40; // type:func
FUN_00148ef8 = 0x148EF8; // type:func
increment_and_show_life_count = 0x148F80; // type:func
CollectLifetkn__FP7LIFETKN = 0x148FF0; // type:func
FUN_00149168 = 0x149168; // type:func
break_bottle = 0x149190; // type:func

s_asnipDprize = 0x2619A0; // size:0x3c


////////////////////////////////////////////////////////////////
// P2/cplcy.c
////////////////////////////////////////////////////////////////
InitCplcy = 0x149398; // type:func
FActiveCplcy = 0x1493A0; // type:func
SetCpmanCpmt = 0x1493B8; // type:func
FUN_001493c0 = 0x1493C0; // type:func
PosCplookAnchor = 0x1493C8; // type:func
FUN_00149458 = 0x149458; // type:func
plays_binoc_sfx = 0x149508; // type:func
PushCplookLookk__FP6CPLOOK5LOOKK = 0x1495E8; // type:func
LookkPopCplook__FP6CPLOOK = 0x149610; // type:func
LookkCurCplook__FP6CPLOOK = 0x149638; // type:func
InitCplook = 0x149660; // type:func
FUN_001496c0 = 0x1496C0; // type:func
UpdateCplook = 0x149760; // type:func
FUN_0014a7b8 = 0x14A7B8; // type:func
InitCpalign = 0x14A888; // type:func
FUN_0014a8d0 = 0x14A8D0; // type:func
UpdateCpalign = 0x14A8F8; // type:func
FUN_0014aa90 = 0x14AA90; // type:func
FUN_0014aa98 = 0x14AA98; // type:func
UpdateCpaseg = 0x14AAA0; // type:func


////////////////////////////////////////////////////////////////
// P2/credit.c
////////////////////////////////////////////////////////////////
InitCredit__FP6CREDIT5BLOTK = 0x14ABD0; // type:func
PostCreditLoad__FP6CREDIT = 0x14AC48; // type:func
SetCreditClock__FP6CREDITPf = 0x14AD00; // type:func
UpdateCredit__FP6CREDIT = 0x14AD70; // type:func
DrawCredit__FP6CREDIT = 0x14ADE0; // type:func
PlaceCredit__FP6CREDITffi = 0x14AEA0; // type:func
VacateCredit__FP6CREDIT = 0x14AF10; // type:func
SetCreditLine__FP6CREDITiPcf = 0x14AF38; // type:func


////////////////////////////////////////////////////////////////
// P2/crout.c
////////////////////////////////////////////////////////////////
CroutDecomp__FiPfT1 = 0x14B0C0; // type:func
CroutSolve__FiPfN21 = 0x14B3E0; // type:func


////////////////////////////////////////////////////////////////
// P2/crusher.c
// TODO: The rest of the functions aren't in the prototype.
// Figure out what they do and mangle the names.
////////////////////////////////////////////////////////////////
OnCrfodAdd__FP5CRFOD             = 0x14B550; // type:func
OnCrfodRemove__FP5CRFOD          = 0x14B588; // type:func
CloneCrfod__FP5CRFODT0           = 0x14B5C0; // type:func
InitCrfodb__FP6CRFODB            = 0x14B608; // type:func
PostCrfodbLoad__FP6CRFODB        = 0x14B640; // type:func
CalcHeadingVector__FfP6VECTOR    = 0x14B678; // type:func
UpdateCrfodbGoal__FP6CRFODBi     = 0x14B6A8; // type:func
FDetectCrfodb__FP6CRFODB         = 0x14BB08; // type:func
FAbsorbCrfodbWkr__FP6CRFODBP3WKR = 0x14BCE8; // type:func
FUN_0014bd38                     = 0x14BD38; // type:func
SgsNextCrfodkAI__FP6CRFODK       = 0x14BDC8; // type:func
FDetectCrfodk__FP6CRFODK         = 0x14BEA8; // type:func
FAbsorbCrfodkWkr__FP6CRFODKP3WKR = 0x14BEF8; // type:func
FUN_0014bf88                     = 0x14BF88; // type:func
InitCrbrain__FP7CRBRAIN          = 0x14C018; // type:func
post_load_crbrain                = 0x14C138; // type:func
FUN_0014c2f0                     = 0x14C2F0; // type:func
FUN_0014c5e8                     = 0x14C5E8; // type:func
FUN_0014c668                     = 0x14C668; // type:func
update_crbrain                   = 0x14C6E0; // type:func
FUN_0014c788                     = 0x14C788; // type:func
FUN_0014c820                     = 0x14C820; // type:func
FUN_0014c838                     = 0x14C838; // type:func
FUN_0014c858                     = 0x14C858; // type:func
FUN_0014cba8                     = 0x14CBA8; // type:func
FUN_0014cd70                     = 0x14CD70; // type:func
FUN_0014cdc8                     = 0x14CDC8; // type:func
handle_crbrain_message           = 0x14CF30; // type:func

DAT_0027c008 = 0x27C008; // size:0x4


////////////////////////////////////////////////////////////////
// P2/crv.c
////////////////////////////////////////////////////////////////
SMeasureApos__FiP6VECTORPf                                       = 0x14D0A8; // type:func
GWrapApos__FfiPfi                                                = 0x14D138; // type:func
IposFindAposG__FfiPfiT2T2                                        = 0x14D1A0; // type:func
EvaluateAposG__FfiP6VECTORPfiT2T2                                = 0x14D280; // type:func
FindAposClosestPointAll__FP6VECTORP6CONSTRiT0N20PiPf             = 0x14D3A8; // type:func
FindAposClosestPointSegment__FP6VECTORP6CONSTRiT0iiT0T0PiPf      = 0x14D680; // type:func
ConvertApos__FiP6VECTORP7MATRIX4T2                               = 0x14D938; // type:func
PcrvNew__F4CRVK                                                  = 0x14D9A8; // type:func
SFromCrvU__FP3CRVf                                               = 0x14DA18; // type:func
UFromCrvS__FP3CRVf                                               = 0x14DA28; // type:func
IcvFindCrvU__FP3CRVfPfT2                                         = 0x14DA38; // type:func
IcvFindCrvS__FP3CRVfPfT2                                         = 0x14DA68; // type:func
GMeasureCrvU__FP5CRVMCf                                          = 0x14DA98; // type:func
UMaxCrv__FP3CRV                                                  = 0x14DB40; // type:func
SMaxCrv__FP3CRV                                                  = 0x14DB58; // type:func
junk_0014DB70                                                    = 0x14DB70; // type:func
SMeasureCrvSegmentU__FP5CRVMSf                                   = 0x14DB78; // type:func
FindCrvClosestPointOnLineSegmentFromU__FP3CRVP6VECTORT1fT1T1PfT6 = 0x14DBD0; // type:func
junk_0014DCF8                                                    = 0x14DCF8; // type:func
DuGetCrvSearchIncrement__FP3CRV                                  = 0x14DD00; // type:func
LoadCrvlFromBrx__FP4CRVLP18CBinaryInputStream                    = 0x14DD28; // type:func
EvaluateCrvlFromU__FP4CRVLfP6VECTORT2                            = 0x14DE08; // type:func
EvaluateCrvlFromS__FP4CRVLfP6VECTORT2                            = 0x14DE40; // type:func
RenderCrvlSegment__FP4CRVLiP7MATRIX4P2CMG4RGBAi                  = 0x14DE78; // type:func
ConvertCrvl__FP4CRVLP7MATRIX4T1                                  = 0x14DF68; // type:func
SFromCrvlU__FP4CRVLf                                             = 0x14DF98; // type:func
UFromCrvlS__FP4CRVLf                                             = 0x14E000; // type:func
MeasureCrvl__FP4CRVL                                             = 0x14E068; // type:func
FindCrvlClosestPointAll__FP4CRVLP6VECTORP6CONSTRT1T1PfT5         = 0x14E090; // type:func
FindCrvlClosestPointFromU__FP4CRVLP6VECTORfP6CONSTRT1T1PfT6      = 0x14E170; // type:func
FindCrvlClosestPointFromS__FP4CRVLP6VECTORfP6CONSTRT1T1PfT6      = 0x14E2A0; // type:func
LoadCrvcFromBrx__FP4CRVCP18CBinaryInputStream                    = 0x14E3D0; // type:func
InvalidateCrvcCache__FP4CRVC                                     = 0x14E500; // type:func
FillCrvcCache__FP4CRVCi                                          = 0x14E510; // type:func
EvaluateCrvcFromU__FP4CRVCfP6VECTORT2                            = 0x14E5B8; // type:func
EvaluateCrvcFromS__FP4CRVCfP6VECTORT2                            = 0x14E6A8; // type:func
RenderCrvcSegment__FP4CRVCiP7MATRIX4P2CMG4RGBAi                  = 0x14E710; // type:func
ConvertCrvc__FP4CRVCP7MATRIX4T1                                  = 0x14E828; // type:func
SFromCrvcU__FP4CRVCf                                             = 0x14E910; // type:func
UFromCrvcS__FP4CRVCf                                             = 0x14E990; // type:func
MeasureCrvc__FP4CRVC                                             = 0x14EA48; // type:func
FindCrvcClosestPointAll__FP4CRVCP6VECTORP6CONSTRT1T1PfT5         = 0x14EB10; // type:func
FindCrvcClosestPointFromU__FP4CRVCP6VECTORfP6CONSTRT1T1PfT6      = 0x14EC70; // type:func
FindCrvcClosestPointFromS__FP4CRVCP6VECTORfP6CONSTRT1T1PfT6      = 0x14ED98; // type:func


////////////////////////////////////////////////////////////////
// P2/dart.c
////////////////////////////////////////////////////////////////
InitDart__FP4DART                             = 0x14EE40; // type:func
OnDartAdd__FP4DART                            = 0x14EE70; // type:func
RemoveDart__FP4DART                           = 0x14EF00; // type:func
CloneDart__FP4DARTT0                          = 0x14EF40; // type:func
LoadDartFromBrx__FP4DARTP18CBinaryInputStream = 0x14EF88; // type:func
HandleDartMessage__FP4DART5MSGIDPv            = 0x14EFB8; // type:func
PostDartLoad__FP4DART                         = 0x14F020; // type:func
UpdateDart__FP4DARTf                          = 0x14F058; // type:func
SetDartDarts__FP4DART5DARTS                   = 0x14F110; // type:func
ApplyDartThrow__FP4DARTP2PO                   = 0x14F168; // type:func
UpdateDartAirborne__FP4DARTf                  = 0x14F270; // type:func

s_asnipDart = 0x261CC8;


////////////////////////////////////////////////////////////////
// P2/dartgun.c
////////////////////////////////////////////////////////////////
InitDartgun__FP7DARTGUN                     = 0x14F740; // type:func
HandleDartgunMessage__FP7DARTGUN5MSGIDPv    = 0x14F770; // type:func
BindDartgun__FP7DARTGUN                     = 0x14F850; // type:func
FUN_0014f900                                = 0x14F900; // type:func
PostDartgunLoad__FP7DARTGUN                 = 0x14F920; // type:func
UpdateDartgun__FP7DARTGUNf                  = 0x14FA88; // type:func
FIgnoreDartgunIntersection__FP7DARTGUNP2SO  = 0x14FBE0; // type:func
BreakDartgun__FP7DARTGUN                    = 0x14FC38; // type:func
SetDartgunGoalState__FP7DARTGUN3OID         = 0x14FCE8; // type:func
TrackDartgun__FP7DARTGUNP3OID               = 0x14FDA8; // type:func
FPrepareDartgunToFire__FP7DARTGUN           = 0x14FEC0; // type:func
FireDartgun__FP7DARTGUN                     = 0x150008; // type:func
AgeDartgunStuckDart__FP7DARTGUN             = 0x150298; // type:func
PratGetDartgunRatTarget__FP7DARTGUN         = 0x150338; // type:func
AddDartgunRatTarget__FP7DARTGUN3OID         = 0x1503E0; // type:func
StartDartgunTargetAreaChange__FP7DARTGUN    = 0x150408; // type:func
AddDartgunTargetAreaTarget__FP7DARTGUNP3ALO = 0x150418; // type:func


////////////////////////////////////////////////////////////////
// P2/dialog.c
////////////////////////////////////////////////////////////////
InitDialog__FP6DIALOG                             = 0x1504E0; // type:func
LoadDialogFromBrx__FP6DIALOGP18CBinaryInputStream = 0x150528; // type:func
LoadDialogEventsFromBrx__FP6DIALOGP18CBinaryInputStreamPiPP2DE = 0x150570; // type:func
PostDialogLoad__FP6DIALOG                         = 0x1506F0; // type:func
SetDialogInstruct__FP6DIALOG                      = 0x150750; // type:func
SetDialogConfront__FP6DIALOG                      = 0x150760; // type:func
GetDialogPlayed__FP6DIALOGPi                      = 0x150770; // type:func
SetDialogPlayed__FP6DIALOGi                       = 0x150780; // type:func
SetDialogDialogs__FP6DIALOG7DIALOGS               = 0x150790; // type:func
UpdateDialog__FP6DIALOGf                          = 0x150AE8; // type:func
HandleDialogEvent__FP6DIALOGP2DE                  = 0x150DC0; // type:func
HandleDialogMessage__FP6DIALOG5MSGIDPv            = 0x1512A8; // type:func
FPauseDialog__FP6DIALOG                           = 0x151300; // type:func
FUN_001516c0                                      = 0x1516C0; // type:func
HandleDialogEvents__FP6DIALOG                     = 0x1517C0; // type:func
FUN_00151860__FP6DIALOGP4BLOT                     = 0x151860; // type:func
TriggerDialog__FP6DIALOG                          = 0x1518B8; // type:func
UntriggerDialog__FP6DIALOG                        = 0x1519A8; // type:func

// TODO: Is this in the right place?
g_pdialogPlaying = 0x27051C;


////////////////////////////////////////////////////////////////
// P2/difficulty.c
////////////////////////////////////////////////////////////////
PdifficultyEnsureSw = 0x1519E0; // type:func
FUN_00151A58 = 0x151A58; // type:func
OnDifficultyGameLoad__FP10DIFFICULTY = 0x151A68; // type:func
OnDifficultyWorldPreLoad = 0x151A88; // type:func
OnDifficultyWorldPostLoad = 0x151D28; // type:func
OnDifficultyInitialTeleport__FP10DIFFICULTY = 0x151E18; // type:func
OnDifficultyPlayerDeath = 0x151E20; // type:func
OnDifficultyTriggerCheckpoint__FP10DIFFICULTYP6CHKPNT = 0x151ED8; // type:func
OnDifficultyCollectKey__FP10DIFFICULTY = 0x151FC8; // type:func
OnDifficultyBreak = 0x152010; // type:func
ChangeSuck__FfP10DIFFICULTY = 0x152410; // type:func

g_difficultyMedium = 0x261d70; // size:0x5c
g_difficultyHard = 0x261e30; // size:0x5c
g_difficultyEasy = 0x261e90; // size:0x5c
g_difficulty = 0x261ef0; // size:0x20


////////////////////////////////////////////////////////////////
// P2/dl.c
////////////////////////////////////////////////////////////////
InitDl__FP2DLi = 0x152438; // type:func
ClearDl__FP2DL = 0x152440; // type:func
ClearDle__FP3DLE = 0x152450; // type:func
PdleFromDlEntry__FP2DLPv = 0x152460; // type:func
AppendDlEntry__FP2DLPv = 0x152470; // type:func
PrependDlEntry__FP2DLPv = 0x1524D8; // type:func
InsertDlEntryBefore__FP2DLPvT1 = 0x152540; // type:func
junk_001525F8 = 0x1525F8; // type:func
RemoveDlEntry__FP2DLPv = 0x152600; // type:func
FFindDlEntry__FP2DLPv = 0x1526D0; // type:func
FIsDlEmpty__FP2DL = 0x152720; // type:func
MergeDl__FP2DLT0 = 0x152730; // type:func
CPvDl__FP2DL = 0x1527D8; // type:func

s_pdliFirst = 0x27B314; // size:0x4


////////////////////////////////////////////////////////////////
// P2/dmas.c
////////////////////////////////////////////////////////////////
StartupDma__Fv = 0x152810; // type:func
__4DMAS = 0x152888; // type:func
Clear__4DMAS = 0x1528C8; // type:func
Reset__4DMAS = 0x1528E0; // type:func
AllocGlobal__4DMASi = 0x1528F0; // type:func
AllocSw__4DMASii = 0x152938; // type:func
AllocStack__4DMASi = 0x152980; // type:func
AllocStatic__4DMASiP2QW = 0x1529C8; // type:func
Detach__4DMASPiPP2QW = 0x1529E0; // type:func
DetachCopySw__4DMASPiPP2QWT2i = 0x152A50; // type:func
Send__4DMASP10sceDmaChan = 0x152AE0; // type:func
junk_00152B30 = 0x152B30; // type:func
AddDmaCnt__4DMAS = 0x152B38; // type:func
AddDmaRefs__4DMASiP2QW = 0x152B80; // type:func
AddDmaCall__4DMASP2QW = 0x152C18; // type:func
AddDmaRet__4DMAS = 0x152CA0; // type:func
AddDmaBulk__4DMASiP2QW = 0x152CE0; // type:func
AddDmaEnd__4DMAS = 0x152D30; // type:func
EndDmaCnt__4DMAS = 0x152D70; // type:func
EndPrim__4DMASi = 0x152E18; // type:func
junk_00152E20 = 0x152E20; // type:func

_vt$4DMAS = 0x24A0E0; // size:0x10

g_pdcVif0 = 0x261f14; // size:0x4
g_pdcVif1 = 0x261f18; // size:0x4
g_pdcGif = 0x261f1c; // size:0x4
g_pdcFromSpr = 0x261f20; // size:0x4
g_pdcToSpr = 0x261f24; // size:0x4


////////////////////////////////////////////////////////////////
// P2/dysh.c
////////////////////////////////////////////////////////////////
InitDysh__FP4DYSH               = 0x152E28; // type:func
SetDyshShadow__FP4DYSHP6SHADOW  = 0x152E48; // type:func
RenderDyshSelf__FP4DYSHP2CMP2RO = 0x153328; // type:func
DrawDysh__FP3RPL                = 0x1533A8; // type:func


////////////////////////////////////////////////////////////////
// P2/dzg.c
////////////////////////////////////////////////////////////////
InitDzg__FP3DZGi                     = 0x153528; // type:func
ClearDzgSolution__FP3DZG             = 0x153608; // type:func
AppendDzgDz__FP3DZGP2DZ              = 0x1536C8; // type:func
FillDzgDz__FP3DZGiP2DZiPP2XPPiPPP2SO = 0x153780; // type:func
EnforceDzgDz__FP3DZGP2DZ             = 0x153A50; // type:func
SolveDzg__FP3DZGiiPP2XPPiPPP2SO      = 0x153EC0; // type:func
SolveDzgFric__FP3DZGiiPP2XPPiPPP2SOf = 0x154088; // type:func
ApplyDzg__FP3DZGiPiPPP2SOff          = 0x154370; // type:func
SolveInequalities__FiPfN21           = 0x154880; // type:func


////////////////////////////////////////////////////////////////
// P2/emitter.c
////////////////////////////////////////////////////////////////
InitEmitb__FP5EMITB                                              = 0x1549C8; // type:func
InitEmitter__FP7EMITTER                                          = 0x154C10; // type:func
LoadEmitmeshFromBrx__FP8EMITMESHP18CBinaryInputStream            = 0x154C80; // type:func
LoadEmitblipColorsFromBrx__FP8EMITBLIPiP2LOP18CBinaryInputStream = 0x154EE0; // type:func
LoadEmitterFromBrx__FP7EMITTERP18CBinaryInputStream              = 0x154F98; // type:func
CloneEmitter__FP7EMITTERT0                                       = 0x155080; // type:func
BindEmitterCallback__FP7EMITTER5MSGIDPv                          = 0x1550B8; // type:func
BindEmitter__FP7EMITTER                                          = 0x1550E8; // type:func
PostEmitterLoad__FP7EMITTER                                      = 0x155270; // type:func
HandleEmitterMessage__FP7EMITTER5MSGIDPv                         = 0x155678; // type:func
PemitbCopyOnWrite__FP5EMITB                                      = 0x1556E8; // type:func
PemitbEnsureEmitter__FP7EMITTER4ENSK                             = 0x155778; // type:func
PemitterEnsureEmitter__FP7EMITTER4ENSK                           = 0x1557B8; // type:func
AddEmitterSkeleton__FP7EMITTER3OIDT1ffff                         = 0x1557D0; // type:func
ModifyEmitterParticles__FP7EMITTER                               = 0x155868; // type:func
UpdateEmitter__FP7EMITTERf                                       = 0x155AB0; // type:func
FUN_00155f28                                                     = 0x155F28; // type:func
PauseEmitter__FP7EMITTERf                                        = 0x155F78; // type:func
PauseEmitterIndefinite__FP7EMITTER                               = 0x155F90; // type:func
UnpauseEmitter__FP7EMITTER                                       = 0x155FA0; // type:func
FPausedEmitter__FP7EMITTER                                       = 0x155FB0; // type:func
SetEmitterEnabled__FP7EMITTERi                                   = 0x156000; // type:func
GetEmitterEnabled__FP7EMITTERPi                                  = 0x156030; // type:func
GetEmitterPaused__FP7EMITTERPi                                   = 0x156060; // type:func
OnEmitterValuesChanged__FP7EMITTER                               = 0x156088; // type:func
SetEmitterParticleCount__FP7EMITTERi                             = 0x156108; // type:func
SetEmitterAutoPause__FP7EMITTERi                                 = 0x156178; // type:func
SetEmitbRipt__FP5EMITB4RIPT                                      = 0x156188; // type:func
SetEmitterRipt__FP7EMITTER4RIPT                                  = 0x156218; // type:func
SetExploRipt__FP5EXPLO4RIPT                                      = 0x156250; // type:func
WakeSoWater__FP2SOP5WATERfP6VECTORT3ff                           = 0x156288; // type:func
StandardSmokeCloud__FP6VECTORf                                   = 0x1566C8; // type:func
ChooseEmitoPos__FP5EMITOiiP6VECTORT3                             = 0x156718; // type:func
ConvertEmitoPosVec__FP5EMITOP6VECTORT1                           = 0x156F08; // type:func
CalculateEmitvx__FiP2LMiP6EMITVX                                 = 0x156FC8; // type:func
ChooseEmitVelocity__FP6EMITVXffP2LMP6VECTORiT4                   = 0x157098; // type:func
ChooseEmitvVelocityAge__FP5EMITVP6EMITVXP5EMITOiP6VECTORN24PfT7  = 0x157248; // type:func
EmitRips__FP5EMITBP5EMITGiP6VECTORT3PfT5                         = 0x157320; // type:func
EmitBlips__FP5EMITBP5EMITGiP6VECTORT3PfT5T3T3                    = 0x1575D8; // type:func
OriginateParticles__FiP5EMITBP7EMITGEN                           = 0x1579B0; // type:func
OriginateSplineSinkParticles__FiP5EMITBR7EMITGENT2               = 0x157B88; // type:func
EmitParticles__FiP5EMITBP5EMITG                                  = 0x157E00; // type:func
EmitRipsSphere__FP6VECTORT0iP7EMITRIPP5EMITVPP4RIPGP2LO          = 0x157EF8; // type:func
StockSplashBig__FP6VECTORfP2SO                                   = 0x157FF8; // type:func
StockSplashSmall__FP6VECTORfP2SO                                 = 0x158108; // type:func
AddEmitoSkeleton__FP5EMITO3OIDT1ffffP2LO                         = 0x158198; // type:func
BindEmitb__FP5EMITBP2LO                                          = 0x158288; // type:func
SetEmitdvEmitb__FP6EMITDVP5EMITB                                 = 0x1583E8; // type:func
CalculateEmitdvMatrix__FP6EMITDVfP7MATRIX4                       = 0x158480; // type:func
PostExplLoad__FP4EXPL                                            = 0x1585F8; // type:func
CalculateExplTransform__FP4EXPLP6VECTORP7MATRIX3                 = 0x158630; // type:func
ExplodeExpl__FP4EXPL                                             = 0x158730; // type:func
ExplodeExplParams__FP4EXPLUiP3ALOP6VECTORT3ff                    = 0x158778; // type:func
ExplodeExplExplso__FP4EXPLP6EXPLSO                               = 0x1587C0; // type:func
LoadExplgFromBrx__FP5EXPLGP18CBinaryInputStream                  = 0x1587C8; // type:func
CloneExplg__FP5EXPLGT0                                           = 0x158980; // type:func
BindExplg__FP5EXPLG                                              = 0x158A10; // type:func
ExplodeExplgExplso__FP5EXPLGP6EXPLSO                             = 0x158A80; // type:func
InitExplo__FP5EXPLO                                              = 0x158B00; // type:func
LoadExploFromBrx__FP5EXPLOP18CBinaryInputStream                  = 0x158B30; // type:func
CloneExplo__FP5EXPLOT0                                           = 0x158C28; // type:func
BindExplo__FP5EXPLO                                              = 0x158C60; // type:func
ExplodeExploExplso__FP5EXPLOP6EXPLSO                             = 0x158D38; // type:func
AddExploSkeleton__FP5EXPLO3OIDT1ffff                             = 0x158D40; // type:func
PemitbEnsureExplo__FP5EXPLO4ENSK                                 = 0x158DD8; // type:func
InitExpls__FP5EXPLS                                              = 0x158E10; // type:func
BindExpls__FP5EXPLS                                              = 0x158E48; // type:func
HandleExplsMessage__FP5EXPLS5MSGIDPv                             = 0x158F10; // type:func
ExplodeExplsExplso__FP5EXPLSP6EXPLSO                             = 0x158F80; // type:func
PsfxEnsureExpls__FP5EXPLS4ENSK                                   = 0x159068; // type:func
FireExplsExplso__FP5EXPLSP6EXPLSO                                = 0x1590A0; // type:func
InferExpl__FPP4EXPLP3ALO                                         = 0x159478; // type:func
FireSwTimedExplodeStyles__FP2SW                                  = 0x159588; // type:func

DAT_0024a124 = 0x24A124; // size:0x4


////////////////////////////////////////////////////////////////
// P2/eyes.c
////////////////////////////////////////////////////////////////
InitEyes__FP4EYESP4SAAF       = 0x159680; // type:func
PostEyesLoad__FP4EYES         = 0x1596E0; // type:func
SetEyesEyess__FP4EYES5EYESS   = 0x159770; // type:func
UpdateEyes__FP4EYESf          = 0x159890; // type:func
SetEyesClosed__FP4EYESf       = 0x159A00; // type:func
PsaiFromEyesShd__FP4EYESP3SHD = 0x159A80; // type:func


////////////////////////////////////////////////////////////////
// P2/fader.c
////////////////////////////////////////////////////////////////
UpdateFader__FP5FADERf = 0x159AD0; // type:func
PfaderNew__FP3ALO      = 0x159BB0; // type:func
RemoveFader__FP5FADER  = 0x159C28; // type:func


////////////////////////////////////////////////////////////////
// P2/UNKNOWN1
////////////////////////////////////////////////////////////////
FUN_00159ca0 = 0x159CA0; // type:func
FUN_00159d00 = 0x159D00; // type:func
FUN_00159ed0 = 0x159ED0; // type:func


////////////////////////////////////////////////////////////////
// P2/find.c
////////////////////////////////////////////////////////////////
PdlFromSwOid__FP2SW3OID = 0x159F20; // type:func
MatchSwObject__FP2LOiiiT0iPiPP2LOT6 = 0x159F48; // type:func
CploFindSwObjects__FP2SWi3OIDP2LOiPP2LO = 0x15A198; // type:func
PloFindSwObject__FP2SWi3OIDP2LO = 0x15A418; // type:func
PloFindSwNearest__FP2SW3OIDP2LO = 0x15A448; // type:func
PloFindSwChild__FP2SW3OIDP3ALO = 0x15A480; // type:func
FIsCidDerivedFrom__F3CIDT0 = 0x15A4B8; // type:func
CploFindSwObjectsByClass__FP2SWi3CIDP2LOiPP2LO = 0x15A4F0; // type:func
PloFindSwObjectByClass__FP2SWi3CIDP2LO = 0x15A838; // type:func
PaloFindLoCommonParent__FP2LOT0 = 0x15A868; // type:func

g_mpcidpvt = 0x247448; // size:0x328


////////////////////////////////////////////////////////////////
// P2/flash.c
////////////////////////////////////////////////////////////////
junk_0015A8B0 = 0x15A8B0; // type:func
InitFlash__FP5FLASH = 0x15A8B8; // type:func
LoadFlashFromBrx__FP5FLASHP18CBinaryInputStream = 0x15A918; // type:func
UpdateFlash__FP5FLASHf = 0x15A960; // type:func
RenderFlashSelf__FP5FLASHP2CMP2RO = 0x15A9A8; // type:func
FPosFlashWithin__FP5FLASHP6VECTOR = 0x15AA50; // type:func


////////////////////////////////////////////////////////////////
// P2/fly.c
////////////////////////////////////////////////////////////////
InitFly__FP3FLY                             = 0x15AAE0; // type:func
LoadFlyFromBrx__FP3FLYP18CBinaryInputStream = 0x15AC08; // type:func
CloneFly__FP3FLYT0                          = 0x15AD80; // type:func
FreezeFly__FP3FLYi                          = 0x15AE38; // type:func
PostFlyLoad__FP3FLY                         = 0x15AEB0; // type:func
PresetFlyAccel__FP3FLYf                     = 0x15AF50; // type:func
UpdateFly__FP3FLYf                          = 0x15B128; // type:func
RenderFlySelf__FP3FLYP2CMP2RO               = 0x15B4D0; // type:func
FAbsorbFlyWkr__FP3FLYP3WKR                  = 0x15B720; // type:func
SetFlyFlys__FP3FLY4FLYS                     = 0x15B7B8; // type:func
EmitFlyDroppings__FP3FLY                    = 0x15BC78; // type:func
FFindFlyClosestLandingPos__FP3FLYP6VECTOR   = 0x15BD48; // type:func
FlysAttemptedFlyLanding__FP3FLY             = 0x15BEF0; // type:func
FShouldFlyFlee__FP3FLY                      = 0x15BFC0; // type:func
FFilterFly__FPvP2SO                         = 0x15C058; // type:func
FCheckFlyOpenSpaceBelow__FP3FLY             = 0x15C0A0; // type:func


////////////////////////////////////////////////////////////////
// P2/font.c
////////////////////////////////////////////////////////////////
StartupFont__Fv                                = 0x15C178; // type:func
FUN_0015c188                                   = 0x15C188; // type:func
FUN_0015c1c0                                   = 0x15C1C0; // type:func
FUN_0015c200                                   = 0x15C200; // type:func
CopyTo__5CFontP5CFont                          = 0x15C260; // type:func
SetupDraw__5CFontP8CTextBoxP4GIFS              = 0x15C2E8; // type:func
CleanupDraw__5CFontP8CTextBoxP4GIFS            = 0x15C3C0; // type:func
DxFromPchz__5CFontPc                           = 0x15C418; // type:func
DyWrapPchz__5CFontPcf                          = 0x15C4A8; // type:func
ClineWrapPchz__5CFontPcf                       = 0x15C4E8; // type:func
junk_0015C630                                  = 0x15C630; // type:func
DrawPchz__5CFontPcP8CTextBoxT2P4GIFS           = 0x15C638; // type:func
PushScaling__5CFontff                          = 0x15C8b8; // type:func
PopScaling__5CFont                             = 0x15C900; // type:func
PfontClone__8CFontBrxff                        = 0x15C930; // type:func
CopyTo__8CFontBrxP8CFontBrx                    = 0x15C9B0; // type:func
FValid__8CFontBrxc                             = 0x15CA38; // type:func
DxFromCh__8CFontBrxc                           = 0x15CA60; // type:func
FEnsureLoaded__8CFontBrxP4GIFS                 = 0x15CAB8; // type:func
SetupDraw__8CFontBrxP8CTextBoxP4GIFS           = 0x15CB88; // type:func
SwitchTex0__8CFontBrxP4GIFS                    = 0x15CC80; // type:func
DxDrawCh__8CFontBrxcffUiP4GIFS                 = 0x15CD18; // type:func
FUN_0015cf70                                   = 0x15CF70; // type:func
DrawPart__8CFontBrxffffffffUiP4GIFS            = 0x15D338; // type:func
EdgeRect__8CFontBrxP9CTextEdgeP8CTextBoxP4GIFS = 0x15D4E0; // type:func
LoadFromBrx__8CFontBrxP18CBinaryInputStream    = 0x15D8A8; // type:func
PostLoad__8CFontBrxP3GSB                       = 0x15D998; // type:func
PglyffFromCh__8CFontBrxc                       = 0x15DAB8; // type:func
__9CRichTextPcP5CFont                          = 0x15DB28; // type:func
Reset__9CRichText                              = 0x15DB80; // type:func
SetBaseColor__9CRichTextP4RGBA                 = 0x15DBB8; // type:func
ChNext__9CRichText                             = 0x15DBE0; // type:func
Cch__9CRichText                                = 0x15DF58; // type:func
Trim__9CRichTexti                              = 0x15DFA0; // type:func
Dx__9CRichText                                 = 0x15DFF8; // type:func
ClineWrap__9CRichTextf                         = 0x15E068; // type:func
FUN_0015e1b0                                   = 0x15E1B0; // type:func
DxMaxLine__9CRichText                          = 0x15E1F0; // type:func
GetExtents__9CRichTextPfT1f                    = 0x15E290; // type:func
Draw__9CRichTextP8CTextBoxT1P4GIFS             = 0x15E318; // type:func
PostFontsLoad__Fv                              = 0x15E5F0; // type:func
junk_0015E678                                  = 0x15E678; // type:func

g_pfont = 0x26227C; // size:0x4


////////////////////////////////////////////////////////////////
// P2/frm.c
////////////////////////////////////////////////////////////////
VU1_Interrupt__Fi = 0x15E6A8; // type:func
StartupFrame__Fv = 0x15E810; // type:func
OpenFrame__Fv = 0x15E9F0; // type:func
EnsureVu1Code__FP4VIFSPvT1 = 0x15EAE0; // type:func
FinalizeFrameVifs__FP4VIFSPiPP2QW = 0x15EB20; // type:func
FinalizeFrameGifs__FP4GIFSPiPP2QW = 0x15EBF0; // type:func
CloseFrame__Fv = 0x15EC68; // type:func
PrepareGsForFrameRender__FP3FRM = 0x15ED50; // type:func
check_anticrack_antigrab__Fv = 0x15EDB8; // type:func
FrameRenderLoop__FPv = 0x15EE80; // type:func
RenderFrame__FP3FRMi = 0x15EF88; // type:func
ClearPendingFrame__FP3FRM = 0x15EFE8; // type:func
FlushFrames__Fi = 0x15F210; // type:func
BlendPrevFrame__Fv = 0x15F320; // type:func

g_cframe    = 0x2622cc; // size:0x4
g_pvVu1Code = 0x26230c; // size:0x4

// TODO: Should these be elsewhere?
g_psliCur = 0x2622D4; // size:0x4
g_aqwGifsBackgroundUpload = 0x274538; // size:0x4


////////////////////////////////////////////////////////////////
// P2/freeze.c
////////////////////////////////////////////////////////////////
RemergeSwObject__FP2SWP3ALO       = 0x15F678; // type:func
MergeSwFreezeGroups__FP2SWP3ALOT1 = 0x15F6C0; // type:func
SplinterSwFreezeGroup__FP2SWP3ALO = 0x15F710; // type:func
MergeSwGroup__FP2SWP3MRG          = 0x15F7D8; // type:func
AddSwMergeGroup__FP2SWP3MRG       = 0x15F8B0; // type:func
RemoveFromArray__FPiPPvPv         = 0x15F930; // type:func
RemoveSwMergeGroup__FP2SWP3MRG    = 0x15F9A0; // type:func
RemergeSwObjects__FP2SW           = 0x15FA58; // type:func
FreezeAloHierarchy__FP3ALOi       = 0x15FB28; // type:func
GetAloFrozen__FP3ALOPi            = 0x15FBA0; // type:func
FreezeAlo__FP3ALOi                = 0x15FBB8; // type:func
FreezeSo__FP2SOi                  = 0x15FCD8; // type:func
RefreezeSwObjects__FP2SW          = 0x15FD78; // type:func
UpdateSwBusyList__FP2SW           = 0x15FF58; // type:func


////////////////////////////////////////////////////////////////
// P2/frzg.c
////////////////////////////////////////////////////////////////
PostFrzgLoad__FP4FRZG      = 0x15FF88; // type:func
AddFrzgObject__FP4FRZG3OID = 0x160050; // type:func


////////////////////////////////////////////////////////////////
// P2/game.c
// TODO mangle function names
////////////////////////////////////////////////////////////////
StartupGame__Fv = 0x160070; // type:func

junk_00160090 = 0x160090; // type:func
search_level_by_load_data = 0x1600A0; // type:func
search_level_by_id = 0x160110; // type:func
PchzFriendlyFromWid = 0x160148; // type:func
junk_00160178 = 0x160178; // type:func
call_search_level_by_id = 0x160180; // type:func
FFindLevel = 0x1601A0; // type:func
junk_001601D0 = 0x1601D0; // type:func
get_level_completion_by_id = 0x1601D8; // type:func
tally_world_completion = 0x160208; // type:func
get_game_completion__Fv = 0x1602A0; // type:func
UnlockIntroCutsceneFromWid__Fi = 0x160340; // type:func
DefeatBossFromWid = 0x1603E8; // type:func
UnlockEndgameCutscenesFromFgs = 0x1604B8; // type:func
PlayEndingFromCompletionFlags = 0x160578; // type:func

InitGameState__FP2GS = 0x1605E8; // type:func

FUN_00160650 = 0x160650; // type:func

SetupGame__FPci = 0x160690; // type:func
UpdateGameState__Ff = 0x1607D0; // type:func

LsFromWid = 0x160810; // type:func
GrflsFromWid__F3WID = 0x160850; // type:func

UnloadGame__Fv = 0x160880; // type:func
RetryGame__Fv = 0x1608E0; // type:func
StartGame__Fv = 0x160918; // type:func

FUN_00160948 = 0x160948; // type:func
CalculatePercentCompletion__FP2GS = 0x160B28; // type:func

SetCcharm__Fi = 0x160C48; // type:func
FCharmAvailable__Fv = 0x160C58; // type:func
FUN_00160C90 = 0x160C90; // type:func
PfLookupDialog__FP2LS3OID = 0x160CA0; // type:func

clr_8_bytes_1 = 0x160CC8; // type:func
FUN_00160ce8__Fi = 0x160CE8; // type:func
OnGameAlarmTriggered__FP4GAME = 0x160CF0; // type:func
OnGameAlarmDisabled__FP4GAME = 0x160D00; // type:func
GetGrfvault_unknown__Fv = 0x160D10; // type:func

GetBlueprintInfo__FPiT0 = 0x160D30; // type:func
CcharmMost__Fv = 0x160D98; // type:func

reload_post_death = 0x160DA0; // type:func

// data
D_00247AB0 = 0x247ab0; // size:0x2c
g_pgsCur = 0x2623c0; // size:0x4
g_pwsCur = 0x2623c4; // size:0x4
g_plsCur = 0x2623c8; // size:0x4
g_worldlevelPrev = 0x2623cc; // size:0x4
chz_none = 0x2623d0; // size:0x7

// static
g_gsCur = 0xea0; // size:0x1a00


////////////////////////////////////////////////////////////////
// P2/geom.c
////////////////////////////////////////////////////////////////
InitGeom__FP4GEOM             = 0x160E80; // type:func
CloneGeom__FP4GEOMP7MATRIX4T0 = 0x160EA0; // type:func
FUN_00161028                  = 0x161028; // type:func


////////////////////////////////////////////////////////////////
// P2/gifs.c
////////////////////////////////////////////////////////////////
__4GIFS                      = 0x1611B8; // type:func
AddPrimEnd__4GIFS            = 0x161200; // type:func
EndPrim__4GIFSi              = 0x161278; // type:func
CheckReg__4GIFSii            = 0x1612E8; // type:func
AddPrimBulk__4GIFSiiiUlPP2QW = 0x1612F8; // type:func
AddPrimPack__4GIFSiiUl       = 0x1613C0; // type:func
PackRGBA__4GIFSUi            = 0x161458; // type:func
PackUV__4GIFSii              = 0x1614C8; // type:func
PackSTQ__4GIFSfff            = 0x161520; // type:func
PackXYZ__4GIFSiii            = 0x161588; // type:func
PackXYZF__4GIFSiiii          = 0x1615F0; // type:func
PackXYZFNoKick__4GIFSiiii    = 0x161670; // type:func
PackAD__4GIFSll              = 0x161708; // type:func
junk_00161760                = 0x161760; // type:func
AddPrimList__4GIFSiUl        = 0x161768; // type:func
ListRGBAQ__4GIFSUif          = 0x1617E8; // type:func
junk_00161858                = 0x161858; // type:func
ListUV__4GIFSii              = 0x161860; // type:func
ListXYZF__4GIFSiiii          = 0x1618C0; // type:func
junk_00161950                = 0x161950; // type:func
AddImage__4GIFSi             = 0x161958; // type:func

_vt$DMAS = 0x24A6F8;


////////////////////////////////////////////////////////////////
// P2/glbs.c
////////////////////////////////////////////////////////////////
__4GLBS                              = 0x1619C0; // type:func
_$_4GLBS                             = 0x161A88; // type:func
SetTransform__4GLBSP6VECTORP7MATRIX3 = 0x161AB0; // type:func
FindLights__4GLBSP6VECTORf           = 0x161B10; // type:func
ResetStrip__4GLBS                    = 0x161B80; // type:func
BeginStrip__4GLBSP3SHD               = 0x161BB0; // type:func
DrawPrelit__4GLBS                    = 0x161C00; // type:func
DrawThreeWay__4GLBS                  = 0x161F70; // type:func
EndStrip__4GLBS                      = 0x162508; // type:func
SetNormal__4GLBSP6VECTOR             = 0x162680; // type:func
junk_001626A0                        = 0x1626A0; // type:func
SetRgba__4GLBSG4RGBA                 = 0x1626A8; // type:func
SetUv__4GLBSP3UVF                    = 0x1626C0; // type:func
AddVtx__4GLBSi                       = 0x1626D8; // type:func


////////////////////////////////////////////////////////////////
// P2/glob.c
////////////////////////////////////////////////////////////////
BuildGlobsetSaaArray__FP7GLOBSET                         = 0x162810; // type:func
LoadGlobsetFromBrx__FP7GLOBSETP18CBinaryInputStreamP3ALO = 0x162890; // type:func
EnsureBuffer__FiP4VIFS                                   = 0x163938; // type:func
EnsureBufferCel__FiP4VIFS                                = 0x163990; // type:func
BuildSubcel__FP7GLOBSETiP6SUBCELiP7VECTORFiP4TWEFP8SUBPOSEFT4PfP4VIFS = 0x1639E8; // type:func
BuildSubglobSinglePass__FP7GLOBSETP4GLOBiP7SUBGLOBP3SHDP7VECTORFT5P4RGBAP3UVFiP4VTXFP8SUBPOSEFT5T5PfP4VIFSP4SGVR = 0x163ED8; // type:func
BuildSubglobThreeWay__FP7GLOBSETP4GLOBiP7SUBGLOBP3SHDP7VECTORFT5P4RGBAP3UVFiP4VTXFP8SUBPOSEFT5T5PfP4VIFSP4SGVR   = 0x164868; // type:func
BuildSubglobLighting__FP4GLOBP7SUBGLOBP8SUBGLOBI = 0x165588; // type:func
PostGlobsetLoad__FP7GLOBSETP3ALO                 = 0x165728; // type:func
BindGlobset__FP7GLOBSETP3ALO                     = 0x165828; // type:func
CloneGlobset__FP7GLOBSETP3ALOT0                  = 0x165920; // type:func
CloneGlob__FP7GLOBSETP4GLOBP5GLOBI               = 0x165AE8; // type:func
UpdateGlobset__FP7GLOBSETP3ALOf                  = 0x165FE0; // type:func
UpdateAloConstraints__FP3ALO                     = 0x1660A0; // type:func
UpdateAloInfluences__FP3ALOP2RO                  = 0x1660E8; // type:func
PredrawGlob__FP7GLOBSETP4GLOBP5GLOBIP3ALO        = 0x1662A8; // type:func
RotateVu1Buffer__Fv                              = 0x166658; // type:func
DrawGlob__FP3RPL                                 = 0x166690; // type:func
glob__static_initialization_and_destruction_0    = 0x167D20; // type:func
_GLOBAL_$I$g_dro                                 = 0x167D48; // type:func


////////////////////////////////////////////////////////////////
// P2/gomer.c
////////////////////////////////////////////////////////////////
InitGomer__FP5GOMER               = 0x167D68; // type:func
PostGomerLoad__FP5GOMER           = 0x167E08; // type:func
RenderGomerSelf__FP5GOMERP2CMP2RO = 0x167EF0; // type:func
FDetectGomer__FP5GOMER            = 0x167F10; // type:func


////////////////////////////////////////////////////////////////
// P2/gs.c
// Graphics synthesizer
////////////////////////////////////////////////////////////////
BlendDisplayOnBufferMismatch__Fv = 0x168130; // type:func
VBlankS_Interrupt__Fi = 0x1682C0; // type:func
SyncVBlank__Fv = 0x1683B8; // type:func
SwapGsBuffers__Fv = 0x1683E8; // type:func
RestoreGsBuffers__Fv = 0x1684E8; // type:func
GS_Interrupt__Fi = 0x1685B8; // type:func
ResetGs__Fv = 0x168698; // type:func
SendDmaSyncGsFinish__FP10sceDmaChanP2QW = 0x1686E8; // type:func
BuildClearGifs__FP2QWG4RGBAi = 0x168770; // type:func
StartupGs__Fv = 0x1688B8; // type:func
BlastAqwGifsBothFrames__FP2QW = 0x168A48; // type:func
ClearFrameBuffers__Fv = 0x168AF8; // type:func
FadeFramesToBlack__Ff = 0x168B68; // type:func
ResetGsMemory__Fv = 0x168D00; // type:func
NLog2__FUi = 0x168D30; // type:func
InitGsb__FP3GSBii = 0x168D68; // type:func
ResetGsb__FP3GSB = 0x168D78; // type:func
IgsAllocGsb__FP3GSBi = 0x168D88; // type:func
BuildImageGifs__FiiiiiiP4GIFS = 0x168D98; // type:func
BuildClutTex2__FP4CLUTi = 0x168E78; // type:func
BuildClutGifs__FP4CLUTiP4GIFS = 0x168F48; // type:func
BuildBmpTex0__FP3BMPi = 0x168FB0; // type:func
BuildBmpGifs__FP3BMPiP4GIFS = 0x169088; // type:func
FBuildUploadBitmapGifs__FiP3GSBP4GIFS = 0x1690C0; // type:func
UploadBitmaps__FiP3GSB = 0x1692B0; // type:func
PqwGifsBitmapUpload__Fi = 0x1693A8; // type:func
PropagateSur__FP3SUR = 0x1694A0; // type:func
ReferenceShaderAqwRegs__FP3SHDP4SHDPP2QWiiP3SAI = 0x1694F8; // type:func
ReferenceUVAnimation__FP2QWiP3SAI = 0x169608; // type:func
RebaseSurs__FiiPvT2 = 0x1696B8; // type:func
PropagateSurs__Fv = 0x169718; // type:func
PqwVifsBitmapUpload__Fi = 0x169780; // type:func
DrawOnBitmap__FP3BMPP4GIFS = 0x169B18; // type:func


////////////////////////////////////////////////////////////////
// P2/hide.c
////////////////////////////////////////////////////////////////
StartupHide__Fv                                = 0x169C58; // type:func
ResetHideList__Fv                              = 0x169CA0; // type:func
InitHshape__FP6HSHAPE                          = 0x169CD8; // type:func
OnHshapeAdd__FP6HSHAPE                         = 0x169D20; // type:func
OnHshapeRemove__FP6HSHAPE                      = 0x169D58; // type:func
BindHshape__FP6HSHAPE                          = 0x169D90; // type:func
CloneHshape__FP6HSHAPET0                       = 0x169DD8; // type:func
GetHshapeHidePos__FP6HSHAPEfP6VECTORPf         = 0x169E20; // type:func
GetHshapeClosestHidePos__FP6HSHAPEPfP6VECTORT1 = 0x169FC0; // type:func
InitHpnt__FP4HPNT                              = 0x16A100; // type:func
OnHpntAdd__FP4HPNT                             = 0x16A140; // type:func
OnHpntRemove__FP4HPNT                          = 0x16A178; // type:func
BindHpnt__FP4HPNT                              = 0x16A1B0; // type:func
CloneHpnt__FP4HPNTT0                           = 0x16A1F8; // type:func
GetHpntClosestHidePos__FP4HPNTP6VECTORPf       = 0x16A240; // type:func
FUN_0016a320                                   = 0x16A320; // type:func
InitHbsk__FP4HBSK                              = 0x16A3A8; // type:func
LoadHbskFromBrx__FP4HBSKP18CBinaryInputStream  = 0x16A420; // type:func
OnHbskAdd__FP4HBSK                             = 0x16A490; // type:func
OnHbskRemove__FP4HBSK                          = 0x16A4C8; // type:func
CloneHbsk__FP4HBSKT0                           = 0x16A500; // type:func
FIgnoreHbskIntersection__FP4HBSKP2SO           = 0x16A548; // type:func
PresetHbskAccel__FP4HBSKf                      = 0x16A580; // type:func
SetHbskHbsks__FP4HBSK5HBSKS                    = 0x16A5F0; // type:func
CdartStuckHbsk__FP4HBSK                        = 0x16A758; // type:func
PdartOldestHbskStuck__FP4HBSK                  = 0x16A820; // type:func
GetHbskClosestHidePos__FP4HBSKP6VECTORPf       = 0x16A910; // type:func

g_dlHshape = 0x2626E8; // size:0xc
g_dlHpnt   = 0x2626F8; // size:0xc
g_dlHbsk   = 0x262708; // size:0xc


////////////////////////////////////////////////////////////////
// P2/hnd.c
////////////////////////////////////////////////////////////////
InitHnd__FP3HND                             = 0x16C470; // type:func
LoadHndFromBrx__FP3HNDP18CBinaryInputStream = 0x16C4B8; // type:func
junk_0016c4d8                               = 0x16C4D8; // type:func

D_0024A7DC = 0x24A7DC; // size:0x4


////////////////////////////////////////////////////////////////
// P2/ik.c
////////////////////////////////////////////////////////////////
RenderIkhSelf__FP3IKHP2CMP2RO   = 0x16C4E8; // type:func
RenderLikhSelf__FP4LIKHP2CMP2RO = 0x16C508; // type:func
SolveAloIK__FP3ALO              = 0x16C528; // type:func


////////////////////////////////////////////////////////////////
// P2/jlo.c
////////////////////////////////////////////////////////////////
InitJlo__FP3JLO                               = 0x16CE00; // type:func
LoadJloFromBrx__FP3JLOP18CBinaryInputStream   = 0x16CE80; // type:func
PostJloLoad__FP3JLO                           = 0x16CF70; // type:func
FUN_0016d040                                  = 0x16D040; // type:func
PresetJloAccel__FP3JLOf                       = 0x16D0C0; // type:func
UpdateJlo__FP3JLOf                            = 0x16D128; // type:func
JlosNextJlo__FP3JLO                           = 0x16D1E0; // type:func
SetJloJlovol__FP3JLOP6JLOVOL                  = 0x16D3F0; // type:func
FireJlo__FP3JLO                               = 0x16D490; // type:func
LandJlo__FP3JLO                               = 0x16D788; // type:func
JumpJlo__FP3JLO                               = 0x16D828; // type:func
FUN_0016d928                                  = 0x16D928; // type:func
FUN_0016d9a8                                  = 0x16D9A8; // type:func
HandleJloMessage__FP3JLO5MSGIDPv              = 0x16DA00; // type:func
SetJloJlos__FP3JLO4JLOS                       = 0x16DAC0; // type:func
ActivateJlo__FP3JLO                           = 0x16DCF0; // type:func
DeactivateJlo__FP3JLO                         = 0x16DD00; // type:func
InitJloc__FP4JLOC                             = 0x16DD10; // type:func
LoadJlocFromBrx__FP4JLOCP18CBinaryInputStream = 0x16DD90; // type:func
PostJlocLoad__FP4JLOC                         = 0x16DDE8; // type:func
PxfmChooseJloc__FP4JLOC                       = 0x16DE20; // type:func
InitJlovol__FP6JLOVOL                         = 0x16DF30; // type:func
BindJlovol__FP6JLOVOL                         = 0x16DF68; // type:func
HandleJlovolMessage__FP6JLOVOL5MSGIDPv        = 0x16DFE0; // type:func

g_pjloCur = 0x2629c8; // size:0x4
s_asnipLoadJlo = 0x2629d0;


////////////////////////////////////////////////////////////////
// P2/joy.c
////////////////////////////////////////////////////////////////
StartupJoy__Fv = 0x16E0B8; // type:func
AddGrfusr__Fi = 0x16E0F0; // type:func
RemoveGrfusr__Fi = 0x16E118; // type:func
UpdateGrfjoytFromGrfusr__Fv = 0x16E148; // type:func
InitJoy__FP3JOYii = 0x16E1A0; // type:func
UpdateJoy__FP3JOY = 0x16E238; // type:func
SetJoyJoys__FP3JOY4JOYS4JOYK = 0x16E630; // type:func
GetJoyXYDeflection__FP3JOYUcUcPfN23PUcT6PiP2LM = 0x16E738; // type:func
FReadJoy__FP3JOY = 0x16E940; // type:func
SetJoyBtnHandled__FP3JOYUs = 0x16EC20; // type:func
TriggerJoyRumbleRumk__FP3JOY4RUMKf = 0x16EC38; // type:func
junk_0016EC80 = 0x16EC80; // type:func
StartJoySelection__FP3JOY = 0x16EC88; // type:func
DxSelectionJoy__FP3JOY = 0x16EC98; // type:func
DySelectionJoy__FP3JOY = 0x16EED0; // type:func
UBtnpJoy__FP3JOY4BTNP = 0x16F108; // type:func
AddCode__FP4CODE = 0x16F188; // type:func
junk_0016F1F0 = 0x16F1F0; // type:func
_ResetCodes__Fv = 0x16F1F8; // type:func
_MatchCodes__FP3JOYUs = 0x16F238; // type:func
UpdateCodes__Fv = 0x16F2E0; // type:func
ClearFchts__Fv = 0x16F408; // type:func
AddFcht__Fi = 0x16F430; // type:func
junk_0016F470 = 0x16F470; // type:func
Chetkido__Fv = 0x16F478; // type:func
StartupCodes__Fv = 0x16F588; // type:func

g_aja = 0x262A30; // size:0x20
g_mpbtnpfbtn = 0x262A50; // size:0x18
g_grfcht = 0x262C64; // size:0x4
g_grfjoyt = 0x262C68; // size:0x4
g_grfusr = 0x262C6C; // size:0x4
g_joy = 0x262C70; // size:0xc4
g_joyZero = 0x262D38; // size:0xc4
g_pcode = 0x262DFC; // size:0x4
g_tCodeCheck = 0x262E00;


////////////////////////////////////////////////////////////////
// P2/jt.c
////////////////////////////////////////////////////////////////
InitJt__FP2JT = 0x16F608; // type:func
LoadJtFromBrx__FP2JTP18CBinaryInputStream = 0x16F7B0; // type:func
PostJtLoad__FP2JT = 0x16F810; // type:func
PresetJtAccelBase = 0x16FD70; // type:func
PresetJtAccel__FP2JTf = 0x1701B0; // type:func
AdjustJtNewXp__FP2JTP2XPi = 0x170410; // type:func
AdjustJtDz__FP2JTiP2DZif = 0x170528; // type:func
HandleJtGrfjtsc = 0x1705C8; // type:func
UpdateJtInternalXps__FP2JT = 0x170660; // type:func
FCheckJtXpBase__FP2JTP2XPi = 0x170790; // type:func
AdjustJtXpVelocity__FP2JTP2XPi = 0x170820; // type:func
HandleJtMessage__FP2JT5MSGIDPv = 0x170960; // type:func
FTurnJtToTarget__FP2JT = 0x171180; // type:func
UpdateJtBalance__FP2JT = 0x171238; // type:func
RebuildJtXmg__FP2JTP3ALOfT1P6ACTADJP3XMG = 0x1719E8; // type:func
FMatchJtXmg__FP2JTP3XMGP6ACTADJ = 0x171C80; // type:func
UpdateJtStand__FP2JT = 0x171DD8; // type:func
ThrowJt__FP2JTP6VECTORff = 0x171F28; // type:func
UnhookJt__FP2JT = 0x171FE0; // type:func
CalculateJtToolSpin__FP2JTfP7MATRIX3 = 0x172078; // type:func
RenderJtAll__FP2JTP2CMP2RO = 0x1721B0; // type:func
FUN_00172530 = 0x172530; // type:func
FUN_001725e0 = 0x1725E0; // type:func
UpdateJtTool__FP2JT = 0x1727B0; // type:func
FUN_00172898 = 0x172898; // type:func
UpdateJtPosWorldPrev__FP2JT = 0x172AE0; // type:func
FUN_00172b08 = 0x172B08; // type:func
UpdateJtBounds__FP2JT = 0x172B88; // type:func
PsoGetJtEffect__FP2JTPi = 0x172BF8; // type:func
AddJtCustomXps__FP2JTP2SOiP3BSPT3PP2XP = 0x172CF0; // type:func
CtTorqueJt__FP2JT = 0x172EB8; // type:func
FUN_00172ee0 = 0x172EE0; // type:func
GetJtCpdefiFlatten__FP2JTP6CPDEFI = 0x1733B8; // type:func
FUN_00173708 = 0x173708; // type:func
FUN_00173750 = 0x173750; // type:func
UpdateJtActive__FP2JTP3JOYf = 0x173888; // type:func
UpdateJt__FP2JTf = 0x174808; // type:func
UpdateJtDrive__FP2JT = 0x174E20; // type:func
ChooseJtPhys__FP2JT = 0x174F50; // type:func
EnableJtActadj__FP2JTi = 0x175078; // type:func
SetJtJts__FP2JT3JTS4JTBS = 0x175170; // type:func
ProfileJt__FP2JTi = 0x1777F8; // type:func
SetJtPuppet__FP2JTP5ASEGA = 0x177800; // type:func
FUN_00177828 = 0x177828; // type:func
PaloAbsorbWkr__FP3WKRiPP3ALO = 0x177838; // type:func
NCmpWkr__FP3WKRT0 = 0x177968; // type:func
UpdateJtEffect__FP2JT = 0x177990; // type:func
FIsJtSoundBase__FP2JT = 0x177E20; // type:func
CollectJtPrize__FP2JT3PCKP3ALO = 0x177E70; // type:func
GetJtDiapi__FP2JTP6DIALOGP5DIAPI = 0x177EE0; // type:func
PlayJtDialog__FP2JTP6DIALOG = 0x177F98; // type:func

g_pjt = 0x262e10; // size:0x4


////////////////////////////////////////////////////////////////
// P2/jsg.c
////////////////////////////////////////////////////////////////
InitJsg__FP3JSG                      = 0x17B998; // type:func
GetJsgLocation__FP3JSGP2LOP6VECTORPf = 0x17B9D0; // type:func
SetJsgFocus__FP3JSGP2LO              = 0x17BB78; // type:func
SetJsgTn__FP3JSGP2TN                 = 0x17BC20; // type:func
NextJsgJsge__FP3JSG                  = 0x17BCD0; // type:func
FIsJsgJsgeComplete__FP3JSGP4JSGE     = 0x17C428; // type:func
UpdateJsgJsge__FP3JSG                = 0x17C660; // type:func
ReadJsgJoystick__FP3JSGP3JOY         = 0x17C718; // type:func
FIsJsgActive__FP3JSG                 = 0x17CDA8; // type:func
ClearJsg__FP3JSG                     = 0x17CDE0; // type:func
ApplyJsg__FP3JSGP2JT                 = 0x17CE20; // type:func
RetractJsg__FP3JSG                   = 0x17CE80; // type:func
PjsgeAllocJsg__FP3JSG5JSGEK3OIDi     = 0x17CF38; // type:func
AddJsgContext__FP3JSG3OID            = 0x17CFC8; // type:func
AddJsgCut__FP3JSG3OID                = 0x17CFF0; // type:func
AddJsgFocus__FP3JSG3OID              = 0x17D018; // type:func
AddJsgLabel__FP3JSG3OID              = 0x17D040; // type:func
AddJsgTunnel__FP3JSG3OID             = 0x17D078; // type:func
AddJsgPause__FP3JSG3OIDf             = 0x17D0A0; // type:func
AddJsgAseg__FP3JSG3OIDi              = 0x17D0D8; // type:func
AddJsgJump__FP3JSG3OID5JSGJK5JSGLKi  = 0x17D100; // type:func
AddJsgRun__FP3JSG3OIDfi              = 0x17D148; // type:func
AddJsgClimb__FP3JSG3OIDfi            = 0x17D180; // type:func
AddJsgAttack__FP3JSG3OID4FTAKi       = 0x17D1B8; // type:func
AddJsgClock__FP3JSGf                 = 0x17D1E8; // type:func
AddJsgUnknown__FP3JSG                = 0x17D220; // type:func

s_jsge = 0x2BE478;


////////////////////////////////////////////////////////////////
// P2/jump.c
////////////////////////////////////////////////////////////////
PresetJtAccelJump__FP2JT                    = 0x17D248; // type:func
UpdateJtActiveJump__FP2JTP3JOY              = 0x17D5D8; // type:func
FCheckJtSingleEdge__FP2JTP2SOP4EDGEP6VECTOR = 0x17DCE0; // type:func
FCheckJtEdgeNormal__FP2JTP6VECTORT1         = 0x17DE88; // type:func
FCheckJtEdgeGrab__FP2JTP2SOP6VECTOR3XPKPvT2 = 0x17E088; // type:func
PxpFindJtBestEdge__FP2JTPiP6VECTOR          = 0x17E3C8; // type:func
JtsResetJt__FP2JT                           = 0x17E6D0; // type:func
HandleJtDiveEffect__FP2JT                   = 0x17E710; // type:func
FUN_0017ece8                                = 0x17ECE8; // type:func
UpdateJtJump__FP2JT                         = 0x17F018; // type:func
FTimeJtJumpToTarget__FP2JTP6VECTORN31Pf     = 0x17FAC0; // type:func
GetJtJumpVelocity__FP2JTP6VECTOR            = 0x17FB78; // type:func
GetJtJumpToTargetVelocity__FP2JTP6VECTOR    = 0x17FC48; // type:func
GetJtJumpBoostVelocity__FP2JTP6VECTOR       = 0x17FCC8; // type:func
StartupJmt__Fv                              = 0x17FD48; // type:func
ResetJmtList__Fv                            = 0x17FD70; // type:func
OnJmtAdd__FP3JMT                            = 0x17FD90; // type:func
OnJmtRemove__FP3JMT                         = 0x17FDC8; // type:func
CloneJmt__FP3JMTT0                          = 0x17FE00; // type:func
PostJmtLoad__FP3JMT                         = 0x17FE48; // type:func

g_dlJmt = 0x264088; // size:0xc


////////////////////////////////////////////////////////////////
// P2/keyhole.c
////////////////////////////////////////////////////////////////
InitKeyhole__FP7KEYHOLE                             = 0x17FE90; // type:func
LoadKeyholeFromBrx__FP7KEYHOLEP18CBinaryInputStream = 0x17FEC0; // type:func
DrawKeyholeMask__FP7KEYHOLEffff                     = 0x180108; // type:func
DrawKeyhole__FP7KEYHOLEf                            = 0x180398; // type:func
keyhole__static_initialization_and_destruction_0    = 0x180E38; // type:func
_GLOBAL_$I$InitKeyhole__FP7KEYHOLE                  = 0x180E90; // type:func

g_pkeyhole = 0x2640A4; // size:0x4


////////////////////////////////////////////////////////////////
// P2/landing.c
////////////////////////////////////////////////////////////////
OnLandingAdd__FP7LANDING    = 0x180EB0; // type:func
OnLandingRemove__FP7LANDING = 0x180EE8; // type:func
CloneLanding__FP7LANDINGT0  = 0x180F20; // type:func


////////////////////////////////////////////////////////////////
// P2/lgn.c
////////////////////////////////////////////////////////////////
InitLgn__FP3LGN                  = 0x180F68; // type:func
PostLgnLoad__FP3LGN              = 0x180F98; // type:func
UpdateLgnActive__FP3LGNP3JOYf    = 0x181078; // type:func
UpdateLgn__FP3LGNf               = 0x181448; // type:func
FUN_00181658                     = 0x181658; // type:func
OnLgnActive__FP3LGNiP2PO         = 0x181780; // type:func
RenderLgnAll__FP3LGNP2CMP2RO     = 0x181818; // type:func
GetLgnCpdefi__FP3LGNfP6CPDEFI    = 0x181A58; // type:func
FInvulnerableLgn__FP3LGN3ZPK     = 0x181A98; // type:func
JthsCurrentLgn__FP3LGN           = 0x181AE0; // type:func
UseLgnCharm__FP3LGN              = 0x181AF0; // type:func
ApplyLgnThrow__FP3LGNP2PO        = 0x181B20; // type:func
FTakeLgnDamage__FP3LGNP3ZPR      = 0x181BC8; // type:func
HandleLgnMessage__FP3LGN5MSGIDPv = 0x181D28; // type:func
FUN_00181d88                     = 0x181D88; // type:func
SetLgnLgns__FP3LGN4LGNS          = 0x181DA8; // type:func
UpdateLgnrAim__FP4LGNRP3JOY      = 0x181ED0; // type:func
DrawLgnr__FP4LGNR                = 0x1821B0; // type:func
InitSwp__FP3SWP                  = 0x182470; // type:func
PostSwpLoad__FP3SWP              = 0x1824D8; // type:func
UpdateSwp__FP3SWPf               = 0x182548; // type:func
ProjectSwpTransform__FP3SWPfi    = 0x182748; // type:func
SetSwpShape__FP3SWPP5SHAPEf      = 0x182948; // type:func


////////////////////////////////////////////////////////////////
// P2/lo.c
////////////////////////////////////////////////////////////////
InitLo__FP2LO = 0x182c18; // type:func
PostLoLoad__FP2LO = 0x182c58; // type:func
AddLo__FP2LO = 0x182c80; // type:func
AddLoHierarchy__FP2LO = 0x182d00; // type:func
OnLoAdd__FP2LO = 0x182d48; // type:func
RemoveLo__FP2LO = 0x182d50; // type:func
DeferLoRemove__FP2LO = 0x182dd8; // type:func
SetLoSuckHideLimits__FP2LOP2LM = 0x182e40; // type:func
RemoveLoHierarchy__FP2LO = 0x182e88; // type:func
OnLoRemove__FP2LO = 0x182ed0; // type:func
SnipLo__FP2LO = 0x182ed8; // type:func
FFindLoParent__FP2LOP3ALO = 0x182f40; // type:func
SetLoParent__FP2LOP3ALO = 0x182f78; // type:func
FIsLoInWorld__FP2LO = 0x182fc8; // type:func
GetLoInWorld__FP2LOPi = 0x183028; // type:func
junk_00183050 = 0x183050; // type:func
PloCloneLo__FP2LOP2SWP3ALO = 0x183058; // type:func
CloneLoHierarchy__FP2LOT0 = 0x1830b0; // type:func
CloneLo__FP2LOT0 = 0x1830d8; // type:func
SubscribeSwPpmqStruct__FP2SWPP2MQPFPv5MSGIDPv_vPv = 0x1831e8; // type:func
UnsubscribeSwPpmqStruct__FP2SWPP2MQPFPv5MSGIDPv_vPv = 0x183238; // type:func
SubscribeLoStruct__FP2LOPFPv5MSGIDPv_vPv = 0x183290; // type:func
UnsubscribeLoStruct__FP2LOPFPv5MSGIDPv_vPv = 0x1832c0; // type:func
SubscribeLoObject__FP2LOT0 = 0x1832f0; // type:func
UnsubscribeLoObject__FP2LOT0 = 0x183320; // type:func
SendLoMessage__FP2LO5MSGIDPv = 0x183350; // type:func
LoadLoFromBrx__FP2LOP18CBinaryInputStream = 0x1833d0; // type:func
FMatchesLoName__FP2LO3OID = 0x1833f0; // type:func
OidProxyLo__FP2LO = 0x183438; // type:func
OidProxyLoPreferred__FP2LO = 0x183458; // type:func
GetLoOidProxy__FP2LOP3OID = 0x183478; // type:func
PostSpliceEventCallback__FP2LOUiPv = 0x1834a0; // type:func
FFilterSpliceEvent__FP2LO7SYMEVIDiPPv = 0x183668; // type:func
HandleLoSpliceEvent__FP2LOUiiPPv = 0x1837e0; // type:func
EnsureLoSidebagBool__FP2LO5OPTIDi = 0x183910; // type:func
EnsureLoSidebagInt__FP2LO5OPTIDi = 0x183990; // type:func
EnsureLoSidebagFloat__FP2LO5OPTIDf = 0x183a10; // type:func
EnsureLoSidebagClq__FP2LO5OPTIDP3CLQ = 0x183a90; // type:func
EnsureLoSidebagLm__FP2LO5OPTIDP2LM = 0x183b20; // type:func
EnsureLoSidebagOid__FP2LO5OPTID3OID = 0x183bb8; // type:func
EnsureLoSidebagVector__FP2LO5OPTIDP6VECTOR = 0x183c38; // type:func


////////////////////////////////////////////////////////////////
// P2/light.c
////////////////////////////////////////////////////////////////
InitLight__FP5LIGHT                            = 0x183CC8; // type:func
UpdateLightXfWorldHierarchy__FP5LIGHT          = 0x183D88; // type:func
RemoveLightFromSw__FP5LIGHT                    = 0x183DC0; // type:func
AddLightToSw__FP5LIGHT                         = 0x183DF8; // type:func
OnLightAdd__FP5LIGHT                           = 0x183E40; // type:func
OnLightRemove__FP5LIGHT                        = 0x183E70; // type:func
CloneLight__FP5LIGHTT0                         = 0x183EA0; // type:func
FitLinearFunction__FffffPfT4                   = 0x183F40; // type:func
FitRecipFunction__FffffPfT4                    = 0x183FE0; // type:func
ConvertFallOff__FP2LMPfT1                      = 0x1840B8; // type:func
ConvertAngleStrength__FffffPfT4                = 0x1840F0; // type:func
InvalidateLight__FP5LIGHT                      = 0x1841B0; // type:func
RebuildLightVifs__FP5LIGHT                     = 0x1841D0; // type:func
SetLightKind__FP5LIGHT6LIGHTK                  = 0x184768; // type:func
SetLightHighlightColor__FP5LIGHTP6VECTOR       = 0x1847F0; // type:func
SetLightMidtoneStrength__FP5LIGHTf             = 0x184818; // type:func
SetLightShadowStrength__FP5LIGHTf              = 0x184838; // type:func
SetLightHighlightAngle__FP5LIGHTf              = 0x184858; // type:func
SetLightMidtoneAngle__FP5LIGHTf                = 0x184878; // type:func
SetLightShadowAngle__FP5LIGHTf                 = 0x184898; // type:func
SetLightDirection__FP5LIGHTP6VECTOR            = 0x1848B8; // type:func
SetLightDynamic__FP5LIGHTi                     = 0x184968; // type:func
SetLightFallOff__FP5LIGHTP2LM                  = 0x184990; // type:func
SetLightConeAngle__FP5LIGHTf                   = 0x1849D0; // type:func
SetLightHotSpotAngle__FP5LIGHTf                = 0x184A08; // type:func
SetLightFrustrumUp__FP5LIGHTP6VECTOR           = 0x184A38; // type:func
RebuildLightFrustrum__FP5LIGHT                 = 0x184A70; // type:func
UpdateLightBeamGrfzon__FP5LIGHT                = 0x184B58; // type:func
SetLightDiffuse_Old__FP5LIGHTf                 = 0x184CD0; // type:func
GetLightDiffuse_Old__FP5LIGHTPf                = 0x184D10; // type:func
SetLightSaturate_Old__FP5LIGHTP6VECTOR         = 0x184D20; // type:func
GetLightSaturate_Old__FP5LIGHTP6VECTOR         = 0x184D58; // type:func
NCmpFindLight__FPP5LIGHTT0                     = 0x184D78; // type:func
PrepareSwLightsForDraw__FP2SW                  = 0x184DE8; // type:func
TwpsFindSwLights__FP2SWP6VECTORfiiPiT5PP5LIGHT = 0x185150; // type:func

g_cframeStaticLightsInvalid = 0x264260; // size:0x4


////////////////////////////////////////////////////////////////
// P2/lookat.c
////////////////////////////////////////////////////////////////
InitActla__FP5ACTLAP3ALO                         = 0x185358; // type:func
SetActlaTarget__FP5ACTLAP3ALOP6VECTOR            = 0x1853F0; // type:func
PaloGetActlaTarget__FP5ACTLA                     = 0x185468; // type:func
UpdateActla__FP5ACTLAf                           = 0x185498; // type:func
GetActlaRotationGoal__FP5ACTLAfP7MATRIX3P6VECTOR = 0x185538; // type:func


////////////////////////////////////////////////////////////////
// P2/main.c
////////////////////////////////////////////////////////////////
main           = 0x185758; // type:func
StartupSif__Fv = 0x1858f8; // type:func
StartupVU0__Fv = 0x185A58; // type:func
StartupVU1__Fv = 0x185AC8; // type:func
Startup__Fv    = 0x185B38; // type:func

s_apchzSifModules = 0x2647A8; // size:0x18
s_asfn            = 0x2647C0; // size:0x74
g_cpchzArgs       = 0x264834; // size:0x4
g_apchzArgs       = 0x264838; // size:0x4


////////////////////////////////////////////////////////////////
// P2/mark.c
////////////////////////////////////////////////////////////////
MuFromAmtlk__FP4MTLK                                   = 0x185C18; // type:func
ElasFromAmtlk__FP4MTLK                                 = 0x185CA0; // type:func
PxpAdd__FP2SOT0P6VECTORT2f3XPKPvT6PP2XP                = 0x185D20; // type:func
RecalcSwXpPos__FP2SWiPP2XP                             = 0x185F48; // type:func
RecalcSwXpMovement__FP2SWiPP2XP                        = 0x1860A8; // type:func
FreeSwXpList__FP2SWP2XP                                = 0x1861E8; // type:func
FindClosestPointOnLine__FP6VECTORN20PfT3               = 0x186230; // type:func
FindClosestPointOnLineSegment__FP6VECTORN20PfT3        = 0x186320; // type:func
ClsgClipSoAllEdges__FP2SOT0P3BSPiP3LSG                 = 0x186450; // type:func
ClsgClipSoBspEdges__FP2SOT0iP3BSPiP3LSG                = 0x186568; // type:func
CategorizeAlsg__FiP3LSGPiT2PP3LSGT4                    = 0x1867C8; // type:func
CplsgFindEdgePath__FP4SURFiiP3LSGPP3LSG                = 0x186A70; // type:func
MarkSoContactsBspBsp__FP2SOT0iP3BSPT3PP2XP             = 0x186BA8; // type:func
CsbiIntersectSphereBsp__FP6VECTORfiP3BSPT3P4GEOMiP3SBI = 0x187260; // type:func
MarkSoContactsSphereBsp__FP2SOP6VECTORfT0iP3BSPT5PP2XP = 0x1879C0; // type:func
MarkSoContactsSphereSphere__FP2SOT0PP2XP               = 0x187A88; // type:func
CalculateCenterContact__FP2SOP6VECTORfT1Pf             = 0x187B60; // type:func
FMarkSoContactsCenterBsp__FP2SOT0iP3BSPT3PP2XP         = 0x187C28; // type:func
FClipEdgeToSphere__FP6VECTORfT0T0PfT0T0T4              = 0x187D08; // type:func
FMarkSoContactsCenterSphere__FP2SOT0PP2XP              = 0x187E88; // type:func
AddSoXps__FP2SOT0iiP3BSPT4PP2XP                        = 0x187F40; // type:func
PxpMarkSwContactsRoot__FP2SWPP2SOi                     = 0x188270; // type:func


////////////////////////////////////////////////////////////////
// P2/mat.c
////////////////////////////////////////////////////////////////
PostCopyMatrix3__7MATRIX4                                = 0x1884C0; // type:func
__as__7MATRIX4RC7MATRIX3                                 = 0x1884E0; // type:func
MatMulMatTransMat__FRC7MATRIX3T0                         = 0x188520; // type:func
LoadIdentityMatrix4__FP7MATRIX4                          = 0x1885E0; // type:func
__ml__FRC7MATRIX4G8VU_FLOAT                              = 0x188628; // type:func
__ml__FRC7MATRIX4T0                                      = 0x188668; // type:func
junk_001886F8                                            = 0x1886F8; // type:func
MultiplyMatrix4Vector__FP7MATRIX4P6VECTORfT1             = 0x188700; // type:func
__ml__FRC7MATRIX4G10VU_VECTOR4                           = 0x188740; // type:func
TransposeMatrix4__FP7MATRIX4T0                           = 0x188770; // type:func
AddMatrix4Matrix4__FP7MATRIX4N20                         = 0x188810; // type:func
junk_00188848                                            = 0x188848; // type:func
LoadRotateMatrixRad__FfP6VECTORP7MATRIX3                 = 0x188850; // type:func
LoadRotateMatrix__FP6VECTORP7MATRIX3                     = 0x188978; // type:func
LoadRotateMatrixEuler__FP6VECTORP7MATRIX3                = 0x188A20; // type:func
LoadMatrixFromPosRot__FP6VECTORP7MATRIX3P7MATRIX4        = 0x188B08; // type:func
LoadMatrixFromPosRotInverse__FP6VECTORP7MATRIX3P7MATRIX4 = 0x188B48; // type:func
LoadMatrixFromPosRotScale__FP6VECTORP7MATRIX3T0P7MATRIX4 = 0x188C10; // type:func
junk_00188CC8                                            = 0x188CC8; // type:func
CosRotateMatrixMagnitude__FP7MATRIX3                     = 0x188CE0; // type:func
DecomposeRotateMatrixRad__FP7MATRIX3PfP6VECTOR           = 0x188D28; // type:func
junk_00188FD0                                            = 0x188FD0; // type:func
DecomposeRotateMatrixEuler__FP7MATRIX3P6VECTOR           = 0x188FD8; // type:func
NormalizeRotateMatrix3__FP7MATRIX3                       = 0x1890A0; // type:func
CalculateDmat__FP7MATRIX3N20                             = 0x189150; // type:func
CalculateDmat4__FP7MATRIX4N20                            = 0x1891C0; // type:func
DecomposeRotateMatrixPanTilt__FP7MATRIX3PfT1             = 0x189230; // type:func
LoadRotateMatrixPanTilt__FffP7MATRIX3                    = 0x1892A0; // type:func
LoadLookAtMatrix__FP6VECTORP7MATRIX3                     = 0x189350; // type:func
TiltMatUpright__FP7MATRIX3N20                            = 0x189378; // type:func
junk_00189430                                            = 0x189430; // type:func
FInvertMatrix__FiPfT1                                    = 0x189438; // type:func
FInvertMatrix3__FP7MATRIX3T0                             = 0x1897F0; // type:func
FInvertMatrix4__FP7MATRIX4T0                             = 0x189AF0; // type:func
BuildOrthonormalMatrixY__FP6VECTORT0P7MATRIX3            = 0x189B18; // type:func
BuildOrthonormalMatrixZ__FP6VECTORT0P7MATRIX3            = 0x189C28; // type:func
BuildRotateVectorsMatrix__FP6VECTORT0P7MATRIX3           = 0x189D38; // type:func
BuildSimpleProjectionMatrix__FffffffP7MATRIX4            = 0x189F58; // type:func
LoadScaleMatrixScalar__FP6VECTORfP7MATRIX4               = 0x18A008; // type:func
LoadScaleMatrixVector__FP6VECTORP7MATRIX3T0P7MATRIX4     = 0x18A040; // type:func
LoadRotateVectorMatrix__FP6VECTORT0P7MATRIX3             = 0x18A160; // type:func

// TODO: Do these belong here?
g_normalX = 0x248D00; // size:0xc
g_normalY = 0x248D10; // size:0xc
g_normalZ = 0x248D20; // size:0xc


////////////////////////////////////////////////////////////////
// P2/mb.c
////////////////////////////////////////////////////////////////
InitMbg__FP3MBG                                     = 0x18A388; // type:func
LoadMbgFromBrx__FP3MBGP18CBinaryInputStream         = 0x18A3B8; // type:func
PostMbgLoad__FP3MBG                                 = 0x18A3F0; // type:func
FUN_0018a510                                        = 0x18A510; // type:func
FUN_0018a628                                        = 0x18A628; // type:func
PsoHitTestCylinderObjects__FiP6VECTORT1fiPP2SOP3LSG = 0x18A6C0; // type:func
FFilterMbgAttackObjects__FP3MBGP2SO                 = 0x18A830; // type:func
FObstructedMbg__FP3MBGP6VECTORT1                    = 0x18A910; // type:func
FCanMbgAttack__FP3MBG                               = 0x18A9A8; // type:func
FDetectMbg__FP3MBG                                  = 0x18AAE0; // type:func
FUN_0018ab88__Fi                                    = 0x18AB88; // type:func
FUN_0018abf0__Fi                                    = 0x18ABF0; // type:func
FUN_0018ac58__Fi                                    = 0x18AC58; // type:func
UpdateMbg__FP3MBGf                                  = 0x18ACD0; // type:func
FUN_0018acf0                                        = 0x18ACF0; // type:func
UpdateMbgGoal__FP3MBGi                              = 0x18AD88; // type:func
UpdateMbgSgs__FP3MBG                                = 0x18AE38; // type:func
OnMgExitingSgs__FP3MBG3SGS                          = 0x18B2E8; // type:func
HandleMbgMessage__FP3MBG5MSGIDPv                    = 0x18B340; // type:func
FUN_0018b460                                        = 0x18B460; // type:func

s_asnipLoadMbg = 0x264910;


////////////////////////////////////////////////////////////////
// P2/memcard.c
// TODO: Mangle function names.
// NOTE: These can be incorrect as they are not found in the may prototype.
////////////////////////////////////////////////////////////////
StartupMemcard__Fv                   = 0x18B580; // type:func
InitMemcard__FP7MEMCARD              = 0x18B5C0; // type:func
FUN_0018b600__Fv                     = 0x18B600; // type:func
CreateMemcardThread__FP7MEMCARDii    = 0x18B670; // type:func
SetMemcardThreadHighPrio__FP7MEMCARD = 0x18B720; // type:func
FCheckMemcardThread__FP7MEMCARD      = 0x18B770; // type:func
FUN_0018b780                         = 0x18B780; // type:func
FUN_0018b910__Fi                     = 0x18B910; // type:func
FUN_0018b930__Fi                     = 0x18B930; // type:func
FUN_0018b988                         = 0x18B988; // type:func
FUN_0018bc90                         = 0x18BC90; // type:func
Download .txt
gitextract_7h7wlxdh/

├── .gitattributes
├── .github/
│   └── workflows/
│       ├── build.yml
│       ├── frogress.yml
│       └── progress.yml
├── .gitignore
├── README.md
├── config/
│   ├── checksum.sha1
│   ├── readme.md
│   ├── sly1.yaml
│   ├── sly1_may19.yaml
│   ├── symbol_addrs.txt
│   ├── symbol_addrs_may19.txt
│   └── symbol_addrs_old.txt
├── configure.py
├── docs/
│   ├── BEGINNERSGUIDE.md
│   ├── CONTRIBUTING.md
│   ├── DISTROBOX.md
│   └── STYLEGUIDE.md
├── include/
│   ├── 989snd.h
│   ├── ac.h
│   ├── act.h
│   ├── actseg.h
│   ├── alarm.h
│   ├── alo.h
│   ├── aseg.h
│   ├── asega.h
│   ├── barrier.h
│   ├── bas.h
│   ├── basic.h
│   ├── bbmark.h
│   ├── bez.h
│   ├── binoc.h
│   ├── bis.h
│   ├── blend.h
│   ├── blip.h
│   ├── bomb.h
│   ├── bq.h
│   ├── break.h
│   ├── brx.h
│   ├── bsp.h
│   ├── button.h
│   ├── cat.h
│   ├── cd.h
│   ├── chkpnt.h
│   ├── cid.h
│   ├── clip.h
│   ├── clock.h
│   ├── cm.h
│   ├── cnvo.h
│   ├── coin.h
│   ├── common.h
│   ├── cplcy.h
│   ├── credit.h
│   ├── crout.h
│   ├── crusher.h
│   ├── crv.h
│   ├── dart.h
│   ├── dartgun.h
│   ├── dialog.h
│   ├── difficulty.h
│   ├── dl.h
│   ├── dmas.h
│   ├── dysh.h
│   ├── dzg.h
│   ├── emitter.h
│   ├── ensure.h
│   ├── eyes.h
│   ├── fader.h
│   ├── find.h
│   ├── flash.h
│   ├── fly.h
│   ├── font.h
│   ├── freeze.h
│   ├── frm.h
│   ├── frzg.h
│   ├── game.h
│   ├── gcc/
│   │   └── math.h
│   ├── geom.h
│   ├── gifs.h
│   ├── glbs.h
│   ├── glob.h
│   ├── gomer.h
│   ├── gs.h
│   ├── hide.h
│   ├── hnd.h
│   ├── ik.h
│   ├── include_asm.h
│   ├── intrinsics.h
│   ├── jlo.h
│   ├── joy.h
│   ├── jsg.h
│   ├── jt.h
│   ├── jump.h
│   ├── keyhole.h
│   ├── labels.inc
│   ├── landing.h
│   ├── lgn.h
│   ├── lib/
│   │   └── libkernl/
│   │       └── filestub.h
│   ├── light.h
│   ├── lo.h
│   ├── lookat.h
│   ├── macro.inc
│   ├── mark.h
│   ├── mat.h
│   ├── mb.h
│   ├── memcard.h
│   ├── memory.h
│   ├── missile.h
│   ├── mpeg.h
│   ├── mq.h
│   ├── mrkv.h
│   ├── ms.h
│   ├── murray.h
│   ├── oid.h
│   ├── path.h
│   ├── phasemem.h
│   ├── pipe.h
│   ├── pnt.h
│   ├── po.h
│   ├── prog.h
│   ├── proxy.h
│   ├── puffer.h
│   ├── pzo.h
│   ├── rail.h
│   ├── rat.h
│   ├── rchm.h
│   ├── render.h
│   ├── rip.h
│   ├── rog.h
│   ├── rs.h
│   ├── rumble.h
│   ├── rwm.h
│   ├── sb.h
│   ├── sce/
│   │   ├── libdma.h
│   │   ├── memset.h
│   │   └── rand.h
│   ├── screen.h
│   ├── sdk/
│   │   ├── ee/
│   │   │   ├── eekernel.h
│   │   │   ├── eestruct.h
│   │   │   ├── libpad.h
│   │   │   ├── sifdev.h
│   │   │   └── sifrpc.h
│   │   └── libcdvd.h
│   ├── sensor.h
│   ├── shadow.h
│   ├── shape.h
│   ├── shd.h
│   ├── shdanim.h
│   ├── sky.h
│   ├── slotheap.h
│   ├── sm.h
│   ├── smartguard.h
│   ├── so.h
│   ├── solve.h
│   ├── sort.h
│   ├── sound.h
│   ├── spaprops.h
│   ├── speaker.h
│   ├── spire.h
│   ├── splice/
│   │   ├── bif.h
│   │   ├── eval.h
│   │   ├── frame.h
│   │   ├── gc.h
│   │   ├── method.h
│   │   ├── pair.h
│   │   ├── proc.h
│   │   ├── ref.h
│   │   ├── serialize.h
│   │   ├── sidebag.h
│   │   ├── spliceutils.h
│   │   ├── splotheap.h
│   │   └── vecmat.h
│   ├── splicemap.h
│   ├── spliceobj.h
│   ├── sprbuf.h
│   ├── sqtr.h
│   ├── step.h
│   ├── stepact.h
│   ├── stepcane.h
│   ├── stepguard.h
│   ├── stephang.h
│   ├── stephide.h
│   ├── steppipe.h
│   ├── steppower.h
│   ├── steprail.h
│   ├── steprun.h
│   ├── stepside.h
│   ├── stepzap.h
│   ├── stream.h
│   ├── suv.h
│   ├── sw.h
│   ├── tail.h
│   ├── tank.h
│   ├── target.h
│   ├── text.h
│   ├── thread.h
│   ├── tn.h
│   ├── transition.h
│   ├── turret.h
│   ├── tv.h
│   ├── types.h
│   ├── ub.h
│   ├── ui.h
│   ├── update.h
│   ├── util.h
│   ├── vb.h
│   ├── vec.h
│   ├── vifs.h
│   ├── vis.h
│   ├── vol.h
│   ├── vtables.h
│   ├── water.h
│   ├── waypoint.h
│   ├── wipe.h
│   ├── wm.h
│   ├── wr.h
│   ├── xform.h
│   └── zap.h
├── requirements.txt
├── scripts/
│   ├── build.sh
│   ├── check_progress.py
│   ├── checks.sh
│   ├── codematcher/
│   │   ├── match_all.sh
│   │   ├── match_file.sh
│   │   └── match_function_live.sh
│   ├── diff.sh
│   ├── extract_elf.sh
│   ├── frogress/
│   │   ├── mapfile_progress.sh
│   │   └── upload_progress.py
│   ├── quickstart.sh
│   ├── readme.md
│   ├── run.sh
│   ├── setup_prodg_linux.sh
│   └── windows/
│       ├── backup_registry.bat
│       ├── run.bat
│       └── setup_prodg_windows.bat
├── src/
│   ├── P2/
│   │   ├── 989snd.c
│   │   ├── ac.c
│   │   ├── act.c
│   │   ├── actseg.c
│   │   ├── alarm.c
│   │   ├── alo.c
│   │   ├── aseg.c
│   │   ├── asega.c
│   │   ├── barrier.c
│   │   ├── bas.c
│   │   ├── basic.c
│   │   ├── bbmark.c
│   │   ├── bez.c
│   │   ├── binoc.c
│   │   ├── bis.c
│   │   ├── blend.c
│   │   ├── blip.c
│   │   ├── bomb.c
│   │   ├── bq.c
│   │   ├── break.c
│   │   ├── brx.c
│   │   ├── bsp.c
│   │   ├── button.c
│   │   ├── cat.c
│   │   ├── cd.c
│   │   ├── chkpnt.c
│   │   ├── clip.c
│   │   ├── clock.c
│   │   ├── cm.c
│   │   ├── cnvo.c
│   │   ├── coin.c
│   │   ├── cplcy.c
│   │   ├── credit.c
│   │   ├── crout.c
│   │   ├── crusher.c
│   │   ├── crv.c
│   │   ├── dart.c
│   │   ├── dartgun.c
│   │   ├── dialog.c
│   │   ├── difficulty.c
│   │   ├── dl.c
│   │   ├── dmas.c
│   │   ├── dysh.c
│   │   ├── dzg.c
│   │   ├── emitter.c
│   │   ├── eyes.c
│   │   ├── fader.c
│   │   ├── find.c
│   │   ├── flash.c
│   │   ├── fly.c
│   │   ├── font.c
│   │   ├── freeze.c
│   │   ├── frm.c
│   │   ├── frzg.c
│   │   ├── game.c
│   │   ├── geom.c
│   │   ├── gifs.c
│   │   ├── glbs.c
│   │   ├── glob.c
│   │   ├── gomer.c
│   │   ├── gs.c
│   │   ├── hide.c
│   │   ├── hnd.c
│   │   ├── ik.c
│   │   ├── jlo.c
│   │   ├── joy.c
│   │   ├── jsg.c
│   │   ├── jt.c
│   │   ├── jump.c
│   │   ├── keyhole.c
│   │   ├── landing.c
│   │   ├── lgn.c
│   │   ├── light.c
│   │   ├── lo.c
│   │   ├── lookat.c
│   │   ├── main.c
│   │   ├── mark.c
│   │   ├── mat.c
│   │   ├── mb.c
│   │   ├── memory.c
│   │   ├── missile.c
│   │   ├── mpeg.c
│   │   ├── mrkv.c
│   │   ├── ms.c
│   │   ├── murray.c
│   │   ├── path.c
│   │   ├── phasemem.c
│   │   ├── pipe.c
│   │   ├── pnt.c
│   │   ├── po.c
│   │   ├── prog.c
│   │   ├── proxy.c
│   │   ├── puffer.c
│   │   ├── pzo.c
│   │   ├── rail.c
│   │   ├── rat.c
│   │   ├── rchm.c
│   │   ├── render.c
│   │   ├── rip.c
│   │   ├── rog.c
│   │   ├── rumble.c
│   │   ├── rwm.c
│   │   ├── sb.c
│   │   ├── screen.c
│   │   ├── sensor.c
│   │   ├── shadow.c
│   │   ├── shape.c
│   │   ├── shd.c
│   │   ├── shdanim.c
│   │   ├── sky.c
│   │   ├── slotheap.c
│   │   ├── sm.c
│   │   ├── smartguard.c
│   │   ├── so.c
│   │   ├── solve.c
│   │   ├── sort.c
│   │   ├── sound.c
│   │   ├── speaker.c
│   │   ├── spire.c
│   │   ├── splice/
│   │   │   ├── bif.cpp
│   │   │   ├── eval.cpp
│   │   │   ├── frame.cpp
│   │   │   ├── gc.cpp
│   │   │   ├── method.cpp
│   │   │   ├── pair.cpp
│   │   │   ├── proc.cpp
│   │   │   ├── ref.cpp
│   │   │   ├── serialize.cpp
│   │   │   ├── sidebag.cpp
│   │   │   ├── spliceutils.cpp
│   │   │   ├── splotheap.cpp
│   │   │   └── vecmat.cpp
│   │   ├── splicemap.c
│   │   ├── spliceobj.c
│   │   ├── sprbuf.c
│   │   ├── sqtr.c
│   │   ├── step.c
│   │   ├── stepact.c
│   │   ├── stepcane.c
│   │   ├── stepguard.c
│   │   ├── stephang.c
│   │   ├── stephide.c
│   │   ├── steppipe.c
│   │   ├── steppower.c
│   │   ├── steprail.c
│   │   ├── steprun.c
│   │   ├── stepside.c
│   │   ├── stream.c
│   │   ├── suv.c
│   │   ├── sw.c
│   │   ├── tail.c
│   │   ├── tank.c
│   │   ├── target.c
│   │   ├── text.c
│   │   ├── thread.c
│   │   ├── tn.c
│   │   ├── transition.c
│   │   ├── turret.c
│   │   ├── tv.c
│   │   ├── ub.c
│   │   ├── ui.c
│   │   ├── update.c
│   │   ├── util.c
│   │   ├── vec.c
│   │   ├── vifs.c
│   │   ├── vis.c
│   │   ├── water.c
│   │   ├── waypoint.c
│   │   ├── wipe.c
│   │   ├── wm.c
│   │   ├── wr.c
│   │   ├── xform.c
│   │   └── zap.c
│   └── readme.md
└── tools/
    ├── codematcher/
    │   ├── LICENSE.txt
    │   ├── README.md
    │   ├── codematcher
    │   ├── ghidra_tips.txt
    │   ├── match_all.cmd
    │   └── match_single.cmd
    └── objdiff/
        ├── LICENSE
        └── objdiff-cli-linux-x86_64
Download .txt
SYMBOL INDEX (1799 symbols across 299 files)

FILE: configure.py
  function clean (line 71) | def clean():
  function write_permuter_settings (line 93) | def write_permuter_settings():
  function generate_ninja_build (line 112) | def generate_ninja_build(
  function replace_instructions_with_opcodes (line 378) | def replace_instructions_with_opcodes(asm_folder: Path) -> None:
  function main (line 406) | def main():

FILE: include/989snd.h
  type u_int (line 11) | typedef unsigned int u_int;
  type u_long (line 12) | typedef unsigned long u_long;

FILE: include/ac.h
  type GRFEVAL (line 15) | typedef int GRFEVAL;
  type ACVK (line 20) | enum ACVK
  type ACGK (line 32) | enum ACGK
  type KVB (line 46) | struct KVB
  type ACP (line 54) | struct ACP
  type ACR (line 62) | struct ACR
  type ACS (line 70) | struct ACS
  type ACG (line 78) | struct ACG
  function ACP (line 86) | struct ACPBL : public ACP
  function ACP (line 94) | struct ACPC : public ACP
  function ACP (line 102) | struct ACPB : public ACP
  function ACR (line 110) | struct ACRC : public ACR
  function ACR (line 118) | struct ACRB : public ACR
  function ACR (line 126) | struct ACRBL : public ACR
  function ACS (line 134) | struct ACSC : public ACS
  function ACS (line 142) | struct ACSB : public ACS
  function ACG (line 150) | struct ACGB : public ACG
  function ACG (line 158) | struct ACGBW : public ACG
  function ACG (line 166) | struct ACGL : public ACG
  function ACG (line 174) | struct ACGBLT : public ACG
  function ACG (line 182) | struct ACGBLP : public ACG

FILE: include/act.h
  type SW (line 13) | struct SW
  type ALO (line 14) | struct ALO
  type GRFRA (line 16) | typedef int GRFRA;
  type ACT (line 22) | struct ACT
  function ACT (line 36) | struct ACTVAL : public ACT
  function ACT (line 50) | struct ACTREF : public ACT
  function ACT (line 62) | struct ACTADJ : public ACT
  function ACT (line 71) | struct ACTBANK : public ACT

FILE: include/actseg.h
  type ASEGA (line 15) | struct ASEGA
  function ACT (line 21) | struct ACTSEG : public ACT

FILE: include/alarm.h
  type SENSOR (line 17) | struct SENSOR
  type ALARMS (line 22) | enum ALARMS
  type ALTK (line 34) | enum ALTK
  function SO (line 47) | struct ALARM : public SO
  function BRK (line 75) | struct ALBRK : public BRK

FILE: include/alo.h
  type CBinaryInputStream (line 15) | struct CBinaryInputStream
  type SFX (line 16) | struct SFX
  type SMPA (line 17) | struct SMPA
  type MRG (line 18) | struct MRG
  type ASEGA (line 19) | struct ASEGA
  type ASEGD (line 20) | struct ASEGD
  type ACT (line 21) | struct ACT
  type ACTLY (line 22) | struct ACTLY
  type ACTSEG (line 23) | struct ACTSEG
  type ACTADJ (line 24) | struct ACTADJ
  type ACTBANK (line 25) | struct ACTBANK
  type IKH (line 26) | struct IKH
  type ALOX (line 27) | struct ALOX
  type SHADOW (line 28) | struct SHADOW
  type THROB (line 29) | struct THROB
  type POSEC (line 30) | struct POSEC
  type ACTREF (line 31) | struct ACTREF
  type FADER (line 32) | struct FADER
  type PROXY (line 33) | struct PROXY
  type RO (line 34) | struct RO
  type CM (line 35) | struct CM
  type SMA (line 36) | struct SMA
  type TARGET (line 37) | struct TARGET
  type GRFIC (line 39) | typedef int GRFIC;
  type GRFTAK (line 40) | typedef int GRFTAK;
  type GRFSNIP (line 41) | typedef int GRFSNIP;
  type ACK (line 46) | enum ACK
  type RTCK (line 65) | enum RTCK
  type THROBK (line 80) | enum THROBK
  type THROB (line 95) | struct THROB
  type WKR (line 105) | struct WKR
  type FICG (line 118) | struct FICG
  type SNIP (line 130) | struct SNIP
  type XF (line 140) | struct XF
  function LO (line 158) | struct ALO : public LO

FILE: include/aseg.h
  type OVR (line 13) | struct OVR
  type CHN (line 14) | struct CHN
  type ASEGA (line 15) | struct ASEGA
  type IAK (line 20) | enum IAK
  type SEEK (line 32) | enum SEEK
  type CHN (line 45) | struct CHN
  function LO (line 54) | struct ASEG : public LO
  type ASEGD (line 68) | struct ASEGD
  function ASEG (line 81) | struct ASEGBL : public ASEG
  type EA (line 89) | struct EA

FILE: include/asega.h
  type ACTSEG (line 12) | struct ACTSEG
  function BASIC (line 18) | struct ASEGA : public BASIC

FILE: include/barrier.h
  type XP (line 11) | struct XP
  function SO (line 17) | struct BARRIER : public SO

FILE: include/bas.h
  type BASK (line 16) | enum BASK
  function class (line 27) | class CBinaryAsyncStream

FILE: include/basic.h
  type BASIC (line 16) | struct BASIC

FILE: include/bbmark.h
  type GRFPVA (line 9) | typedef int GRFPVA;
  type SW (line 12) | struct SW
  type SO (line 13) | struct SO
  type XP (line 16) | struct XP
  type OXA (line 17) | struct OXA
  type OXF (line 18) | struct OXF
  type OX (line 23) | struct OX
  type OXA (line 34) | struct OXA

FILE: include/binoc.h
  type ALO (line 13) | struct ALO
  type BEI (line 20) | struct BEI
  function BLOT (line 32) | struct BINOC : public BLOT
  type JH (line 89) | typedef enum JH
  type JV (line 101) | typedef enum JV
  function class (line 110) | class CTextBox

FILE: include/bis.h
  type BISK (line 23) | enum BISK
  type GRFBIS (line 36) | typedef int GRFBIS;
  function class (line 43) | class CBinaryInputStream

FILE: include/blend.h
  type ASEGBL (line 12) | struct ASEGBL
  type EA (line 13) | struct EA
  type MRSG (line 18) | struct MRSG

FILE: include/blip.h
  type EMITB (line 17) | struct EMITB
  type RPL (line 18) | struct RPL
  type GRFZON (line 20) | typedef int GRFZON;
  type VU_FLOAT (line 25) | struct VU_FLOAT
  type BLIPOK (line 33) | enum BLIPOK
  type BLIP (line 45) | struct BLIP
  type BLIPG (line 54) | struct BLIPG
  type BLIPP (line 62) | struct BLIPP
  type BLIPV (line 70) | struct BLIPV
  type BLIPX (line 78) | struct BLIPX

FILE: include/bomb.h
  type WKR (line 15) | struct WKR
  function SO (line 22) | struct BOMB : public SO

FILE: include/bq.h
  function class (line 14) | class CQueueInput
  function class (line 23) | class CQueueOutput
  function class (line 31) | class CQueueInputMemory : public CQueueInput
  function class (line 40) | class CQueueInputFile : public CQueueInput
  function class (line 49) | class CByteQueue

FILE: include/break.h
  type GRFBRK (line 14) | typedef int GRFBRK;
  type BRKPS (line 19) | enum BRKPS
  type BRPT (line 31) | enum BRPT
  type BRP (line 45) | struct BRP
  function SO (line 56) | struct BRK : public SO
  type BRKP (line 70) | struct BRKP
  function BRK (line 79) | struct BREAK : BRK
  type ZAPBREAK (line 90) | struct ZAPBREAK
  type FRAGILE (line 99) | struct FRAGILE
  type XP (line 109) | struct XP

FILE: include/brx.h
  type GRFEOPID (line 12) | typedef int GRFEOPID;
  type OTYP (line 18) | enum OTYP
  type OPTDAT (line 26) | struct OPTDAT
  type EOPID (line 38) | struct EOPID

FILE: include/bsp.h
  type LSGK (line 19) | enum LSGK
  type PRUNE (line 33) | enum PRUNE
  type BSP (line 43) | struct BSP
  type BSPC (line 53) | struct BSPC
  type VBSP (line 63) | struct VBSP
  type LSG (line 76) | struct LSG

FILE: include/button.h
  type ASEG (line 15) | struct ASEG
  type IASH (line 20) | enum IASH
  type ASH (line 30) | struct ASH
  type BUTTONS (line 41) | enum BUTTONS
  type BTN (line 57) | struct BTN
  function SO (line 82) | struct VOLBTN : public SO
  function SO (line 96) | struct BUTTON : public SO

FILE: include/cat.h
  type FCL (line 14) | struct FCL
  type FK (line 25) | enum FK
  type WALE (line 43) | struct WALE
  function class (line 52) | class CFileLocation

FILE: include/cd.h
  type CDS (line 14) | enum CDS

FILE: include/chkpnt.h
  function ALO (line 20) | struct CHKPNT : public ALO
  type VTCHKMGR (line 25) | struct VTCHKMGR
  type CHKMGR (line 32) | struct CHKMGR

FILE: include/cid.h
  type CID (line 16) | enum CID

FILE: include/clip.h
  type GRFHTL (line 13) | typedef int GRFHTL;
  type MAA (line 20) | struct MAA

FILE: include/clock.h
  type TICK (line 11) | typedef unsigned long long TICK;
  type CLOCK (line 16) | struct CLOCK

FILE: include/cm.h
  type CM (line 17) | struct CM
  type TN (line 18) | struct TN
  type GRFRCP (line 20) | typedef int GRFRCP;
  type CMK (line 25) | enum CMK
  type CFK (line 37) | enum CFK
  type CPP (line 48) | enum CPP
  type CPMT (line 67) | enum CPMT
  type LOOKK (line 81) | enum LOOKK
  type FTND (line 95) | enum FTND
  type FGFN (line 107) | struct FGFN
  type CPDEFI (line 118) | struct CPDEFI
  type CPLCY (line 136) | struct CPLCY
  function CPLCY (line 147) | struct CPMAN : public CPLCY
  function CPLCY (line 159) | struct CPLOOK : public CPLCY
  function CPLCY (line 185) | struct CPALIGN : public CPLCY
  function CPLCY (line 202) | struct CPASEG : public CPLCY
  function CPLCY (line 214) | struct CPTN : public CPLCY
  type CPR (line 240) | struct CPR
  function LO (line 252) | struct CM : public LO

FILE: include/cnvo.h
  type XP (line 11) | struct XP
  function SO (line 18) | struct CNVO : public SO

FILE: include/coin.h
  type DPRIZE (line 19) | struct DPRIZE
  type COIN (line 20) | struct COIN
  type KEY (line 21) | struct KEY
  type CHARM (line 22) | struct CHARM
  type DPRIZES (line 29) | enum DPRIZES
  function ALO (line 47) | struct DPRIZE : public ALO
  function DPRIZE (line 91) | struct COIN : public DPRIZE
  function DPRIZE (line 101) | struct KEY : public DPRIZE
  function DPRIZE (line 115) | struct CHARM : public DPRIZE

FILE: include/common.h
  type RGBA (line 73) | struct RGBA

FILE: include/crusher.h
  type WKR (line 12) | struct WKR
  function STEPGUARD (line 18) | struct CRFOD : public STEPGUARD
  function STEPGUARD (line 27) | struct CRFODB : public STEPGUARD
  function CRFOD (line 36) | struct CRFODK : public CRFOD
  function ALO (line 45) | struct CRBRAIN : public ALO

FILE: include/crv.h
  type CRVK (line 13) | enum CRVK
  type CRV (line 24) | struct CRV

FILE: include/dart.h
  type EXPL (line 16) | struct EXPL
  type DARTGUN (line 17) | struct DARTGUN
  type DARTS (line 22) | enum DARTS
  function SO (line 38) | struct DART : public SO
  type HBSK (line 61) | struct HBSK

FILE: include/dartgun.h
  function BRK (line 18) | struct DARTGUN : public BRK

FILE: include/dialog.h
  type SPEAKER (line 15) | struct SPEAKER
  type GRFDP (line 17) | typedef int GRFDP;
  type DIALOGK (line 22) | enum DIALOGK
  type DIALOGS (line 34) | enum DIALOGS
  type DPK (line 50) | enum DPK
  type DP (line 59) | struct DP
  function ALO (line 73) | struct DIALOG : public ALO
  type DEK (line 95) | enum DEK
  type DE (line 112) | struct DE
  type DIAPI (line 121) | struct DIAPI

FILE: include/difficulty.h
  type DPS (line 18) | enum DPS
  type DIFFICULTYLEVEL (line 28) | struct DIFFICULTYLEVEL
  type DIFFICULTY (line 55) | struct DIFFICULTY
  type DIFFICULTY (line 117) | struct DIFFICULTY
  type CHKPNT (line 127) | struct CHKPNT
  type VECTOR (line 145) | struct VECTOR
  type DIFFICULTY (line 155) | struct DIFFICULTY
  type DIFFICULTY (line 166) | struct DIFFICULTY
  type DIFFICULTYLEVEL (line 169) | struct DIFFICULTYLEVEL
  type DIFFICULTYLEVEL (line 170) | struct DIFFICULTYLEVEL
  type DIFFICULTYLEVEL (line 171) | struct DIFFICULTYLEVEL

FILE: include/dl.h
  type DL (line 15) | struct DL
  type DLE (line 28) | struct DLE
  type DLI (line 42) | struct DLI
  type DLIM (line 53) | struct DLIM
  type DLR (line 61) | struct DLR

FILE: include/dmas.h
  function class (line 39) | class DMAS
  function AddDmaInt (line 73) | inline void AddDmaInt(DMAS *pdmas, int val)

FILE: include/dysh.h
  type RPL (line 16) | struct RPL
  type DYSH (line 23) | struct DYSH

FILE: include/dzg.h
  type XP (line 12) | struct XP
  type GRFSG (line 14) | typedef int GRFSG;
  type DZ (line 20) | struct DZ
  type DZG (line 28) | struct DZG

FILE: include/emitter.h
  type EXPL (line 16) | struct EXPL
  type GRFEXPLSO (line 18) | typedef int GRFEXPLSO;
  type EMITMESH (line 24) | struct EMITMESH
  type EMITBLIP (line 33) | struct EMITBLIP
  type EMITGEN (line 42) | struct EMITGEN
  type EMITRIP (line 51) | struct EMITRIP
  type EMITDV (line 60) | struct EMITDV
  type EMITV (line 69) | struct EMITV
  type EMITVX (line 78) | struct EMITVX
  type EMITO (line 87) | struct EMITO
  type EMITB (line 96) | struct EMITB
  type EMITG (line 108) | struct EMITG
  function ALO (line 117) | struct EMITTER : public ALO

FILE: include/ensure.h
  type ENSK (line 14) | enum ENSK

FILE: include/eyes.h
  type EYESS (line 13) | enum EYESS
  function SAA (line 26) | struct EYES : public SAA

FILE: include/fader.h
  type FADER (line 13) | struct FADER

FILE: include/flash.h
  type RO (line 17) | struct RO
  function ALO (line 30) | struct FLASH : public ALO

FILE: include/fly.h
  type WKR (line 20) | struct WKR
  type SOP (line 21) | struct SOP
  type FLYK (line 26) | enum FLYK
  type FLYS (line 37) | enum FLYS
  function SO (line 54) | struct FLY : public SO

FILE: include/font.h
  type SFR (line 14) | struct SFR
  function class (line 19) | class CFont
  function class (line 38) | class CFontBrx : public CFont
  function class (line 46) | class CRichText

FILE: include/freeze.h
  type MRG (line 17) | struct MRG

FILE: include/frm.h
  type GIFS (line 14) | struct GIFS
  type FRM (line 20) | struct FRM

FILE: include/frzg.h
  function LO (line 16) | struct FRZG : public LO

FILE: include/game.h
  type GAMEWORLD (line 18) | enum GAMEWORLD
  type WORLDLEVEL (line 33) | enum WORLDLEVEL
  type FGS (line 51) | enum FGS
  type FWS (line 63) | enum FWS
  type FLS (line 76) | enum FLS
  type GRFGS (line 88) | typedef int GRFGS;
  type GRFWS (line 93) | typedef int GRFWS;
  type GRFLS (line 98) | typedef int GRFLS;
  type GRFVAULT (line 103) | typedef int GRFVAULT;
  type LS (line 108) | struct LS
  type WS (line 127) | struct WS
  type GS (line 140) | struct GS
  type WID (line 162) | enum WID
  type GAME (line 226) | struct GAME
  type LevelLoadData (line 240) | struct LevelLoadData
  type PchzLevel (line 482) | struct PchzLevel // maybe wrong name

FILE: include/geom.h
  type TBSP (line 15) | struct TBSP
  type EDGE (line 20) | struct EDGE
  type SUR (line 31) | struct SUR
  type SURF (line 42) | struct SURF
  type TSURF (line 55) | struct TSURF
  type GEOM (line 67) | struct GEOM

FILE: include/gifs.h
  function DMAS (line 12) | struct GIFS : public DMAS

FILE: include/glbs.h
  type UV (line 15) | struct UV
  type TRLK (line 20) | enum TRLK
  type RGLD (line 34) | typedef struct RGL
  type VTXG (line 50) | struct VTXG
  type GLBS (line 58) | struct GLBS

FILE: include/glob.h
  type GRFGLOB (line 11) | typedef int GRFGLOB;
  type GLOBSET (line 16) | struct GLOBSET
  type GLOB (line 24) | struct GLOB
  type SUBGLOB (line 32) | struct SUBGLOB
  type SGVR (line 40) | struct SGVR

FILE: include/gomer.h
  type GOMERS (line 15) | enum GOMERS
  function STEPGUARD (line 26) | struct GOMER : public STEPGUARD

FILE: include/gs.h
  type GSB (line 15) | struct GSB

FILE: include/hnd.h
  function TARGET (line 16) | struct HND : public TARGET

FILE: include/ik.h
  type RO (line 13) | struct RO
  function SO (line 20) | struct IKH : public SO
  function ALO (line 30) | struct LIKH : public ALO

FILE: include/jlo.h
  type JLOS (line 16) | enum JLOS
  function SO (line 32) | struct JLO : public SO
  function VOLBTN (line 42) | struct JLOVOL : public VOLBTN
  function ALO (line 52) | struct JLOC : public ALO

FILE: include/joy.h
  type PAD (line 17) | enum PAD
  type BTNP (line 38) | enum BTNP
  type ushort (line 61) | typedef ushort GRFBTN;
  type JOYS (line 66) | enum JOYS
  type JOYK (line 78) | enum JOYK
  type JOYID (line 91) | enum JOYID
  type JOY (line 102) | struct JOY
  type GRFUSR (line 158) | typedef int GRFUSR;
  type FUSR (line 167) | enum FUSR
  type CODE (line 176) | struct CODE
  type FCHT (line 193) | enum FCHT
  type GRFCHT (line 206) | typedef int GRFCHT;
  type CHT (line 215) | enum CHT

FILE: include/jsg.h
  type FTAK (line 18) | enum FTAK
  type JSGEK (line 36) | enum JSGEK
  type JSGJK (line 58) | enum JSGJK
  type JSGLK (line 70) | enum JSGLK
  type JSGE (line 81) | struct JSGE
  function LO (line 124) | struct JSG : public LO

FILE: include/jt.h
  type JTS (line 17) | enum JTS
  type JTBS (line 41) | enum JTBS
  type JTHS (line 90) | enum JTHS
  type JTCS (line 104) | enum JTCS
  type JTHK (line 112) | enum JTHK
  type JTPDK (line 129) | enum JTPDK
  function STEP (line 143) | struct JT : public STEP

FILE: include/jump.h
  type XP (line 17) | struct XP
  function PNT (line 24) | struct JMT : public PNT

FILE: include/keyhole.h
  function LO (line 16) | struct KEYHOLE : public LO

FILE: include/landing.h
  function SHAPE (line 15) | struct LANDING : public SHAPE

FILE: include/lgn.h
  type RO (line 18) | struct RO
  type CPDEFI (line 19) | struct CPDEFI
  function BRK (line 25) | struct SWP : public BRK
  type LGNS (line 33) | enum LGNS
  type LGN (line 50) | struct LGN
  function BLOT (line 61) | struct LGNR : public BLOT

FILE: include/light.h
  type SW (line 14) | struct SW
  type TWPS (line 19) | enum TWPS
  type LIGHTK (line 29) | enum LIGHTK
  type LSM (line 42) | struct LSM
  function ALO (line 52) | struct LIGHT : public ALO

FILE: include/lo.h
  type ALO (line 16) | struct ALO
  type SW (line 17) | struct SW
  type PXR (line 18) | struct PXR
  type LM (line 19) | struct LM
  type CLQ (line 20) | struct CLQ
  type VECTOR (line 21) | struct VECTOR
  type OPTID (line 27) | enum OPTID
  function BASIC (line 38) | struct LO : public BASIC
  type PXR (line 54) | struct PXR

FILE: include/lookat.h
  type ACTLA (line 16) | struct ACTLA

FILE: include/mark.h
  type SO (line 14) | struct SO
  type XP (line 15) | struct XP
  type XPK (line 20) | enum XPK
  type MTLK (line 28) | enum MTLK
  type SBI (line 49) | struct SBI

FILE: include/mat.h
  type MATRIX4 (line 14) | struct MATRIX4
  type MATRIX3 (line 22) | struct MATRIX3

FILE: include/mb.h
  function STEPGUARD (line 15) | struct MBG : public STEPGUARD

FILE: include/memcard.h
  type MEMCARD (line 12) | struct MEMCARD
  type SAVE (line 25) | struct SAVE

FILE: include/memory.h
  type _reent (line 9) | struct _reent

FILE: include/missile.h
  type RO (line 15) | struct RO
  function BOMB (line 22) | struct MISSILE : public BOMB
  function MISSILE (line 35) | struct ACCMISS : public MISSILE
  function MISSILE (line 45) | struct TARMISS : public MISSILE
  function MISSILE (line 55) | struct SPLMISS : public MISSILE
  function MISSILE (line 65) | struct GROUNDMISS : public MISSILE

FILE: include/mpeg.h
  function class (line 13) | class CMpeg

FILE: include/mq.h
  type GRFCMQ (line 11) | typedef int GRFCMQ;
  type MSGID (line 18) | enum MSGID
  type MQ (line 55) | struct MQ

FILE: include/mrkv.h
  function SO (line 14) | struct MRKV : public SO

FILE: include/ms.h
  type RO (line 8) | struct RO
  type MS (line 14) | struct MS

FILE: include/murray.h
  type WKR (line 15) | struct WKR
  function STEPGUARD (line 22) | struct MURRAY : public STEPGUARD

FILE: include/oid.h
  type OID (line 14) | enum OID

FILE: include/phasemem.h
  type PHASE (line 12) | enum PHASE

FILE: include/pipe.h
  function LO (line 15) | struct PIPE : public LO

FILE: include/pnt.h
  function LO (line 20) | struct PNT : public LO
  function PNT (line 30) | struct PNTSV : PNT
  function PNT (line 39) | struct PNTS : PNT
  function PNT (line 48) | struct PNTVEC : PNT

FILE: include/po.h
  type ALO (line 15) | struct ALO
  type AMB (line 16) | struct AMB
  type CPDEFI (line 17) | struct CPDEFI
  type PCK (line 23) | enum PCK
  type PZI (line 35) | struct PZI
  function SO (line 50) | struct PO : public SO

FILE: include/prog.h
  function class (line 12) | class CProg

FILE: include/proxy.h
  function ALO (line 15) | struct PROXY : public ALO

FILE: include/puffer.h
  function PO (line 22) | struct PUFFER : public PO
  function ALO (line 32) | struct PUFFC : public ALO
  function ALO (line 42) | struct PUFFB : public ALO
  function SO (line 52) | struct PUFFT : public SO

FILE: include/pzo.h
  type RO (line 18) | struct RO
  type WKR (line 19) | struct WKR
  type PCS (line 24) | enum PCS
  type GOADK (line 36) | enum GOADK
  function SO (line 51) | struct SPRIZE : public SO
  function SPRIZE (line 60) | struct SCPRIZE : public SPRIZE
  function SPRIZE (line 69) | struct CLUE : public SPRIZE
  function ALO (line 78) | struct LOCK : public ALO
  function ALO (line 87) | struct LOCKG : public ALO
  function PO (line 98) | struct VAULT : public PO
  type TMBL (line 106) | struct TMBL

FILE: include/rail.h
  function SHAPE (line 16) | struct RAIL : public SHAPE

FILE: include/rat.h
  type XP (line 17) | struct XP
  type WKR (line 18) | struct WKR
  type RATS (line 23) | enum RATS
  function SO (line 39) | struct RAT : public SO
  function LO (line 56) | struct RATHOLE : public LO

FILE: include/rchm.h
  type TWR (line 18) | struct TWR
  function LO (line 28) | struct RCHM : public LO

FILE: include/render.h
  type RP (line 18) | enum RP
  type RPL (line 46) | struct RPL

FILE: include/rip.h
  type RO (line 17) | struct RO
  type RIPG (line 18) | struct RIPG
  type PUFF (line 21) | struct PUFF
  type VTRIP (line 24) | struct VTRIP
  type RIPT (line 31) | enum RIPT
  type RIPGT (line 68) | enum RIPGT
  type ROSES (line 80) | enum ROSES
  type TRLS (line 92) | enum TRLS
  type RIP (line 106) | struct RIP
  function SO (line 118) | struct RIPG : public SO
  function RIP (line 127) | struct ROSE : public RIP
  function RIP (line 136) | struct DROPLET : public RIP
  function RIP (line 145) | struct BUBLET : public RIP
  function RIP (line 154) | struct RIPPLE : public RIP
  function RIP (line 163) | struct DABLET : public RIP
  function RIP (line 172) | struct FLAKE : public RIP
  function RIP (line 181) | struct SPARK : public RIP
  function RIP (line 190) | struct BURST : public RIP
  function RIP (line 199) | struct TRAIL : public RIP
  function RIP (line 208) | struct FIREBALL : public RIP
  function TRAIL (line 217) | struct SMOKETRAIL : public TRAIL
  function RIP (line 226) | struct DEBRIS : public RIP
  function RIP (line 235) | struct SMOKECLOUD : public RIP
  function RIP (line 244) | struct SMACK : public RIP
  function RIP (line 253) | struct ORBIT : public RIP
  function SPARK (line 262) | struct RAY : public SPARK
  function RIP (line 271) | struct FLYING : public RIP
  function RIP (line 280) | struct STUCK : public RIP
  function RIP (line 289) | struct LEAF : public RIP
  function RIP (line 298) | struct FLAME : public RIP
  function RIP (line 307) | struct BULLET : public RIP
  function RIP (line 316) | struct SHRAPNEL : public RIP
  function RIP (line 325) | struct GLINT : public RIP
  function RIP (line 334) | struct MATCH : public RIP
  function RIP (line 343) | struct REMIT : public RIP
  type HP (line 351) | struct HP

FILE: include/rog.h
  type XP (line 18) | struct XP
  type DZ (line 19) | struct DZ
  type FX (line 20) | struct FX
  type WKR (line 21) | struct WKR
  type GRFSG (line 23) | typedef int GRFSG;
  type ROVS (line 28) | enum ROVS
  type ROBS (line 41) | enum ROBS
  type ROVTS (line 56) | enum ROVTS
  type ROHS (line 67) | enum ROHS
  type ROCS (line 87) | enum ROCS
  type ROPS (line 106) | enum ROPS
  type ROSTS (line 119) | enum ROSTS
  type ROBK (line 130) | enum ROBK
  function PO (line 143) | struct ROV : public PO
  function ALO (line 159) | struct ROB : public ALO
  function SO (line 171) | struct ROH : public SO
  function SO (line 180) | struct ROC : public SO
  function SO (line 189) | struct ROST : public SO
  function SO (line 198) | struct ROP : public SO
  type RODD (line 207) | struct RODD

FILE: include/rs.h
  type RSMG (line 17) | struct RSMG

FILE: include/rumble.h
  type JOY (line 11) | struct JOY
  type RUMS (line 16) | enum RUMS
  type RUMK (line 29) | enum RUMK
  type RUMINS (line 49) | struct RUMINS
  type RUMPAT (line 61) | struct RUMPAT
  type RUMBLE (line 73) | struct RUMBLE

FILE: include/rwm.h
  function LO (line 18) | struct RWM : public LO
  type RWTI (line 27) | struct RWTI
  type RWAC (line 36) | struct RWAC
  type RWFI (line 45) | struct RWFI
  type RWC (line 54) | struct RWC

FILE: include/sb.h
  function STEPGUARD (line 15) | struct SBG : public STEPGUARD

FILE: include/sce/libdma.h
  type u_char (line 9) | typedef unsigned char u_char;
  type u_short (line 10) | typedef unsigned short u_short;
  type u_int (line 11) | typedef unsigned int u_int;
  type tD_CHCR (line 15) | struct tD_CHCR
  type _sceDmaTag (line 28) | struct _sceDmaTag
  type sceDmaChan (line 37) | struct sceDmaChan

FILE: include/sce/rand.h
  type undefined4 (line 10) | typedef unsigned int undefined4;
  type u_int (line 11) | typedef unsigned int u_int;
  type RNG (line 15) | struct RNG {

FILE: include/screen.h
  type SHD (line 13) | struct SHD
  type BLOTE (line 18) | enum BLOTE
  type BLOTK (line 28) | enum BLOTK
  type BLOTS (line 35) | enum BLOTS
  type BLOTI (line 45) | struct BLOTI
  type BLOT (line 53) | struct BLOT
  type TIMERS (line 90) | enum TIMERS
  function BLOT (line 99) | struct TIMER : public BLOT
  function BLOT (line 118) | struct CTR : public BLOT
  function CTR (line 129) | struct TRUNKCTR : public CTR
  function CTR (line 132) | struct CRUSHERCTR : public CTR
  function CTR (line 135) | struct LIFECTR : public CTR
  function CTR (line 138) | struct CLUECTR : public CTR
  function CTR (line 141) | struct KEYCTR : public CTR
  function CTR (line 144) | struct COINCTR : public CTR
  function BLOT (line 155) | struct TOTALS : public BLOT
  function BLOT (line 165) | struct NOTE : public BLOT
  function BLOT (line 175) | struct LETTERBOX : public BLOT
  function BLOT (line 182) | struct TITLE : public BLOT
  function BLOT (line 190) | struct ATTRACT : public BLOT
  function BLOT (line 199) | struct LOGO : public BLOT
  function class (line 206) | class CTextEdge

FILE: include/sdk/ee/eekernel.h
  type ThreadParam (line 19) | struct ThreadParam {
  type SemaParam (line 37) | struct SemaParam {
  type ThreadParam (line 87) | struct ThreadParam

FILE: include/sdk/ee/eestruct.h
  type sceGsTex0 (line 14) | struct sceGsTex0
  type sceGsTex2 (line 20) | struct sceGsTex2

FILE: include/sdk/ee/libpad.h
  type u_char (line 9) | typedef unsigned char u_char;

FILE: include/sdk/ee/sifrpc.h
  type _sif_rpc_data (line 9) | struct _sif_rpc_data { // 0x10
  type _sif_rpc_data (line 15) | typedef _sif_rpc_data sceSifRpcData;
  type _sif_client_data (line 17) | struct _sif_client_data { // 0x28
  type _sif_client_data (line 26) | typedef _sif_client_data sceSifClientData;
  type _sif_serve_data (line 28) | struct _sif_serve_data { // 0x44
  type _sif_serve_data (line 47) | typedef _sif_serve_data sceSifServeData;
  type _sif_queue_data (line 49) | struct _sif_queue_data { // 0x18
  type _sif_queue_data (line 57) | typedef _sif_queue_data sceSifQueueData;

FILE: include/sdk/libcdvd.h
  type u_char (line 9) | typedef unsigned char u_char;
  type u_int (line 10) | typedef unsigned int u_int;
  type sceCdRMode (line 14) | struct sceCdRMode {
  type SCECdvdMediaType (line 21) | enum SCECdvdMediaType {

FILE: include/sensor.h
  type RO (line 11) | struct RO
  type SENSORS (line 16) | enum SENSORS
  type SENSM (line 34) | enum SENSM
  type CSDTS (line 46) | enum CSDTS
  function SO (line 60) | struct SENSOR : public SO
  function SENSOR (line 84) | struct LASEN : public SENSOR
  function SENSOR (line 94) | struct CAMSEN : public SENSOR
  function SENSOR (line 104) | struct PRSEN : public SENSOR
  type LBEAM (line 113) | struct LBEAM

FILE: include/shadow.h
  type SHD (line 15) | struct SHD
  type SHADOW (line 21) | struct SHADOW

FILE: include/shape.h
  function LO (line 18) | struct SHAPE : public LO

FILE: include/shd.h
  type SHD (line 17) | struct SHD
  type SHDP (line 18) | struct SHDP
  type GRFZON (line 20) | typedef int GRFZON;
  type CTK (line 25) | enum CTK
  type BMPF (line 40) | struct BMPF
  function BMPF (line 52) | struct BMP : public BMPF
  type CLUTF (line 60) | struct CLUTF
  function CLUTF (line 68) | struct CLUT : public CLUTF
  type TCX (line 76) | struct TCX
  type TEXF (line 82) | struct TEXF
  function TEXF (line 90) | struct TEX : public TEXF
  type SAIR (line 100) | struct SAIR
  type SAI (line 109) | struct SAI
  type SAAK (line 122) | enum SAAK
  type SAA (line 137) | struct SAA
  type SAAF (line 149) | struct SAAF
  type SHDK (line 156) | enum SHDK
  type SHDP (line 173) | struct SHDP
  type SHDF (line 179) | struct SHDF
  function SHDF (line 192) | struct SHD : public SHDF
  type SLI (line 205) | struct SLI

FILE: include/shdanim.h
  type UV (line 14) | struct UV
  type UVQD (line 15) | struct UVQD
  type POSAD (line 16) | struct POSAD
  type RPL (line 17) | struct RPL
  function SAA (line 23) | struct LOOP : public SAA
  function SAA (line 32) | struct PINGPONG : public SAA
  function SAA (line 41) | struct SHUFFLE : public SAA
  function SAA (line 52) | struct HOLOGRAM : public SAA
  function SAA (line 61) | struct SCROLLER : public SAA
  function SAA (line 70) | struct CIRCLER : public SAA
  function SAA (line 79) | struct LOOKER : public SAA

FILE: include/sky.h
  type SKY (line 17) | struct SKY

FILE: include/slotheap.h
  type SLOT (line 14) | struct SLOT
  type SLOTHEAP (line 22) | struct SLOTHEAP

FILE: include/sm.h
  type SM (line 15) | struct SM
  type SMA (line 16) | struct SMA
  type SMT (line 17) | struct SMT
  type SMS (line 18) | struct SMS
  type SMP (line 19) | struct SMP
  type SMPA (line 20) | struct SMPA
  type ASEGA (line 21) | struct ASEGA
  type GRFAPL (line 23) | typedef int GRFAPL;
  type GRFSMT (line 25) | typedef int GRFSMT;
  function LO (line 31) | struct SM : public LO
  function BASIC (line 45) | struct SMA : public BASIC
  type SMT (line 64) | struct SMT
  type SMS (line 76) | struct SMS
  type SMP (line 87) | struct SMP

FILE: include/smartguard.h
  type SGFT (line 11) | struct SGFT
  function STEPGUARD (line 21) | struct SMARTGUARD : public STEPGUARD

FILE: include/so.h
  type XA (line 22) | struct XA
  type XP (line 23) | struct XP
  type RO (line 24) | struct RO
  type WKR (line 25) | struct WKR
  type ZPR (line 26) | struct ZPR
  type WATER (line 27) | struct WATER
  type CNSTR (line 28) | struct CNSTR
  type CONSTR (line 29) | struct CONSTR
  type GRFFSO (line 31) | typedef int GRFFSO;
  type EGK (line 37) | enum EGK
  type CT (line 46) | enum CT
  type FSO (line 54) | enum FSO
  function ALO (line 72) | struct SO : public ALO

FILE: include/solve.h
  type GRFSG (line 11) | typedef int GRFSG;
  type DZK (line 16) | enum DZK
  type FX (line 26) | struct FX
  type XP (line 35) | struct XP
  type DZ (line 46) | struct DZ

FILE: include/sound.h
  type ALO (line 13) | struct ALO
  type SFXID (line 25) | enum SFXID
  type MVGK (line 123) | enum MVGK
  type AMB (line 140) | struct AMB
  type SFX (line 176) | struct SFX
  type EXC (line 192) | struct EXC
  type IEXC (line 198) | typedef int IEXC;

FILE: include/speaker.h
  function ALO (line 17) | struct SPEAKER : public ALO

FILE: include/spire.h
  function PNT (line 14) | struct SPIRE : public PNT

FILE: include/splice/bif.h
  type BIFK (line 18) | enum BIFK
  type CMPK (line 31) | enum CMPK
  type UFOK (line 43) | enum UFOK

FILE: include/splice/frame.h
  function class (line 12) | class CFrame

FILE: include/splice/gc.h
  function class (line 14) | class CGc

FILE: include/splice/method.h
  type BASIC (line 9) | struct BASIC
  function class (line 14) | class CMethod

FILE: include/splice/pair.h
  function class (line 15) | class CPair

FILE: include/splice/proc.h
  function class (line 17) | class CProc

FILE: include/splice/ref.h
  type TAGK (line 16) | enum TAGK
  function class (line 76) | class CRef

FILE: include/splice/sidebag.h
  type SBB (line 17) | struct SBB
  function class (line 26) | class CSidebag

FILE: include/splice/splotheap.h
  type SPLOT (line 11) | struct SPLOT
  function class (line 17) | class CSplotheap

FILE: include/sqtr.h
  type SQTRM (line 17) | struct SQTRM

FILE: include/step.h
  type FX (line 18) | struct FX
  type XP (line 19) | struct XP
  type SFF (line 20) | struct SFF
  type GRFSG (line 22) | typedef int GRFSG;
  type GRFADJ (line 23) | typedef int GRFADJ;
  function PO (line 29) | struct STEP : public PO

FILE: include/stepact.h
  function ACT (line 14) | struct ACTADD : public ACT

FILE: include/stepcane.h
  type ASEGBL (line 14) | struct ASEGBL
  type BL (line 20) | struct BL

FILE: include/stepguard.h
  type ASEG (line 13) | struct ASEG
  type SGAS (line 18) | enum SGAS
  type SGGS (line 30) | enum SGGS
  type SGS (line 43) | enum SGS
  function LO (line 70) | struct SGG : public LO
  function STEP (line 84) | struct STEPGUARD : public STEP

FILE: include/stephang.h
  type BL (line 12) | struct BL
  type FX (line 13) | struct FX
  type ASEGBL (line 14) | struct ASEGBL
  type GRFAHX (line 16) | typedef int GRFAHX;

FILE: include/stephide.h
  type MJR (line 11) | struct MJR
  type MJH (line 12) | struct MJH
  type XMG (line 13) | struct XMG
  type RAIL (line 14) | struct RAIL
  type ACTADJ (line 15) | struct ACTADJ
  type HFDK (line 20) | enum HFDK

FILE: include/steppower.h
  type FSP (line 15) | enum FSP

FILE: include/steprun.h
  type MRSG (line 11) | struct MRSG
  type ASEGA (line 12) | struct ASEGA
  type ASEGBL (line 13) | struct ASEGBL
  function BL (line 19) | struct BLRUN : public BL

FILE: include/stepside.h
  type JT (line 11) | struct JT
  type ASEGBL (line 12) | struct ASEGBL
  function BL (line 18) | struct BLSS : public BL

FILE: include/stream.h
  type OSTRM (line 14) | struct OSTRM

FILE: include/suv.h
  type SUV (line 17) | struct SUV // : TBD

FILE: include/sw.h
  type OXA (line 22) | struct OXA
  type VISMAP (line 23) | struct VISMAP
  function LO (line 33) | struct SW : public LO
  type XA (line 92) | struct XA
  type STSO (line 102) | struct STSO

FILE: include/tail.h
  type TAIL (line 15) | struct TAIL

FILE: include/tank.h
  type MSGID (line 17) | enum MSGID
  type TANKS (line 22) | enum TANKS
  function STEP (line 37) | struct TANK : public STEP

FILE: include/target.h
  function XFM (line 15) | struct TARGET : public XFM

FILE: include/text.h
  type TFVW (line 17) | enum TFVW
  type TFTS (line 31) | enum TFTS
  type TFT (line 49) | struct TFT

FILE: include/thread.h
  type CRITSECT (line 14) | struct CRITSECT

FILE: include/tn.h
  type RO (line 15) | struct RO
  type TNS (line 20) | enum TNS
  function ALO (line 33) | struct TN : public ALO
  type TNFN (line 42) | struct TNFN

FILE: include/transition.h
  type LevelTableStruct (line 24) | struct LevelTableStruct
  type FTRANS (line 39) | enum FTRANS
  type GRFTRANS (line 52) | typedef int GRFTRANS;
  type TRANS (line 59) | struct TRANS
  function class (line 71) | class CTransition

FILE: include/turret.h
  function PO (line 21) | struct TURRET : public PO

FILE: include/tv.h
  type RPL (line 14) | struct RPL
  type TVS (line 19) | enum TVS
  type TVGS (line 30) | enum TVGS
  function BLOT (line 44) | struct TV : public BLOT

FILE: include/types.h
  type uchar (line 23) | typedef uint8_t     uchar;
  type ushort (line 24) | typedef uint16_t    ushort;
  type uint (line 25) | typedef uint32_t    uint;
  type ulong (line 26) | typedef uint64_t    ulong;
  type uchar (line 29) | typedef uchar   undefined1;
  type ushort (line 30) | typedef ushort  undefined2;
  type uint (line 31) | typedef uint    undefined4;
  type ulong (line 32) | typedef ulong   undefined8;
  type qword (line 35) | typedef unsigned long long qword __attribute__((mode(TI)));
  type uchar (line 38) | typedef uchar byte;

FILE: include/ub.h
  type ASEG (line 15) | struct ASEG
  function GOMER (line 21) | struct UBG : public GOMER

FILE: include/ui.h
  type UIS (line 15) | enum UIS
  type UI (line 35) | struct UI

FILE: include/util.h
  type CLQ (line 19) | struct CLQ
  function GEvaluateClq (line 42) | static inline float GEvaluateClq(CLQ *pclq, float x)
  function GLerp (line 57) | static inline float GLerp(float a, float b, float t)
  type LM (line 65) | struct LM

FILE: include/vb.h
  function STEPGUARD (line 15) | struct VBG : public STEPGUARD

FILE: include/vec.h
  type SO (line 11) | struct SO
  type VECTOR (line 17) | struct VECTOR
  type VECTOR4 (line 22) | struct VECTOR4
  type VU_VECTOR (line 30) | struct VU_VECTOR

FILE: include/vifs.h
  type UPK (line 14) | enum UPK
  function class (line 36) | class VIFS : public DMAS

FILE: include/vis.h
  type GRFZON (line 15) | typedef int GRFZON;
  function LO (line 21) | struct VISMAP : public LO

FILE: include/vol.h
  function XFM (line 19) | struct VOL : public XFM

FILE: include/vtables.h
  type GRFCID (line 12) | typedef int GRFCID;
  type VT (line 17) | struct VT
  type CBinaryInputStream (line 30) | struct CBinaryInputStream
  type LO (line 31) | struct LO
  type VTBASIC (line 36) | struct VTBASIC
  function VT (line 45) | struct VTLO : VT
  type BLOT (line 86) | struct BLOT
  type VTBLOT (line 91) | struct VTBLOT
  type VTNOTE (line 117) | struct VTNOTE
  type VTBINOC (line 143) | struct VTBINOC
  type VTTIMER (line 169) | struct VTTIMER
  type VTTOTALS (line 195) | struct VTTOTALS
  type GAME (line 218) | struct GAME
  type VTGAME (line 223) | struct VTGAME
  type GOMER (line 228) | struct GOMER
  type VTGOMER (line 233) | struct VTGOMER
  type VTWPSG (line 241) | struct VTWPSG
  type VTSAA (line 249) | struct VTSAA
  type VTACT (line 257) | struct VTACT

FILE: include/water.h
  type XA (line 16) | struct XA
  type XP (line 17) | struct XP
  function SO (line 23) | struct WATER : public SO

FILE: include/waypoint.h
  type SGG (line 13) | struct SGG
  type WPS (line 18) | enum WPS
  function ALO (line 31) | struct WAYPOINT : public ALO
  type WPSG (line 43) | struct WPSG

FILE: include/wipe.h
  type WIPEK (line 19) | enum WIPEK
  type WIPES (line 31) | enum WIPES
  type WIPE (line 44) | struct WIPE

FILE: include/wm.h
  type GRFDS (line 18) | typedef int GRFDS;
  type WMS (line 23) | enum WMS
  type WMD (line 37) | enum WMD
  type WMC (line 51) | struct WMC
  function ALO (line 61) | struct WM : public ALO

FILE: include/wr.h
  type WR (line 19) | struct WR
  type WEK (line 24) | enum WEK
  type WREK (line 40) | enum WREK
  type ONZE (line 51) | struct ONZE
  type ONZ (line 62) | struct ONZ
  type WEKI (line 73) | struct WEKI
  type WRE (line 87) | struct WRE
  type WRBG (line 97) | struct WRBG
  function LO (line 116) | struct WR : public LO

FILE: include/xform.h
  type XF (line 25) | struct XF
  type XFM (line 26) | struct XFM
  type EXPL (line 27) | struct EXPL
  type EXPLG (line 28) | struct EXPLG
  type EXPLO (line 29) | struct EXPLO
  type EXPLS (line 30) | struct EXPLS
  type EXPLSO (line 31) | struct EXPLSO
  type EXPLSTE (line 32) | struct EXPLSTE
  type CAMERA (line 33) | struct CAMERA
  type ASEG (line 34) | struct ASEG
  function LO (line 40) | struct XFM : public LO
  function XFM (line 52) | struct EXPL : public XFM
  function EXPL (line 61) | struct EXPLG : public EXPL
  function EXPL (line 70) | struct EXPLO : public EXPL
  function EXPLO (line 79) | struct EXPLS : public EXPLO
  type EXPLSO (line 87) | struct EXPLSO
  type EXPLSTE (line 95) | struct EXPLSTE
  function XFM (line 104) | struct WARP : XFM
  function ALO (line 131) | struct CAMERA : public ALO
  type EXITS (line 149) | enum EXITS
  type EDK (line 164) | enum EDK
  function ALO (line 176) | struct EXIT : public ALO

FILE: include/zap.h
  type XP (line 15) | struct XP
  type PO (line 16) | struct PO
  type ZPD (line 17) | struct ZPD
  type ZPK (line 24) | enum ZPK
  type ZOK (line 41) | enum ZOK
  type ZPD (line 55) | struct ZPD
  type ZAP (line 70) | struct ZAP
  function SO (line 81) | struct TZP : public SO
  type ZPR (line 91) | struct ZPR
  function TZP (line 103) | struct VOLZP : public TZP

FILE: scripts/frogress/upload_progress.py
  function getProgressFromMapFile (line 18) | def getProgressFromMapFile(mapFile: mapfile_parser.MapFile, asmPath: Pat...
  function getProgress (line 72) | def getProgress(mapPath: Path) -> tuple[mapfile_parser.ProgressStats, di...
  function main (line 93) | def main(args: argparse.ArgumentParser) -> None:

FILE: src/P2/989snd.c
  type u_int (line 10) | typedef unsigned int u_int;
  type u_long (line 11) | typedef unsigned long u_long;
  type SndCommandReturnDef (line 23) | struct SndCommandReturnDef { // 0x10
  type SndCommandBuffer (line 28) | struct SndCommandBuffer { // 0x1000
  type SndCommandReturnDef (line 33) | struct SndCommandReturnDef
  type SndSystemStatus (line 35) | struct SndSystemStatus { // 0x40
  type SndMessageData (line 47) | struct SndMessageData { // 0x20
  type SndMessageData (line 51) | struct SndMessageData
  type SndCommandBuffer (line 62) | struct SndCommandBuffer
  type SndCommandBuffer (line 63) | struct SndCommandBuffer
  type SndCommandBuffer (line 64) | struct SndCommandBuffer
  type SndCommandReturnDef (line 68) | struct SndCommandReturnDef
  type SndCommandReturnDef (line 69) | struct SndCommandReturnDef
  type SndCommandReturnDef (line 70) | struct SndCommandReturnDef
  type SndCommandReturnDef (line 79) | struct SndCommandReturnDef
  type SndCommandBuffer (line 89) | struct SndCommandBuffer
  type SndCommandBuffer (line 90) | struct SndCommandBuffer
  type SndCommandReturnDef (line 92) | struct SndCommandReturnDef
  type SndCommandReturnDef (line 93) | struct SndCommandReturnDef
  type SndSystemStatus (line 98) | struct SndSystemStatus
  function snd_StartSoundSystem (line 109) | void snd_StartSoundSystem(void)
  function snd_FlushSoundCommands (line 163) | int snd_FlushSoundCommands()
  function snd_GotReturns (line 233) | int snd_GotReturns(void)
  function snd_PrepareReturnBuffer (line 256) | void snd_PrepareReturnBuffer(u_int* buffer, int num_ints)
  function SoundBankPtr (line 269) | SoundBankPtr snd_BankLoadByLoc(int loc, int offset)
  function snd_BankLoadByLoc_CB (line 307) | void snd_BankLoadByLoc_CB(int loc, int offset, SndCompleteProc cb, u_lon...
  function snd_ResolveBankXREFS (line 346) | void snd_ResolveBankXREFS(void)
  function snd_UnloadBank (line 351) | void snd_UnloadBank(SoundBankPtr bank)
  function snd_SetMasterVolume (line 360) | void snd_SetMasterVolume(int which, int vol)
  function snd_GetMasterVolume (line 370) | int snd_GetMasterVolume(int which)
  function snd_SetPlaybackMode (line 379) | void snd_SetPlaybackMode(int mode)
  function snd_SetMixerMode (line 391) | void snd_SetMixerMode(int channel_mode, int reverb_mode)
  function snd_SetGroupVoiceRange (line 402) | void snd_SetGroupVoiceRange(int group, int min, int max)
  function u_int (line 413) | u_int snd_PlaySoundVolPanPMPB(SoundBankPtr bank, int sound, int vol, int...
  function snd_StopSound (line 434) | void snd_StopSound(u_int handle)
  function snd_PauseSound (line 446) | void snd_PauseSound(u_int handle)
  function snd_ContinueSound (line 455) | void snd_ContinueSound(u_int handle)
  function snd_PauseAllSoundsInGroup (line 466) | void snd_PauseAllSoundsInGroup(u_int groups)
  function snd_ContinueAllSoundsInGroup (line 476) | void snd_ContinueAllSoundsInGroup(u_int groups)
  function u_int (line 486) | u_int snd_SoundIsStillPlaying(u_int handle)
  function snd_SoundIsStillPlaying_CB (line 495) | void snd_SoundIsStillPlaying_CB(u_int handle, SndCompleteProc cb, u_long...
  function snd_IsSoundALooper (line 504) | int snd_IsSoundALooper(SoundBankPtr bank, u_int sound)
  function snd_SetSoundVolPan (line 517) | void snd_SetSoundVolPan(u_int handle, int vol, int pan)
  function snd_GetSoundOriginalPitch (line 528) | int snd_GetSoundOriginalPitch(SoundBankPtr bank, int index)
  function snd_SetSoundPitch (line 541) | void snd_SetSoundPitch(u_int handle, int pitch)
  function snd_AutoVol (line 556) | void snd_AutoVol(u_int handle, int vol, int delta_time, int delta_from)
  function snd_SetMIDIRegister (line 572) | void snd_SetMIDIRegister(u_int handle, int reg, int value)
  function snd_GetMIDIRegister (line 583) | int snd_GetMIDIRegister(u_int handle, int reg)
  function snd_SetGlobalExcite (line 596) | void snd_SetGlobalExcite(int value)
  function u_int (line 610) | u_int snd_SendIOPCommandAndWait(int command, int data_used, char* in_data)
  function snd_SendIOPCommandNoWait (line 652) | void snd_SendIOPCommandNoWait(int command, int data_used, char* in_data,...
  function snd_PostMessage (line 715) | void snd_PostMessage(void)
  function snd_SendCurrentBatch (line 723) | void snd_SendCurrentBatch(void)
  function snd_InitVAGStreamingEx (line 745) | int snd_InitVAGStreamingEx(int num_channels, int buffer_size, unsigned i...
  function snd_StopAllStreams (line 768) | void snd_StopAllStreams(void)
  function u_int (line 776) | u_int snd_PlayVAGStreamByLoc(int loc1, int loc2, int offset1, int offset...
  function snd_ContinueVAGStream (line 793) | void snd_ContinueVAGStream(u_int stream)
  function snd_IsVAGStreamBuffered_CB (line 802) | void snd_IsVAGStreamBuffered_CB(u_int stream, SndCompleteProc cb, u_long...
  function snd_StreamSafeCheckCDIdle (line 811) | int snd_StreamSafeCheckCDIdle(int block_ee_iop)
  function snd_StreamSafeCdRead (line 820) | int snd_StreamSafeCdRead(u_int lbn, u_int sectors, void* buf, sceCdRMode...
  function snd_StreamSafeCdSync (line 847) | int snd_StreamSafeCdSync(int mode)
  function snd_StreamSafeCdBreak (line 870) | int snd_StreamSafeCdBreak(void)
  function snd_StreamSafeCdGetError (line 880) | int snd_StreamSafeCdGetError(void)
  function snd_SetReverbType (line 889) | void snd_SetReverbType(int core, int type)
  function snd_SetReverbDepth (line 899) | void snd_SetReverbDepth(int core, int left, int right)
  function snd_PreAllocReverbWorkArea (line 910) | void snd_PreAllocReverbWorkArea(int core, int type)
  function snd_InitMovieSound (line 932) | int snd_InitMovieSound(int sizeOfIOPBuffer, int volumeLevel, int panCent...
  function snd_ResetMovieSound (line 945) | void snd_ResetMovieSound(void)
  function snd_CloseMovieSound (line 954) | void snd_CloseMovieSound(void)
  function snd_StartMovieSound (line 959) | void snd_StartMovieSound(int iopBuffer, int iopBufferSize, int iopPauseP...
  function snd_GetTransStatus (line 972) | int snd_GetTransStatus()
  function snd_GetDopplerPitchMod (line 982) | int snd_GetDopplerPitchMod(int approaching_mph)

FILE: src/P2/ac.c
  function EvaluateAcp (line 5) | void EvaluateAcp(ACP *pacp, ALO *palo, float t, float svt, GRFEVAL grfev...
  function GetAcpTimes (line 10) | void GetAcpTimes(ACP *pacp, int *pct, float **pat)
  function EvaluateAcr (line 19) | void EvaluateAcr(ACR *pacr, ALO *palo, float t, float svt, GRFEVAL grfev...
  function EvaluateAcrEul (line 24) | void EvaluateAcrEul(ACR *pacr, ALO *palo, float t, float svt, GRFEVAL gr...
  function GetAcrTimes (line 29) | void GetAcrTimes(ACR *pacr, int *pct, float **pat)
  function EvaluateAcs (line 38) | void EvaluateAcs(ACS *pacs, ALO *palo, float t, GRFEVAL grfeval, MATRIX3...
  function GetAcsTimes (line 43) | void GetAcsTimes(ACS *pacs, int *pct, float **pat)
  function EvaluateAcg (line 52) | void EvaluateAcg(ACG *pacg, ALO *palo, float t, float svt, GRFEVAL grfev...
  function GetAcgTimes (line 57) | void GetAcgTimes(ACG *pacg, int *pct, float **pat)
  function GetAcpcTimes (line 100) | void GetAcpcTimes(ACPC *pacpc, int *pct, float **pat)
  function GetAcpbTimes (line 109) | void GetAcpbTimes(ACPB *pacpb, int *pct, float **pat)
  function EvaluateAcrcEul (line 117) | void EvaluateAcrcEul(ACRC *pacrc, ALO *palo, float t, float svt, GRFEVAL...
  function GetAcrcTimes (line 125) | void GetAcrcTimes(ACRC *pacrc, int *pct, float **pat)
  function EvaluateAcrbEul (line 133) | void EvaluateAcrbEul(ACRB *pacrb, ALO *palo, float t, float svt, GRFEVAL...
  function GetAcrbTimes (line 141) | void GetAcrbTimes(ACRB *pacrb, int *pct, float **pat)
  function LoadAcscFromBrx (line 149) | void LoadAcscFromBrx(ACSC *pacsc, CBinaryInputStream *pbis)
  function GetAcscTimes (line 155) | void GetAcscTimes(ACSC *pacsc, int *pct, float **pat)
  function LoadAcsbFromBrx (line 163) | void LoadAcsbFromBrx(ACSB *pacsb, CBinaryInputStream *pbis)
  function GetAcsbTimes (line 169) | void GetAcsbTimes(ACSB *pacsb, int *pct, float **pat)

FILE: src/P2/act.c
  function GetActvalTwistGoal (line 49) | void GetActvalTwistGoal(ACTVAL *pactval, float *pradTwist, float *pdradT...
  function GGetActvalPoseGoal (line 57) | float GGetActvalPoseGoal(ACTVAL *pactval, int ipose)
  function GetActrefTwistGoal (line 68) | void GetActrefTwistGoal(ACTREF *pactref, float *pradTwist, float *pdradT...
  function GGetActadjPoseGoal (line 88) | float GGetActadjPoseGoal(ACTADJ *pactadj, int ipose)
  function InitActbank (line 93) | void InitActbank(ACTBANK *pactbank, ALO *palo)

FILE: src/P2/actseg.c
  function RetractActseg (line 4) | void RetractActseg(ACTSEG *pactseg, GRFRA grfra)
  function CloneActseg (line 17) | void CloneActseg(ACTSEG *pactseg, ACTSEG *pactsegBase)

FILE: src/P2/alarm.c
  function BreakAlbrk (line 5) | void BreakAlbrk(ALBRK *palbrk)
  function SetAlbrkAlarm (line 15) | void SetAlbrkAlarm(ALBRK *palbrk, ALARM *palarm)
  function InitAlarm (line 20) | void InitAlarm(ALARM *palarm)
  function CloneAlarm (line 29) | void CloneAlarm(ALARM *palarm, ALARM *palarmBase)
  function TriggerAlarm (line 42) | void TriggerAlarm(ALARM *palarm, ALTK altk)
  function DisableAlarmAlbrk (line 64) | void DisableAlarmAlbrk(ALARM *palarm)
  function AddAlarmAlbrk (line 75) | void AddAlarmAlbrk(ALARM *palarm, OID oid)
  function AddAlarmSensor (line 87) | void AddAlarmSensor(ALARM *palarm, OID oid)
  function AddAlarmStepguard (line 99) | void AddAlarmStepguard(ALARM *palarm, OID oid)
  function SetAlarmRsmg (line 111) | void SetAlarmRsmg(ALARM *palarm, int fOnTrigger, OID oidRoot, OID oidSM,...

FILE: src/P2/alo.c
  function PresetAloAccel (line 55) | void PresetAloAccel(ALO *palo, float dt)
  function ACTSEG (line 143) | ACTSEG *PactsegNewAlo(ALO *palo)
  function ASEGD (line 162) | ASEGD *PasegdEnsureAlo(ALO *palo)
  function SetAloFastShadowRadius (line 179) | void SetAloFastShadowRadius(ALO *palo, float sRadius)
  function GetAloFastShadowRadius (line 185) | void GetAloFastShadowRadius(ALO *palo, float *psRadius)
  function SetAloFastShadowDepth (line 191) | void SetAloFastShadowDepth(ALO *palo, float sDepth)
  function GetAloFastShadowDepth (line 197) | void GetAloFastShadowDepth(ALO *palo, float *psDepth)
  function SetAloShadowShader (line 207) | void SetAloShadowShader(ALO *palo, OID oidShdShadow)
  function SetAloShadowNearRadius (line 213) | void SetAloShadowNearRadius(ALO *palo, float sNearRadius)
  function SetAloShadowFarRadius (line 219) | void SetAloShadowFarRadius(ALO *palo, float sFarRadius)
  function SetAloShadowNearCast (line 225) | void SetAloShadowNearCast(ALO *palo, float sNearCast)
  function SetAloShadowFarCast (line 231) | void SetAloShadowFarCast(ALO *palo, float sFarCast)
  function SetAloShadowConeAngle (line 237) | void SetAloShadowConeAngle(ALO *palo, float degConeAngle)
  function SetAloShadowFrustrumUp (line 243) | void SetAloShadowFrustrumUp(ALO *palo, VECTOR *pvecUp)
  function SetAloDynamicShadowObject (line 249) | void SetAloDynamicShadowObject(ALO *palo, OID oidDysh)
  function SHADOW (line 255) | SHADOW *PshadowInferAlo(ALO *palo)
  function GetAloCastShadow (line 267) | void GetAloCastShadow(ALO *palo, int *pfCastShadow)
  function GetAloShadowShader (line 273) | void GetAloShadowShader(ALO *palo, OID *poidShdShadow)
  function GetAloShadowNearRadius (line 288) | void GetAloShadowNearRadius(ALO *palo, float *psNearRadius)
  function GetAloShadowFarRadius (line 294) | void GetAloShadowFarRadius(ALO *palo, float *psFarRadius)
  function GetAloShadowNearCast (line 300) | void GetAloShadowNearCast(ALO *palo, float *psNearCast)
  function GetAloShadowFarCast (line 306) | void GetAloShadowFarCast(ALO *palo, float *psFarCast)
  function GetAloShadowConeAngle (line 312) | void GetAloShadowConeAngle(ALO *palo, float *pdegConeAngle)
  function ResolveAlo (line 345) | void ResolveAlo(ALO *palo)
  function SetAloTargetRadius (line 449) | void SetAloTargetRadius(ALO *palo, float sRadiusTarget)
  function SetAloTargetHitTest (line 455) | void SetAloTargetHitTest(ALO *palo, int fHitTest)
  function EnsureAloSfx (line 465) | void EnsureAloSfx(ALO *palo)
  function SetAloSfxid (line 474) | void SetAloSfxid(ALO *palo, SFXID sfxid)
  function GetAloSfxid (line 482) | void GetAloSfxid(ALO *palo, SFXID *psfxid)
  function SetAloSStart (line 493) | void SetAloSStart(ALO *palo, float sStart)
  function GetAloSStart (line 499) | void GetAloSStart(ALO *palo, float *psStart)
  function SetAloSFull (line 510) | void SetAloSFull(ALO *palo, float sFull)
  function GetAloSFull (line 518) | void GetAloSFull(ALO *palo, float *psFull)
  function SetAloUVolume (line 529) | void SetAloUVolume(ALO *palo, float uVol)
  function SetAloUDoppler (line 535) | void SetAloUDoppler(ALO *palo, float uDoppler)
  function GetAloUDoppler (line 541) | void GetAloUDoppler(ALO *palo, float *puDoppler)
  function SetAloUVolumeSpl (line 552) | void SetAloUVolumeSpl(ALO *palo, float uVol)
  function GetAloUVolume (line 561) | void GetAloUVolume(ALO *palo, float *puVol)
  function SetAloUPitch (line 572) | void SetAloUPitch(ALO *palo, float uPitch)
  function SetAloUPitchSpl (line 578) | void SetAloUPitchSpl(ALO *palo, float uPitch)
  function GetAloUPitch (line 587) | void GetAloUPitch(ALO *palo, float *puPitch)
  function StopAloSound (line 602) | void StopAloSound(ALO *palo)
  function GetAloThrobKind (line 615) | void GetAloThrobKind(ALO *palo, THROBK *pthrobk)
  function SetAloThrobDtInOut (line 634) | void SetAloThrobDtInOut(ALO *palo, float dtInOut)
  function GetAloThrobDtInOut (line 640) | void GetAloThrobDtInOut(ALO *palo, float *pdtInOut)
  function FAbsorbAloWkr (line 675) | int FAbsorbAloWkr(ALO *palo, WKR *pwkr)

FILE: src/P2/aseg.c
  function StartupAseg (line 4) | void StartupAseg()
  function CloneAseg (line 15) | void CloneAseg(ASEG *paseg, LO *ploBase)
  function ApplyAseg (line 26) | void ApplyAseg(ASEG *paseg, ALO *paloAsegRoot, float tLocal, float svtLo...
  function ASEGA (line 31) | ASEGA *PasegaApplyAseg(ASEG *paseg, ALO *paloAsegRoot, float tLocal, flo...
  function ASEGA (line 42) | ASEGA *PasegaEnsureAseg(ASEG *paseg, ALO *paloRoot, SEEK seek, float t, ...
  function ApplyAsegCur (line 49) | void ApplyAsegCur(ASEG *paseg, ALO *paloRoot, float t, float svt, GRFAPL...
  function TFindAsegLabel (line 68) | float TFindAsegLabel(ASEG *paseg, OID oidLabel)
  function StripAsegAlo (line 87) | void StripAsegAlo(ASEG *aseg, ALO *alo)
  function LoadAsegblFromBrx (line 101) | void LoadAsegblFromBrx(ASEGBL *pasegbl, CBinaryInputStream *pbis)
  function PostAsegblLoad (line 106) | void PostAsegblLoad(ASEGBL *pasegbl)
  function CloneAsegbl (line 111) | void CloneAsegbl(ASEGBL *pasegbl, LO *ploBase)

FILE: src/P2/asega.c
  function SetAsegaHandsOff (line 6) | void SetAsegaHandsOff(ASEGA *pasega, int fHandsOff)
  function RemoveAsega (line 35) | void RemoveAsega(ASEGA *pasega)

FILE: src/P2/barrier.c
  function InitBarrier (line 4) | void InitBarrier(BARRIER *pbarrier)
  function CloneBarrier (line 11) | void CloneBarrier(BARRIER *pbarrier, BARRIER *pbarrierBase)
  function AddBarrierObject (line 28) | void AddBarrierObject(BARRIER *pbarrier, OID oid)
  function AddBarrierClass (line 36) | void AddBarrierClass(BARRIER *pbarrier, CID cid)

FILE: src/P2/bas.c
  function FOpenFile (line 25) | bool CBinaryAsyncStream::FOpenFile(CFileLocation *pfl)
  function FOpenSector (line 32) | bool CBinaryAsyncStream::FOpenSector(uint isector, uint cb)
  function Close (line 45) | void CBinaryAsyncStream::Close()
  function StartSpooling (line 73) | void CBinaryAsyncStream::StartSpooling()
  function FSpooling (line 108) | bool CBinaryAsyncStream::FSpooling()
  function FSpoolingComplete (line 113) | bool CBinaryAsyncStream::FSpoolingComplete()
  function FinishSpooling (line 151) | void CBinaryAsyncStream::FinishSpooling()
  function Spool (line 180) | void CBinaryAsyncStream::Spool()
  function Skip (line 199) | void CBinaryAsyncStream::Skip(int cb)

FILE: src/P2/basic.c
  function FIsBasicDerivedFrom (line 7) | int FIsBasicDerivedFrom(BASIC *pbasic, CID cid)
  function EnsureBasicSidebag (line 19) | void EnsureBasicSidebag(BASIC *pbasic)
  function GetBasicCid (line 29) | void GetBasicCid(BASIC *pbasic, CID* pcid)

FILE: src/P2/bbmark.c
  function OX (line 7) | OX *PoxAddSw(SW *psw, OXA *poxa, OXA *poxaOther)
  function XP (line 21) | XP *PxpFirstFromSoSo(SO *pso, SO *psoOther)
  function InvalidateSwAaox (line 31) | void InvalidateSwAaox(SW *psw)

FILE: src/P2/binoc.c
  function InitBei (line 6) | void InitBei(BEI *pbei, CLQ *pclq, float duWidth, float dgHeight, int cseg)
  function GEvaluateBei (line 30) | float GEvaluateBei(BEI *pbei, int iseg)
  function InitBinoc (line 69) | void InitBinoc(BINOC *binoc, BLOTK blotk)
  function ResetBinoc (line 78) | void ResetBinoc(BINOC *binoc)
  function FDoneBinocAchz (line 137) | bool FDoneBinocAchz(BINOC *pbinoc)
  function SetBinocLookat (line 153) | void SetBinocLookat(BINOC *binoc, ALO *paloLookat)
  function SetBinocZoom (line 158) | void SetBinocZoom(BINOC *binoc, float zoom)
  function GetBinocReticleFocus (line 180) | void GetBinocReticleFocus(BINOC *binoc, float *dxReticle, float *dyReticle)
  function SetPos (line 192) | void CTextBox::SetPos(float x, float y)
  function SetSize (line 198) | void CTextBox::SetSize(float dx, float dy)
  function SetTextColor (line 204) | void CTextBox::SetTextColor(RGBA *rgba)
  function SetHorizontalJust (line 209) | void CTextBox::SetHorizontalJust(JH jh)
  function SetVerticalJust (line 214) | void CTextBox::SetVerticalJust(JV jv)

FILE: src/P2/bis.c
  function FOpenSector (line 41) | int CBinaryInputStream::FOpenSector(uint isector, uint cb)
  function OpenMemory (line 75) | void CBinaryInputStream::OpenMemory(int cb, void *pv)
  function FOpenFile (line 82) | int CBinaryInputStream::FOpenFile(CFileLocation *pfl)
  function Close (line 87) | void CBinaryInputStream::Close()
  function DecrementCdReadLimit (line 125) | void CBinaryInputStream::DecrementCdReadLimit(int cb)
  function Pump (line 134) | void CBinaryInputStream::Pump()
  function Read (line 173) | void CBinaryInputStream::Read(int cb, void *pv)
  function Align (line 217) | void CBinaryInputStream::Align(int n)
  function uchar (line 224) | uchar CBinaryInputStream::U8Read()
  function ushort (line 239) | ushort CBinaryInputStream::U16Read()
  function uint (line 255) | uint CBinaryInputStream::U32Read()
  function S8Read (line 276) | char CBinaryInputStream::S8Read()
  function S16Read (line 291) | short CBinaryInputStream::S16Read()
  function S32Read (line 307) | int CBinaryInputStream::S32Read()
  function F32Read (line 328) | float CBinaryInputStream::F32Read()
  function ReadVector (line 343) | void CBinaryInputStream::ReadVector(VECTOR *pvec)
  function ReadVector4 (line 348) | void CBinaryInputStream::ReadVector4(VECTOR4 *pvec)
  function ReadMatrix (line 353) | void CBinaryInputStream::ReadMatrix(MATRIX3 *pmat)
  function ReadMatrix4 (line 361) | void CBinaryInputStream::ReadMatrix4(MATRIX4 *pmat)
  function ReadVbsp (line 386) | void CBinaryInputStream::ReadVbsp(int *pcvbsp, VBSP **pavbsp)
  function ReadStringSw (line 420) | void CBinaryInputStream::ReadStringSw(char **pachz)
  function Unknown1 (line 432) | void CBinaryInputStream::Unknown1()
  function Unknown2 (line 438) | void CBinaryInputStream::Unknown2(void **ppv)

FILE: src/P2/blend.c
  function VerifyAeaEquivalence (line 7) | void VerifyAeaEquivalence(int cea0, EA *aea0, int cea1, EA *aea1)
  function SetAsegblSlerp (line 50) | void SetAsegblSlerp(ASEGBL *pasegbl, ALO *palo)

FILE: src/P2/blip.c
  function StartupBlips (line 8) | void StartupBlips()

FILE: src/P2/bomb.c
  function LoadBombFromBrx (line 7) | void LoadBombFromBrx(BOMB *pbomb, CBinaryInputStream *pbis)
  function CloneBomb (line 14) | void CloneBomb(BOMB *pbomb, BOMB *pbombBase)
  function PrimeBomb (line 42) | void PrimeBomb(BOMB *pbomb, float dt)

FILE: src/P2/bq.c
  function Init (line 3) | void CByteQueue::Init(int cb, void *pv)
  function Reset (line 10) | void CByteQueue::Reset()
  function FreeDrain (line 26) | void CByteQueue::FreeDrain(int cb)

FILE: src/P2/break.c
  function PostBrkLoad (line 10) | void PostBrkLoad(BRK *pbrk)
  function SetBrkBroken (line 24) | void SetBrkBroken(BRK *pbrk, int fBroken)
  function SetBrkExclude (line 38) | void SetBrkExclude(BRK *pbrk, OID oid)
  function SetBrkRemain (line 48) | void SetBrkRemain(BRK *pbrk, OID oid)
  function SetBrkFixed (line 58) | void SetBrkFixed(BRK *pbrk, OID oid)
  function SetBrkRemainFixed (line 68) | void SetBrkRemainFixed(BRK *pbrk, OID oid)
  function GetBrkOnPlayer (line 80) | void GetBrkOnPlayer(BRK *pbrk, int *pfBreakOnPlayer)
  function GetBrkOnBomb (line 88) | void GetBrkOnBomb(BRK *pbrk, int *pfBreakOnBomb)
  function SFX (line 100) | SFX *PsfxEnsureBrk(BRK *pbrk, ENSK ensk)
  function InitBreak (line 121) | void InitBreak(BREAK *pbreak)

FILE: src/P2/brx.c
  function StartupBrx (line 6) | void StartupBrx()
  function LO (line 16) | LO *PloNew(CID cid, SW *psw, ALO *paloParent, OID oid, int isplice)
  function LoadOptionsFromBrx (line 24) | void LoadOptionsFromBrx(void *pvStruct, CBinaryInputStream *pbis)
  function uint (line 37) | uint IploFromStockOid(int oid)

FILE: src/P2/button.c
  function InitBtn (line 12) | void InitBtn(BTN *pbtn)
  function TriggerBtn (line 34) | void TriggerBtn(BTN *pbtn, int fSeekToEnd, int fChkTrigger)
  function UntriggerBtn (line 61) | void UntriggerBtn(BTN *pbtn, int fSeekToEnd)
  function InitButton (line 68) | void InitButton(BUTTON *pbutton)
  function LoadButtonFromBrx (line 74) | void LoadButtonFromBrx(BUTTON *pbutton, CBinaryInputStream *pbis)
  function AddVolbtnPushObject (line 138) | void AddVolbtnPushObject(VOLBTN *pvolbtn, OID oid)
  function SetButtonRsmg (line 145) | void SetButtonRsmg(BUTTON *pbutton, int fOnTrigger, OID oidRoot, OID oid...
  function SetVolbtnRsmg (line 150) | void SetVolbtnRsmg(VOLBTN *pvolbtn, int fOnTrigger, OID oidRoot, OID oid...

FILE: src/P2/cat.c
  function StartupCatalog (line 6) | void StartupCatalog()
  function FUN_001407A0 (line 11) | int FUN_001407A0(uint *pui)

FILE: src/P2/cd.c
  function FValidCdMmode (line 12) | bool FValidCdMmode()
  function SetCdMmode (line 29) | void SetCdMmode()
  function StartupCd (line 37) | void StartupCd()
  function ReadCd (line 46) | void ReadCd(uint isector, uint csector, void *pv)
  function ReadCdDirect (line 61) | void ReadCdDirect(uint isector, uint csector, void *pv)
  function FCdCompleted (line 76) | bool FCdCompleted(int fBlock)

FILE: src/P2/chkpnt.c
  function ResetChkmgrCheckpoints (line 13) | void ResetChkmgrCheckpoints(CHKMGR *pchkmgr)
  function IchkAllocChkmgr (line 41) | int IchkAllocChkmgr(CHKMGR *pchkmgr)

FILE: src/P2/clock.c
  function SetClockRate (line 17) | void SetClockRate(float rt)
  function MarkClockTick (line 23) | void MarkClockTick(CLOCK *pclock)
  function MarkClockTickRealOnly (line 61) | void MarkClockTickRealOnly(CLOCK *pclock)
  function ResetClock (line 72) | void ResetClock(CLOCK *pclock, float t)
  function SetClockEnabled (line 77) | void SetClockEnabled(CLOCK *pclock, int fEnabled)
  function StartupClock (line 82) | void StartupClock()
  function TICK (line 93) | const TICK TickNow()

FILE: src/P2/cm.c
  function StartupCm (line 50) | void StartupCm()
  function SetSwCameraFov (line 71) | void SetSwCameraFov(float fov)
  function SetSwCameraFarClip (line 78) | void SetSwCameraFarClip(float sFarClip)
  function SetSwCameraRgbaFog (line 89) | void SetSwCameraRgbaFog(SW *psw, RGBA *prgbaFog)
  function SetCmPos (line 96) | void SetCmPos(CM *pcm, VECTOR *ppos)
  function SetCmMat (line 101) | void SetCmMat(CM *pcm, MATRIX3 *pmat)
  function SetCmFov (line 106) | void SetCmFov(CM *pcm, float fov)
  function SetCmNearClip (line 114) | void SetCmNearClip(CM *pcm, float sNearClip)
  function SetCmFarClip (line 120) | void SetCmFarClip(CM *pcm, float sFarClip)
  function SetCmSProgress (line 126) | void SetCmSProgress(CM *pcm, float uSProgress)
  function FUN_001439c8 (line 132) | void FUN_001439c8(CM *pcm, float param_2)
  function FUN_001439e8 (line 138) | void FUN_001439e8(CM *pcm, float param_2)
  function SetCmRgbaFog (line 144) | void SetCmRgbaFog(CM *pcm, RGBA *prgbaFog)
  function SetCmMrdRatio (line 150) | void SetCmMrdRatio(CM *pcm, float ratio)
  function ClearCmFadeObjects (line 158) | void ClearCmFadeObjects(CM *pcm)
  function SetCmCut (line 215) | void SetCmCut(CM *pcm, float *pradCut)
  function SetResetFlag (line 225) | void SetResetFlag(CM *pcm)
  function ClearCmCut (line 230) | void ClearCmCut(CM *pcm)
  function PushLookkCm (line 251) | void PushLookkCm(CM *pcm, LOOKK lookk)
  function LOOKK (line 256) | LOOKK LookkPopCm(CM *pcm)
  function LOOKK (line 261) | LOOKK LookkCurCm(CM *pcm)
  function SetCmSniperFocus (line 266) | void SetCmSniperFocus(CM *pcm, PNT *ppntAnchor, float sRadiusSniper, flo...
  function FUN_00146028 (line 273) | void FUN_00146028(CM *pcm)
  function _GLOBAL_$I$StartupCm (line 282) | void _GLOBAL_$I$StartupCm()

FILE: src/P2/cnvo.c
  function InitCnvo (line 4) | void InitCnvo(CNVO *pcnvo)
  function LoadCnvoFromBrx (line 10) | void LoadCnvoFromBrx(CNVO *pcnvo, CBinaryInputStream *pbis)
  function PostCnvoLoad (line 17) | void PostCnvoLoad(CNVO *pcnvo)
  function SetCnvoBeltSpeed (line 25) | void SetCnvoBeltSpeed(CNVO *pcnvo, float svBelt)

FILE: src/P2/coin.c
  function InitDprize (line 6) | void InitDprize(DPRIZE *pdprize)
  function LoadDprizeFromBrx (line 22) | void LoadDprizeFromBrx(DPRIZE *pdprize, CBinaryInputStream *pbis)
  function CloneDprize (line 29) | void CloneDprize(DPRIZE *pdprize, DPRIZE *pdprizeBase)
  function InitCoin (line 56) | void InitCoin(COIN *pcoin)
  function AddLife (line 78) | void AddLife(void *ptr)
  function OnCoinSmack (line 94) | void OnCoinSmack(COIN *pcoin)
  function InitCharm (line 131) | void InitCharm(CHARM *pcharm)
  function SetCharmDprizes (line 143) | void SetCharmDprizes(CHARM *pcharm, DPRIZES dprizes)
  function InitKey (line 160) | void InitKey(KEY *pkey)
  function FUN_00148910 (line 191) | int FUN_00148910(float *pf0, float *pf1)

FILE: src/P2/crusher.c
  function OnCrfodAdd (line 8) | void OnCrfodAdd(CRFOD *pcrfod)
  function OnCrfodRemove (line 14) | void OnCrfodRemove(CRFOD *pcrfod)
  function CloneCrfod (line 20) | void CloneCrfod(CRFOD *pcrfod, CRFOD *pcrfodBase)
  function InitCrfodb (line 27) | void InitCrfodb(CRFODB *pcrfodb)
  function PostCrfodbLoad (line 34) | void PostCrfodbLoad(CRFODB *pcrfodb)
  function CalcHeadingVector (line 40) | void CalcHeadingVector(float rad, VECTOR *pvector)

FILE: src/P2/dart.c
  function InitDart (line 7) | void InitDart(DART *pdart)
  function RemoveDart (line 15) | void RemoveDart(DART *pdart)
  function CloneDart (line 22) | void CloneDart(DART *pdart, DART *pdartBase)
  function LoadDartFromBrx (line 29) | void LoadDartFromBrx(DART *pdart, CBinaryInputStream *pbis)
  function HandleDartMessage (line 35) | void HandleDartMessage(DART *pdart, MSGID msgid, void *pv)
  function PostDartLoad (line 46) | void PostDartLoad(DART *pdart)
  function UpdateDart (line 52) | void UpdateDart(DART *pdart, float dt)
  function SetDartDarts (line 84) | void SetDartDarts(DART *pdart, DARTS darts)

FILE: src/P2/dartgun.c
  function InitDartgun (line 3) | void InitDartgun(DARTGUN *pdartgun)
  function AddDartgunRatTarget (line 38) | void AddDartgunRatTarget(DARTGUN *pdartgun, OID oid)
  function StartDartgunTargetAreaChange (line 50) | void StartDartgunTargetAreaChange(DARTGUN *pdartgun)

FILE: src/P2/dialog.c
  function InitDialog (line 10) | void InitDialog(DIALOG *pdialog)
  function LoadDialogFromBrx (line 18) | void LoadDialogFromBrx(DIALOG *pdialog, CBinaryInputStream *pbis)
  function SetDialogInstruct (line 29) | void SetDialogInstruct(DIALOG *pdialog)
  function SetDialogConfront (line 35) | void SetDialogConfront(DIALOG *pdialog)
  function GetDialogPlayed (line 41) | void GetDialogPlayed(DIALOG *pdialog, int *pfPlayed)
  function SetDialogPlayed (line 47) | void SetDialogPlayed(DIALOG *pdialog, int fPlayed)
  function HandleDialogMessage (line 59) | void HandleDialogMessage(DIALOG *pdialog, MSGID msgid, void *pv)
  function FUN_00151860 (line 75) | void FUN_00151860(DIALOG *pdialog, BLOT *pblot)
  function TriggerDialog (line 89) | void TriggerDialog(DIALOG *pdialog)
  function UntriggerDialog (line 142) | void UntriggerDialog(DIALOG *pdialog)

FILE: src/P2/difficulty.c
  function OnDifficultyGameLoad (line 11) | void OnDifficultyGameLoad(DIFFICULTY *pdifficulty)
  function OnDifficultyWorldPreLoad (line 21) | void OnDifficultyWorldPreLoad(DIFFICULTY *pdifficulty)
  function OnDifficultyWorldPostLoad (line 62) | void OnDifficultyWorldPostLoad(DIFFICULTY *pdifficulty)
  function OnDifficultyInitialTeleport (line 105) | void OnDifficultyInitialTeleport(DIFFICULTY *pdifficulty)
  function OnDifficultyPlayerDeath (line 115) | void OnDifficultyPlayerDeath(float scalar, DIFFICULTY* pdifficulty)
  function OnDifficultyTriggerCheckpoint (line 152) | void OnDifficultyTriggerCheckpoint(DIFFICULTY *pdifficulty, CHKPNT *pchk...
  function OnDifficultyCollectKey (line 166) | void OnDifficultyCollectKey(DIFFICULTY *pdifficulty)
  function ChangeSuck (line 178) | void ChangeSuck(float nParam, DIFFICULTY *pdifficulty)

FILE: src/P2/dl.c
  function InitDl (line 5) | void InitDl(DL *pdl, int ibDle)
  function ClearDl (line 10) | void ClearDl(DL *pdl)
  function ClearDle (line 16) | void ClearDle(DLE *pdle)
  function DLE (line 22) | DLE *PdleFromDlEntry(DL *pdl, void *pv)
  function AppendDlEntry (line 27) | void AppendDlEntry(DL *pdl, void *pv)
  function PrependDlEntry (line 43) | void PrependDlEntry(DL *pdl, void *pv)
  function InsertDlEntryBefore (line 60) | void InsertDlEntryBefore(DL *pdl, void *pvNext, void *pv)
  function RemoveDlEntry (line 86) | void RemoveDlEntry(DL *pdl, void *pv)
  function FFindDlEntry (line 140) | bool FFindDlEntry(DL *pdl, void *pv)
  function FIsDlEmpty (line 146) | bool FIsDlEmpty(DL *pdl)
  function MergeDl (line 151) | void MergeDl(DL *pdlDst, DL *pdlSrc)
  function CPvDl (line 173) | int CPvDl(DL *pdl)

FILE: src/P2/dmas.c
  function StartupDma (line 11) | void StartupDma()
  function Clear (line 29) | void DMAS::Clear()
  function Reset (line 37) | void DMAS::Reset()
  function Detach (line 51) | void DMAS::Detach(int *pcqw, QW **paqw)
  function Send (line 67) | void DMAS::Send(sceDmaChan *chan)
  function EndPrim (line 92) | void DMAS::EndPrim()

FILE: src/P2/emitter.c
  function CloneEmitter (line 15) | void CloneEmitter(EMITTER *pemitter, EMITTER *pemitterBase)
  function EMITB (line 31) | EMITB *PemitbEnsureEmitter(EMITTER *pemitter, ENSK ensk)
  function EMITTER (line 42) | EMITTER *PemitterEnsureEmitter(EMITTER *pemitter, ENSK ensk)
  function AddEmitterSkeleton (line 52) | void AddEmitterSkeleton(EMITTER *pemitter, OID oid, OID oidOther, float ...
  function PauseEmitter (line 64) | void PauseEmitter(EMITTER *pemitter, float dtPause)
  function PauseEmitterIndefinite (line 69) | void PauseEmitterIndefinite(EMITTER *pemitter)
  function UnpauseEmitter (line 74) | void UnpauseEmitter(EMITTER *pemitter)
  function SetEmitterEnabled (line 81) | void SetEmitterEnabled(EMITTER *pemitter, int fEnabled)
  function GetEmitterEnabled (line 92) | void GetEmitterEnabled(EMITTER *pemitter, int *pfEnabled)
  function GetEmitterPaused (line 97) | void GetEmitterPaused(EMITTER *pemitter, int *pfPaused)
  function SetEmitterAutoPause (line 106) | void SetEmitterAutoPause(EMITTER *pemitter, int fAutoPause)
  function SetEmitterRipt (line 114) | void SetEmitterRipt(EMITTER *pemitter, RIPT ript)
  function SetExploRipt (line 120) | void SetExploRipt(EXPLO *pexplo, RIPT ript)
  function ExplodeExplExplso (line 174) | void ExplodeExplExplso(EXPL *pexpl, EXPLSO *pexplso)
  function ExplodeExploExplso (line 195) | void ExplodeExploExplso(EXPLO *pexplo, EXPLSO *pexplso)

FILE: src/P2/find.c
  function DL (line 3) | DL *PdlFromSwOid(SW *psw, OID oid)
  function LO (line 12) | LO *PloFindSwObject(SW *psw, GRFFSO grffso, OID oid, LO *ploContext)
  function LO (line 19) | LO *PloFindSwNearest(SW *psw, OID oid, LO *ploContext)
  function LO (line 26) | LO *PloFindSwChild(SW *psw, OID oid, ALO *paloAncestor)
  function FIsCidDerivedFrom (line 33) | int FIsCidDerivedFrom(CID cid, CID cidAncestor)
  function LO (line 51) | LO *PloFindSwObjectByClass(SW *psw, GRFFSO grffso, CID cid, LO *ploContext)
  function ALO (line 58) | ALO *PaloFindLoCommonParent(LO *plo, LO *ploOther)

FILE: src/P2/flash.c
  function InitFlash (line 8) | void InitFlash(FLASH *pflash)
  function LoadFlashFromBrx (line 21) | void LoadFlashFromBrx(FLASH *pflash, CBinaryInputStream *pbis)
  function UpdateFlash (line 27) | void UpdateFlash(FLASH *pflash, float dt)

FILE: src/P2/font.c
  function StartupFont (line 4) | void StartupFont()
  function CopyTo (line 15) | void CFont::CopyTo(CFont *pfontDest)
  function Reset (line 77) | void CRichText::Reset()
  function SetBaseColor (line 86) | void CRichText::SetBaseColor(RGBA *rgba)

FILE: src/P2/frm.c
  function OpenFrame (line 26) | void OpenFrame()
  function EnsureVu1Code (line 42) | void EnsureVu1Code(VIFS *pvifs, void *pvStart, void *pvEnd)
  function FinalizeFrameGifs (line 54) | void FinalizeFrameGifs(GIFS *pgifs, int *pcqwGifs, QW **ppqwGifs)
  function PrepareGsForFrameRender (line 65) | void PrepareGsForFrameRender(FRM *pfrm)
  function RenderFrame (line 81) | void RenderFrame(FRM *pfrm, int fRenderGifs)

FILE: src/P2/game.c
  function StartupGame (line 28) | void StartupGame()
  function UnlockIntroCutsceneFromWid (line 62) | void UnlockIntroCutsceneFromWid(int wid)
  function InitGameState (line 102) | void InitGameState(GS *pgs)
  function UpdateGameState (line 121) | void UpdateGameState(float dt)
  function UnloadGame (line 137) | void UnloadGame()
  function RetryGame (line 149) | void RetryGame()
  function StartGame (line 157) | void StartGame()
  function CalculatePercentCompletion (line 172) | int CalculatePercentCompletion(GS *pgs)
  function SetCcharm (line 277) | void SetCcharm(int ccharm)
  function FCharmAvailable (line 285) | bool FCharmAvailable()
  function PfLookupDialog (line 292) | int PfLookupDialog(LS *pls, OID oidDialog)
  function FUN_00160ce8 (line 308) | void FUN_00160ce8(int param_1)
  function OnGameAlarmTriggered (line 313) | void OnGameAlarmTriggered(GAME *pgame)
  function OnGameAlarmDisabled (line 318) | void OnGameAlarmDisabled(GAME *pgame)
  function GRFVAULT (line 323) | GRFVAULT GetGrfvault_unknown()
  function GetBlueprintInfo (line 334) | void GetBlueprintInfo(int *pgrfvault, int *pipdialog)
  function CcharmMost (line 368) | int CcharmMost()

FILE: src/P2/geom.c
  function InitGeom (line 3) | void InitGeom(GEOM *pgeom)

FILE: src/P2/gifs.c
  function CheckReg (line 21) | void GIFS::CheckReg(int fExpectPack, int regExpect)
  function PackRGBA (line 30) | void GIFS::PackRGBA(uint rgba)
  function PackUV (line 40) | void GIFS::PackUV(int u, int v)
  function PackXYZ (line 50) | void GIFS::PackXYZ(int x, int y, int z)
  function PackXYZF (line 59) | void GIFS::PackXYZF(int x, int y, int z, int fog)
  function PackAD (line 71) | void GIFS::PackAD(long int a, long int d)

FILE: src/P2/glbs.c
  function SetTransform (line 12) | void GLBS::SetTransform(VECTOR *ppos, MATRIX3 *pmat)
  function FindLights (line 19) | void GLBS::FindLights(VECTOR *ppos, float sRadius)
  function ResetStrip (line 33) | void GLBS::ResetStrip()

FILE: src/P2/gomer.c
  function InitGomer (line 13) | void InitGomer(GOMER *pgomer)
  function PostGomerLoad (line 29) | void PostGomerLoad(GOMER *pgomer)
  function RenderGomerSelf (line 78) | void RenderGomerSelf(GOMER *pgomer, CM *pcm, RO *pro)
  function FDetectGomer (line 91) | int FDetectGomer(GOMER *pgomer)

FILE: src/P2/gs.c
  function uint (line 31) | uint NLog2(uint value)
  function InitGsb (line 45) | void InitGsb(GSB *pgsb, int igsMin, int igsMax)
  function ResetGsb (line 52) | void ResetGsb(GSB *pGsb)
  function IgsAllocGsb (line 57) | int IgsAllocGsb(GSB *pgsb, int iCount)

FILE: src/P2/hide.c
  function StartupHide (line 8) | void StartupHide()

FILE: src/P2/hnd.c
  function InitHnd (line 5) | void InitHnd(HND *phnd)
  function LoadHndFromBrx (line 21) | void LoadHndFromBrx(HND *phnd, CBinaryInputStream *pbis)

FILE: src/P2/ik.c
  function RenderIkhSelf (line 3) | void RenderIkhSelf(IKH *pikh, CM *pcm, RO *pro)
  function RenderLikhSelf (line 8) | void RenderLikhSelf(LIKH *plikh, CM *pcm, RO *pro)

FILE: src/P2/jlo.c
  function InitJlo (line 7) | void InitJlo(JLO *pjlo)
  function PresetJloAccel (line 31) | void PresetJloAccel(JLO *pjlo, float dt)
  function ActivateJlo (line 62) | void ActivateJlo(JLO *pjlo)
  function DeactivateJlo (line 67) | void DeactivateJlo(JLO *pjlo)
  function InitJlovol (line 80) | void InitJlovol(JLOVOL *pjlovol)

FILE: src/P2/joy.c
  function StartupJoy (line 17) | void StartupJoy()
  function AddGrfusr (line 24) | void AddGrfusr(int mask)
  function RemoveGrfusr (line 30) | void RemoveGrfusr(int mask)
  function UpdateGrfjoytFromGrfusr (line 36) | void UpdateGrfjoytFromGrfusr()
  function InitJoy (line 61) | void InitJoy(JOY *pjoy, int nPort, int nSlot)
  function UpdateJoy (line 78) | void UpdateJoy(JOY *pjoy)
  function SetJoyJoys (line 175) | void SetJoyJoys(JOY *pjoy, JOYS joys, JOYK joyk)
  function SetJoyBtnHandled (line 230) | void SetJoyBtnHandled(JOY *pjoy, GRFBTN btn)
  function TriggerJoyRumbleRumk (line 235) | void TriggerJoyRumbleRumk(JOY *pjoy, RUMK rumk, float dt)
  function StartJoySelection (line 246) | void StartJoySelection(JOY *pjoy)
  function AddCode (line 258) | void AddCode(CODE *pcode)
  function _ResetCodes (line 286) | void _ResetCodes()
  function _MatchCodes (line 299) | void _MatchCodes(JOY *pjoy, GRFBTN btn)
  function UpdateCodes (line 330) | void UpdateCodes()
  function ClearFchts (line 391) | void ClearFchts()
  function AddFcht (line 397) | void AddFcht(int nParam)
  function Chetkido (line 409) | void Chetkido()
  function StartupCodes (line 447) | void StartupCodes()

FILE: src/P2/jsg.c
  function InitJsg (line 9) | void InitJsg(JSG *pjsg)
  function FIsJsgActive (line 30) | int FIsJsgActive(JSG *pjsg)
  function ClearJsg (line 43) | void ClearJsg(JSG *pjsg)
  function ApplyJsg (line 54) | void ApplyJsg(JSG *pjsg, JT *pjt)
  function RetractJsg (line 69) | void RetractJsg(JSG *pjsg)
  function JSGE (line 105) | JSGE *PjsgeAllocJsg(JSG *pjsg, JSGEK jsgek, OID oid, int fAsync)
  function AddJsgContext (line 129) | void AddJsgContext(JSG *pjsg, OID oid)
  function AddJsgCut (line 134) | void AddJsgCut(JSG *pjsg, OID oid)
  function AddJsgFocus (line 139) | void AddJsgFocus(JSG *pjsg, OID oid)
  function AddJsgLabel (line 144) | void AddJsgLabel(JSG *pjsg, OID oid)
  function AddJsgTunnel (line 150) | void AddJsgTunnel(JSG *pjsg, OID oid)
  function AddJsgPause (line 155) | void AddJsgPause(JSG *pjsg, OID oid, float dtPause)
  function AddJsgAseg (line 161) | void AddJsgAseg(JSG *pjsg, OID oid, int fAsync)
  function AddJsgJump (line 166) | void AddJsgJump(JSG *pjsg, OID oid, JSGJK jsgjk, JSGLK jsglk, int fAsync)
  function AddJsgRun (line 173) | void AddJsgRun(JSG *pjsg, OID oid, float uRun, int fAsync)
  function AddJsgClimb (line 179) | void AddJsgClimb(JSG *pjsg, OID oid, float uClimb, int fAsync)
  function AddJsgAttack (line 185) | void AddJsgAttack(JSG *pjsg, OID oid, FTAK ftak, int fAsync)
  function AddJsgClock (line 191) | void AddJsgClock(JSG *pjsg, float rdt)
  function AddJsgUnknown (line 197) | void AddJsgUnknown(JSG *pjsg)

FILE: src/P2/jt.c
  function ProfileJt (line 85) | void ProfileJt(JT *pjt, int fProfile)

FILE: src/P2/jump.c
  function StartupJmt (line 34) | void StartupJmt()
  function ResetJmtList (line 39) | void ResetJmtList()
  function OnJmtAdd (line 44) | void OnJmtAdd(JMT *pjmt)
  function OnJmtRemove (line 50) | void OnJmtRemove(JMT *pjmt)
  function PostJmtLoad (line 58) | void PostJmtLoad(JMT *pjmt)

FILE: src/P2/keyhole.c
  function InitKeyhole (line 5) | void InitKeyhole(KEYHOLE *pkeyhole)

FILE: src/P2/landing.c
  function OnLandingAdd (line 4) | void OnLandingAdd(LANDING *planding)
  function OnLandingRemove (line 10) | void OnLandingRemove(LANDING *planding)
  function CloneLanding (line 16) | void CloneLanding(LANDING *planding, LANDING *plandingBase)

FILE: src/P2/lgn.c
  function InitLgn (line 4) | void InitLgn(LGN *plgn)
  function JTHS (line 26) | JTHS JthsCurrentLgn(LGN *plgn)
  function UseLgnCharm (line 31) | void UseLgnCharm(LGN *plgn)

FILE: src/P2/light.c
  function UpdateLightXfWorldHierarchy (line 9) | void UpdateLightXfWorldHierarchy(LIGHT *plight)
  function RemoveLightFromSw (line 16) | void RemoveLightFromSw(LIGHT *plight)
  function OnLightAdd (line 24) | void OnLightAdd(LIGHT *plight)
  function OnLightRemove (line 30) | void OnLightRemove(LIGHT *plight)
  function FitLinearFunction (line 38) | void FitLinearFunction(float x0, float y0, float x1, float y1, float *pd...
  function FitRecipFunction (line 58) | void FitRecipFunction(float x0, float y0, float x1, float y1, float *pdu...
  function ConvertFallOff (line 79) | void ConvertFallOff(LM *plm, float *pdu, float *pru)
  function ConvertAngleStrength (line 84) | void ConvertAngleStrength(float deg0, float g0, float deg1, float g1, fl...
  function InvalidateLight (line 100) | void InvalidateLight(LIGHT *plight)
  function SetLightMidtoneStrength (line 114) | void SetLightMidtoneStrength(LIGHT *plight, float gMidtone)
  function SetLightShadowStrength (line 120) | void SetLightShadowStrength(LIGHT *plight, float gShadow)
  function SetLightHighlightAngle (line 126) | void SetLightHighlightAngle(LIGHT *plight, float degHighlight)
  function SetLightMidtoneAngle (line 132) | void SetLightMidtoneAngle(LIGHT *plight, float degMidtone)
  function SetLightShadowAngle (line 138) | void SetLightShadowAngle(LIGHT *plight, float degShadow)
  function SetLightDynamic (line 146) | void SetLightDynamic(LIGHT *plight, int fDynamic)
  function SetLightConeAngle (line 157) | void SetLightConeAngle(LIGHT *plight, float degCone)
  function SetLightHotSpotAngle (line 165) | void SetLightHotSpotAngle(LIGHT *plight, float degHotSpot)
  function SetLightDiffuse_Old (line 178) | void SetLightDiffuse_Old(LIGHT *plight, float gDiffuse)
  function GetLightDiffuse_Old (line 184) | void GetLightDiffuse_Old(LIGHT *plight, float *pgDiffuse)
  function SetLightSaturate_Old (line 189) | void SetLightSaturate_Old(LIGHT *plight, VECTOR *pvecSaturate)
  function GetLightSaturate_Old (line 196) | void GetLightSaturate_Old(LIGHT *plight, VECTOR *pvecSaturate)

FILE: src/P2/lo.c
  function InitLo (line 16) | void InitLo(LO *plo)
  function PostLoLoad (line 22) | void PostLoLoad(LO *plo)
  function AddLo (line 27) | void AddLo(LO *plo)
  function AddLoHierarchy (line 41) | void AddLoHierarchy(LO *plo)
  function OnLoAdd (line 47) | void OnLoAdd(LO *plo)
  function RemoveLo (line 52) | void RemoveLo(LO *plo)
  function DeferLoRemove (line 69) | void DeferLoRemove(LO *plo)
  function SetLoSuckHideLimits (line 81) | void SetLoSuckHideLimits(LO *plo, LM *plmUSuck)
  function RemoveLoHierarchy (line 89) | void RemoveLoHierarchy(LO *plo)
  function OnLoRemove (line 95) | void OnLoRemove(LO *plo)
  function SnipLo (line 100) | void SnipLo(LO *plo)
  function FFindLoParent (line 114) | int FFindLoParent(LO *plo, ALO *paloParent)
  function SetLoParent (line 134) | void SetLoParent(LO *plo, ALO *paloParent)
  function FIsLoInWorld (line 141) | int FIsLoInWorld(LO *plo)
  function GetLoInWorld (line 168) | void GetLoInWorld(LO *plo, int *pfInWorld)
  function LO (line 175) | LO *PloCloneLo(LO *plo, SW *psw, ALO *paloParent)
  function CloneLoHierarchy (line 182) | void CloneLoHierarchy(LO *plo, LO *ploBase)
  function CloneLo (line 187) | void CloneLo(LO *plo, LO *ploBase)
  function SubscribeSwPpmqStruct (line 221) | void SubscribeSwPpmqStruct(SW *psw, MQ **ppmqFirst, PFNMQ pfnmq, void *p...
  function UnsubscribeSwPpmqStruct (line 230) | void UnsubscribeSwPpmqStruct(SW *psw, MQ **ppmqFirst, PFNMQ pfnmq, void ...
  function SubscribeLoStruct (line 254) | void SubscribeLoStruct(LO *plo, PFNMQ pfnmq, void *pvContext)
  function UnsubscribeLoStruct (line 259) | void UnsubscribeLoStruct(LO *plo, PFNMQ pfnmq, void *pvContext)
  function SubscribeLoObject (line 264) | void SubscribeLoObject(LO *plo, LO *ploTarget)
  function UnsubscribeLoObject (line 269) | void UnsubscribeLoObject(LO *plo, LO *ploTarget)
  function SendLoMessage (line 274) | void SendLoMessage(LO *plo, MSGID msgid, void *pv)
  function LoadLoFromBrx (line 294) | void LoadLoFromBrx(LO *plo, CBinaryInputStream *pbis)
  function FMatchesLoName (line 299) | int FMatchesLoName(LO *plo, OID oid)
  function OID (line 314) | OID OidProxyLo(LO *plo)
  function OID (line 324) | OID OidProxyLoPreferred(LO *plo)
  function GetLoOidProxy (line 334) | void GetLoOidProxy(LO *plo, OID *poid)
  function EnsureLoSidebagBool (line 345) | void EnsureLoSidebagBool(LO *plo, OPTID optid, int f)
  function EnsureLoSidebagInt (line 352) | void EnsureLoSidebagInt(LO *plo, OPTID optid, int n)
  function EnsureLoSidebagFloat (line 359) | void EnsureLoSidebagFloat(LO *plo, OPTID optid, float g)
  function EnsureLoSidebagOid (line 370) | void EnsureLoSidebagOid(LO *plo, OPTID optid, OID oid)
  function EnsureLoSidebagVector (line 383) | void EnsureLoSidebagVector(LO *plo, OPTID optid, VECTOR *pvec)

FILE: src/P2/main.c
  function main (line 91) | int main(char **argv, int argc) {
  function StartupSif (line 152) | void StartupSif()
  function StartupVU0 (line 204) | void StartupVU0()
  function StartupVU1 (line 219) | void StartupVU1()
  function Startup (line 241) | void Startup()

FILE: src/P2/mat.c
  function AddMatrix4Matrix4 (line 26) | void AddMatrix4Matrix4(MATRIX4 *pmatLeft, MATRIX4 *pmatRight, MATRIX4 *p...
  function LoadLookAtMatrix (line 72) | void LoadLookAtMatrix(VECTOR *pdpos, MATRIX3 *pmat)
  function FInvertMatrix4 (line 85) | bool FInvertMatrix4(MATRIX4 *pmatSrc, MATRIX4 *pmatDst)
  function BuildSimpleProjectionMatrix (line 96) | void BuildSimpleProjectionMatrix(float rx, float ry, float dxOffset, flo...

FILE: src/P2/mb.c
  function InitMbg (line 5) | void InitMbg(MBG *pmbg)
  function LoadMbgFromBrx (line 11) | void LoadMbgFromBrx(MBG *pmbg, CBinaryInputStream *pbis)
  function UpdateMbg (line 39) | void UpdateMbg(MBG *pmbg, float dt)

FILE: src/P2/memory.c
  function StartupMemMgr (line 22) | void StartupMemMgr()
  function HardLockError (line 57) | void HardLockError()
  function CheckForOutOfMemory (line 62) | void CheckForOutOfMemory()
  function FreeSw (line 80) | void FreeSw()
  function InitStackImpl (line 107) | void InitStackImpl()
  function FreeStackImpl (line 136) | void FreeStackImpl()
  function free (line 152) | void free(void *pv)
  function __builtin_delete (line 162) | void __builtin_delete()
  function CopyAqw (line 167) | void CopyAqw(void *pvDst, void *pvSrc, int cqw)
  function CopyAb (line 201) | void CopyAb(void *pvDst, void *pvSrc, uint cb)

FILE: src/P2/missile.c
  function InitMissile (line 4) | void InitMissile(MISSILE *pmissile)
  function OnMissileRemove (line 12) | void OnMissileRemove(MISSILE *pmissile)

FILE: src/P2/mrkv.c
  function InitMrkv (line 3) | void InitMrkv(MRKV *pmrkv)

FILE: src/P2/murray.c
  function InitMurray (line 3) | void InitMurray(MURRAY *pmurray)
  function FCanMurrayAttack (line 28) | int FCanMurrayAttack(MURRAY *pmurray)
  function SetMurrayPursueXfm (line 35) | void SetMurrayPursueXfm(MURRAY *pmurray, XFM *pxfm)
  function SetMurrayPatrolXfm (line 40) | void SetMurrayPatrolXfm(MURRAY *pmurray, XFM *pxfm)
  function CollectMurrayPrize (line 45) | void CollectMurrayPrize(MURRAY *pmurray, PCK pck, ALO *palo)

FILE: src/P2/phasemem.c
  function SetPhase (line 6) | void SetPhase(PHASE phase)
  function ClearPhase (line 15) | void ClearPhase(PHASE phase)

FILE: src/P2/pipe.c
  function StartupPipe (line 7) | void StartupPipe()
  function ResetPipeList (line 12) | void ResetPipeList()
  function OnPipeAdd (line 19) | void OnPipeAdd(PIPE *ppipe)
  function OnPipeRemove (line 25) | void OnPipeRemove(PIPE *ppipe)
  function PostPipeLoad (line 31) | void PostPipeLoad(PIPE *ppipe)
  function ClonePipe (line 41) | void ClonePipe(PIPE *ppipe, PIPE *ppipeBase)

FILE: src/P2/pnt.c
  function LoadPntFromBrx (line 4) | void LoadPntFromBrx(PNT *ppnt, CBinaryInputStream *pbis)
  function GetPntPos (line 10) | void GetPntPos(PNT *ppnt, VECTOR *ppos)
  function SetPntParent (line 15) | void SetPntParent(PNT *ppnt, ALO *paloParent)
  function ApplyPntProxy (line 21) | void ApplyPntProxy(PNT *ppnt, PROXY *pproxyApply)
  function FUN_00192150 (line 29) | void FUN_00192150(PNT *ppnt, CBinaryInputStream *pbis)
  function FUN_00192190 (line 38) | void FUN_00192190(PNT *ppnt)

FILE: src/P2/po.c
  function InitPo (line 8) | void InitPo(PO *ppo)
  function ClonePo (line 18) | void ClonePo(PO *ppo, PO *ppoBase)
  function FIsPoSoundBase (line 34) | int FIsPoSoundBase(PO *ppo)
  function MakePoActive (line 39) | void MakePoActive(PO *ppo)
  function FTakePoDamage (line 49) | int FTakePoDamage(PO *ppo, ZPR *pzpr)
  function JTHS (line 54) | JTHS JthsCurrentPo(PO *ppo)
  function PO (line 65) | PO *PpoCur()
  function OnPoAdd (line 83) | void OnPoAdd(PO *ppo)
  function OnPoRemove (line 89) | void OnPoRemove(PO *ppo)
  function SetPoPlayable (line 99) | void SetPoPlayable(PO *ppo, int fPlayable)
  function SwitchToPo (line 115) | void SwitchToPo(PO *ppo)
  function GetPoDiapi (line 122) | void GetPoDiapi(PO *ppo, DIALOG *pdialog, DIAPI *pdiapi)

FILE: src/P2/prog.c
  function Begin (line 20) | void CProg::Begin()
  function SetRemain (line 29) | void CProg::SetRemain(int nRemain)
  function End (line 52) | void CProg::End()
  function Draw (line 68) | void CProg::Draw() {

FILE: src/P2/proxy.c
  function InitProxy (line 4) | void InitProxy(PROXY *pproxy)
  function PostProxyLoad (line 14) | void PostProxyLoad(PROXY *pproxy)

FILE: src/P2/pzo.c
  function LoadLockFromBrx (line 41) | void LoadLockFromBrx(LOCK *plock, CBinaryInputStream *pbis)
  function PostLockLoad (line 54) | void PostLockLoad(LOCK *plock)
  function LoadLockgFromBrx (line 67) | void LoadLockgFromBrx(LOCKG *plockg, CBinaryInputStream *pbis)
  function PostLockgLoad (line 79) | void PostLockgLoad(LOCKG *plockg)
  function SetLockgIndex (line 130) | void SetLockgIndex(LOCKG *plockg, int ifws)
  function AddLockgLock (line 138) | void AddLockgLock(LOCKG *plockg, OID oidLock)

FILE: src/P2/rail.c
  function InitRail (line 7) | void InitRail(RAIL *prail)
  function OnRailAdd (line 14) | void OnRailAdd(RAIL *prail)
  function OnRailRemove (line 20) | void OnRailRemove(RAIL *prail)
  function PostLoadRail (line 26) | void PostLoadRail(RAIL *prail)
  function CloneRail (line 36) | void CloneRail(RAIL *prail, RAIL *prailBase)

FILE: src/P2/rat.c
  function InitRat (line 5) | void InitRat(RAT *prat)
  function OnRatAdd (line 18) | void OnRatAdd(RAT *prat)
  function OnRatRemove (line 24) | void OnRatRemove(RAT *prat)
  function CloneRat (line 30) | void CloneRat(RAT *prat, RAT *pratBase)
  function OnRatholeAdd (line 55) | void OnRatholeAdd(RATHOLE *prathole)
  function OnRatholeRemove (line 61) | void OnRatholeRemove(RATHOLE *prathole)

FILE: src/P2/rchm.c
  function InitRchm (line 3) | void InitRchm(RCHM *prchm)
  function SetRchmNaturalCoefficients (line 20) | void SetRchmNaturalCoefficients(RCHM *prchm, float rcl, float io, float ...
  function SetRchmCenterCoefficients (line 27) | void SetRchmCenterCoefficients(RCHM *prchm, float rcl, float io, float l...

FILE: src/P2/render.c
  function NCmpPrplReverseZ (line 17) | int NCmpPrplReverseZ(RPL **pprpl1, RPL **pprpl2)
  function EnsureCameraGlobals (line 41) | void EnsureCameraGlobals()

FILE: src/P2/rip.c
  function SetRipgEmitb (line 7) | void SetRipgEmitb(RIPG *pripg, EMITB *pemitb)
  function UpdateRipgBounds (line 17) | void UpdateRipgBounds(RIPG *pripg)
  function RemoveRip (line 34) | void RemoveRip(RIP *prip)
  function AddRipRef (line 40) | void AddRipRef(RIP *prip)
  function TouchRip (line 47) | void TouchRip(RIP *prip, int fTouching)
  function ProjectRoseTransform (line 149) | void ProjectRoseTransform(ROSE *prose, float dt)

FILE: src/P2/rog.c
  function InitRov (line 6) | void InitRov(ROV *prov)
  function LoadRovFromBrx (line 14) | void LoadRovFromBrx(ROV *prov, CBinaryInputStream *pbis)
  function ReadRovJoystick (line 26) | void ReadRovJoystick(ROV *prov, JOY *pjoy)
  function FIsRovSoundBase (line 61) | int FIsRovSoundBase(ROV *prov)
  function SetRobCollectible (line 68) | void SetRobCollectible(ROB *prob, OID oidCollectible)
  function SetRobHarvester (line 73) | void SetRobHarvester(ROB *prob, OID oidHarvester)
  function SetRobVehicle (line 78) | void SetRobVehicle(ROB *prob, OID oidVehicle)
  function SetRobPrize (line 83) | void SetRobPrize(ROB *prob, OID oidPrize)
  function AddRobSpawnTunnel (line 88) | void AddRobSpawnTunnel(ROB *prob, OID oidSpawnTunnel)
  function ROBK (line 102) | ROBK RobkCur()

FILE: src/P2/rumble.c
  function InitRumble (line 10) | void InitRumble(RUMBLE *prumble, int nPort, int nSlot)
  function SetRumbleRums (line 37) | void SetRumbleRums(RUMBLE *prumble, RUMS rums)
  function StopRumbleActuators (line 73) | void StopRumbleActuators(RUMBLE *prumble)
  function FUN_001A7E70 (line 84) | void FUN_001A7E70()

FILE: src/P2/sb.c
  function UpdateSbgSgs (line 9) | void UpdateSbgSgs(SBG *psbg)

FILE: src/P2/screen.c
  function PostBlotLoad (line 21) | void PostBlotLoad(BLOT *pblot)
  function SetBlotFontScale (line 35) | void SetBlotFontScale(float rFontScale, BLOT *pblot)
  function DtAppearBlot (line 44) | float DtAppearBlot(BLOT *pblot)
  function DtVisibleBlot (line 49) | float DtVisibleBlot(BLOT *pblot)
  function DtDisappearBlot (line 54) | float DtDisappearBlot(BLOT *pblot)
  function SetBlotDtAppear (line 59) | void SetBlotDtAppear(BLOT *pblot, float dtAppear)
  function SetBlotDtVisible (line 64) | void SetBlotDtVisible(BLOT *pblot, float dtVisible)
  function SetBlotDtDisappear (line 69) | void SetBlotDtDisappear(BLOT *pblot, float dtDisappear)
  function SetTimer (line 108) | void SetTimer(TIMER *ptimer, float dt)
  function SetTimerSpeed (line 127) | void SetTimerSpeed(TIMER *ptimer, float svt)
  function SetTimerExpire (line 135) | void SetTimerExpire(TIMER *ptimer, float dt, void *pfntn)
  function StartTimer (line 141) | void StartTimer(TIMER *ptimer)
  function StopTimer (line 146) | void StopTimer(TIMER *ptimer)
  function SetTimerTimers (line 154) | void SetTimerTimers(TIMER *ptimer, TIMERS timers)
  function DtVisibleTrunkctr (line 163) | float DtVisibleTrunkctr(TRUNKCTR *ptrunkctr)
  function DtVisibleCrusherctr (line 168) | float DtVisibleCrusherctr(CRUSHERCTR *pcrusherctr)
  function FUN_001ABE60 (line 176) | float FUN_001ABE60()

FILE: src/P2/sensor.c
  function InitSensor (line 7) | void InitSensor(SENSOR *psensor)
  function SetSensorAlarm (line 14) | void SetSensorAlarm(SENSOR *psensor, ALARM *palarm)
  function SetSensorSensors (line 24) | void SetSensorSensors(SENSOR *psensor, SENSORS sensors)
  function AddSensorTriggerObject (line 71) | void AddSensorTriggerObject(SENSOR *psensor, OID oid)
  function AddSensorNoTriggerObject (line 87) | void AddSensorNoTriggerObject(SENSOR *psensor, OID oid)
  function AddSensorTriggerClass (line 103) | void AddSensorTriggerClass(SENSOR *psensor, CID cid)
  function AddSensorNoTriggerClass (line 119) | void AddSensorNoTriggerClass(SENSOR *psensor, CID cid)
  function FUN_001afaf8 (line 151) | int FUN_001afaf8(SENSOR *psensor, SO *pso)

FILE: src/P2/shadow.c
  function InvalidateShadowVifs (line 9) | void InvalidateShadowVifs(SHADOW *pshadow)
  function SetShadowShader (line 16) | void SetShadowShader(SHADOW *pshadow, OID oidShdShadow)
  function FShadowRadiusSet (line 26) | int FShadowRadiusSet(SHADOW *pshadow)
  function SetShadowNearRadius (line 31) | void SetShadowNearRadius(SHADOW *pshadow, float sNearRadius)
  function SetShadowFarRadius (line 42) | void SetShadowFarRadius(SHADOW *pshadow, float sFarRadius)
  function SetShadowNearCast (line 57) | void SetShadowNearCast(SHADOW *pshadow, float sNearCast)
  function SetShadowFarCast (line 64) | void SetShadowFarCast(SHADOW *pshadow, float sFarCast)
  function SetShadowConeAngle (line 71) | void SetShadowConeAngle(SHADOW *pshadow, float degConeAngle)

FILE: src/P2/shd.c
  function LoadClutFromBrx (line 11) | void LoadClutFromBrx(CBinaryInputStream *pbis, CLUT *pclut)
  function LoadBmpFromBrx (line 20) | void LoadBmpFromBrx(CBinaryInputStream *pbis, BMP *pbmp)
  function UploadPermShaders (line 35) | void UploadPermShaders()

FILE: src/P2/slotheap.c
  function _InitSlotheap (line 5) | void _InitSlotheap(SLOTHEAP *pslotheap, int cb, int c)
  function CreateSlotheapSw (line 21) | void CreateSlotheapSw(SLOTHEAP *pslotheap, int cb, int c)
  function CreateSlotheapSwAlign64 (line 28) | void CreateSlotheapSwAlign64(SLOTHEAP *pslotheap, int cb, int c)
  function FreeSlotheapPv (line 61) | void FreeSlotheapPv(SLOTHEAP *pslotheap, void *pv)

FILE: src/P2/sm.c
  function PostSmLoad (line 6) | void PostSmLoad(SM *psm)

FILE: src/P2/smartguard.c
  function UseSmartguardFlashlightTarget (line 9) | void UseSmartguardFlashlightTarget(SMARTGUARD *psmartguard, SGS sgs, OID...
  function UpdateSmartguard (line 24) | void UpdateSmartguard(SMARTGUARD *psmartguard, float dt)
  function HandleSmartguardMessage (line 38) | void HandleSmartguardMessage(SMARTGUARD *psmartguard, MSGID msgid, void ...
  function FreezeSmartguard (line 49) | void FreezeSmartguard(SMARTGUARD *psmartguard, int fFreeze)

FILE: src/P2/so.c
  function UpdateSo (line 47) | void UpdateSo(SO *pso, float dt)
  function SetSoMass (line 52) | void SetSoMass(SO *pso, float mass)
  function ApplySoConstraintLocal (line 114) | void ApplySoConstraintLocal(SO *pso, CONSTR *pconstr, VECTOR *pvecLocal,...
  function AddSoExternalAccelerations (line 125) | void AddSoExternalAccelerations(SO *pso, XA *pxa, float dt)
  function SetSoNoInteract (line 134) | void SetSoNoInteract(SO *pso, int fNoInteract)

FILE: src/P2/sort.c
  function SwapEntries (line 3) | void SwapEntries(void *afoo, int cb, int i1, int i2)

FILE: src/P2/sound.c
  type MVG (line 11) | struct MVG
  function PauseMusic (line 65) | void PauseMusic()
  function ContinueMusic (line 70) | void ContinueMusic()
  function StartupSound (line 93) | void StartupSound()
  function SetMvgkUvol (line 156) | void SetMvgkUvol(float uvol)
  function MvgkUnknown1 (line 161) | void MvgkUnknown1(MVGK mvgk)
  function SetMvgkRvol (line 183) | void SetMvgkRvol(int channel, MVGK mvgk, float rvol)
  function KillSoundSystem (line 198) | void KillSoundSystem()

FILE: src/P2/spire.c
  function InitSpire (line 9) | void InitSpire(SPIRE *pspire)
  function OnSpireAdd (line 15) | void OnSpireAdd(SPIRE *pspire)
  function OnSpireRemove (line 21) | void OnSpireRemove(SPIRE *pspire)
  function CloneSpire (line 27) | void CloneSpire(SPIRE *pspire, SPIRE *pspireBase)

FILE: src/P2/splice/bif.cpp
  function CRef (line 14) | CRef RefOpPrint(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 21) | CRef RefOpPrintFrame(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 28) | CRef RefOpPrintSidebag(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 35) | CRef RefOpIntEqual(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 44) | CRef RefOpL(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 49) | CRef RefOpLE(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 54) | CRef RefOpG(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 59) | CRef RefOpGE(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 68) | CRef RefOpEqual(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 73) | CRef RefOpIsBoolean(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 80) | CRef RefOpIsNum(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 87) | CRef RefOpIsFloat(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 94) | CRef RefOpIsInteger(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 101) | CRef RefOpIsSymbol(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 108) | CRef RefOpIsVector(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 115) | CRef RefOpIsMatrix(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 122) | CRef RefOpIsClq(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 129) | CRef RefOpIsLm(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 136) | CRef RefOpIsSmp(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 143) | CRef RefOpIsList(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 150) | CRef RefOpIsNull(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 157) | CRef RefOpIsObject(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 164) | CRef RefOpIsNullObj(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 171) | CRef RefOpIsMethod(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 178) | CRef RefOpIsProcedure(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 187) | CRef RefOpNot(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 212) | CRef RefOpList(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 247) | CRef RefOpSqrt(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 252) | CRef RefOpSin(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 257) | CRef RefOpCos(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 262) | CRef RefOpTan(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 267) | CRef RefOpAsin(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 272) | CRef RefOpAcos(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 277) | CRef RefOpAtan(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 282) | CRef RefOpRadNormalize(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 363) | CRef RefOpAddO(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 368) | CRef RefOpEnsureO(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 373) | CRef RefOpSetO(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 378) | CRef RefOpGetO(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 393) | CRef RefOpFindPlayerObject(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 400) | CRef RefOpFindWorldObject(int carg, CRef *aref, CFrame *pframe)
  function CRef (line 407) | CRef RefOpFindCameraObject(int carg, CRef *aref, CFrame *pframe)

FILE: src/P2/splice/frame.cpp
  function CFrame (line 26) | CFrame *PframeNew()
  function DeleteFrame (line 33) | void DeleteFrame(CFrame *pframe)

FILE: src/P2/splice/gc.cpp
  function CFrame (line 45) | CFrame *CGc::PframePop()
  function CPair (line 59) | CPair *CGc::PpairPop()
  function CProc (line 73) | CProc *CGc::PprocPop()

FILE: src/P2/splice/method.cpp
  function CMethod (line 7) | CMethod *PmethodNew()

FILE: src/P2/splice/proc.cpp
  function CProc (line 14) | CProc *PprocNew()

FILE: src/P2/splice/ref.cpp
  function CRef (line 21) | CRef &CRef::operator=(const CRef &ref)

FILE: src/P2/splice/sidebag.cpp
  function CSidebag (line 13) | CSidebag *PsidebagNew()

FILE: src/P2/splice/spliceutils.cpp
  function StartupSplice (line 13) | void StartupSplice()
  function ShutdownSplice (line 33) | void ShutdownSplice()

FILE: src/P2/splice/splotheap.cpp
  function SPLOT (line 64) | SPLOT *CSplotheap::PsplotLookup(int i)
  function SPLOT (line 91) | static SPLOT *PsplotFromPv(void *pv)
  function FIsPvGarbage (line 96) | bool FIsPvGarbage(void *pv)
  function MarkPvAlive (line 102) | void MarkPvAlive(void *pv)

FILE: src/P2/splice/vecmat.cpp
  function VECTOR (line 29) | VECTOR *PvectorNew()
  function IncrefVector (line 45) | void IncrefVector(VECTOR *pvector)
  function DecrefVector (line 51) | void DecrefVector(VECTOR *pvector)
  function MATRIX4 (line 65) | MATRIX4 *PmatrixNew()
  function IncrefMatrix (line 81) | void IncrefMatrix(MATRIX4 *pmatrix)
  function DecrefMatrix (line 87) | void DecrefMatrix(MATRIX4 *pmatrix)
  function DeleteMatrix (line 97) | void DeleteMatrix(MATRIX4 *pmatrix)
  function CLQ (line 102) | CLQ *PclqNew()
  function IncrefClq (line 118) | void IncrefClq(CLQ *pclq)
  function DecrefClq (line 124) | void DecrefClq(CLQ *pclq)
  function LM (line 137) | LM *PlmNew()
  function IncrefLm (line 153) | void IncrefLm(LM *plm)
  function DecrefLm (line 159) | void DecrefLm(LM *plm)
  function SMP (line 172) | SMP *PsmpNew()
  function IncrefSmp (line 188) | void IncrefSmp(SMP *psmp)
  function DecrefSmp (line 194) | void DecrefSmp(SMP *psmp)
  function StartupSpliceStructuredTypeFactories (line 204) | void StartupSpliceStructuredTypeFactories()
  function ShutdownSpliceStructuredTypeFactories (line 223) | void ShutdownSpliceStructuredTypeFactories()

FILE: src/P2/step.c
  function RenderStepSelf__FP4STEPP2CMP2RO (line 16) | void RenderStepSelf__FP4STEPP2CMP2RO(STEP *pstep, CM *pcm, RO *pro)
  function UpdateStep (line 29) | void UpdateStep(STEP *pstep, float dt)
  function CT (line 35) | CT CtTorqueStep(STEP *pstep)
  function PresetStepAccel (line 46) | void PresetStepAccel(STEP *pstep, float dt)
  function AdjustStepDz (line 58) | void AdjustStepDz(STEP *pstep, GRFADJ grfadj, DZ *pdz, int ixpd, float dt)
  function AdjustStepDzBase (line 63) | void AdjustStepDzBase(STEP *pstep, GRFADJ grfadj, DZ *pdz, int ixpd)

FILE: src/P2/stepguard.c
  function LoadStepguardFromBrx (line 8) | void LoadStepguardFromBrx(STEPGUARD *pstepguard, CBinaryInputStream *pbis)
  function CloneStepguard (line 16) | void CloneStepguard(STEPGUARD *pstepguard, STEPGUARD *pstepguardBase)
  function OnStepguardAdd (line 34) | void OnStepguardAdd(STEPGUARD *pstepguard)
  function OnStepguardRemove (line 53) | void OnStepguardRemove(STEPGUARD *pstepguard)
  function SGAS (line 150) | SGAS SgasGetStepguard(STEPGUARD *pstepguard)
  function FValidSgs (line 159) | int FValidSgs(SGS sgs)
  function FInflictStepguardZap (line 216) | int FInflictStepguardZap(STEPGUARD *pstepguard, XP *pxp, ZPR *pzpr)
  function FDetectStepguard (line 221) | int FDetectStepguard(STEPGUARD *pstepguard)
  function InitSgg (line 232) | void InitSgg(SGG *psgg)
  function TriggerSggAlarms (line 264) | void TriggerSggAlarms(SGG *psgg, ALTK altk)

FILE: src/P2/steppower.c
  function SetFsp (line 13) | void SetFsp(FSP fsp)
  function IRotatePowerUp (line 305) | int IRotatePowerUp(JOY *pjoy, int iCur, int iMax, int *mpigrfvault)

FILE: src/P2/sw.c
  function InitSwDlHash (line 18) | void InitSwDlHash(SW *psw)
  function LoadBulkDataFromBrx (line 35) | void LoadBulkDataFromBrx(CBinaryInputStream *pbis)
  function XA (line 55) | XA *PxaAllocSw(SW *psw)
  function FreeSwXaList (line 62) | void FreeSwXaList(SW *psw, XA *pxaFirst)
  function MQ (line 72) | MQ *PmqAllocSw(SW *psw)
  function FreeSwMqList (line 79) | void FreeSwMqList(SW *psw, MQ *pmqFirst)
  function EnsureSwCallback (line 89) | void EnsureSwCallback(SW *psw, PFNMQ pfnmq, void *pvContext, MSGID msgid...
  function PostSwCallback (line 107) | void PostSwCallback(SW *psw, PFNMQ pfnmq, void *pvContext, MSGID msgid, ...
  function STSO (line 133) | STSO *PstsoAllocSw(SW *psw)
  function FreeSwStsoList (line 140) | void FreeSwStsoList(SW *psw, STSO *pstsoFirst)
  function FUN_001dccc0 (line 173) | void FUN_001dccc0(CBinaryInputStream *pbis)
  function SetSwIllum (line 196) | void SetSwIllum(SW *psw, float uMidtone)
  function SetSwIllumShadow (line 202) | void SetSwIllumShadow(SW *psw, float uShadow)
  function SetSwExcitement (line 208) | void SetSwExcitement(SW *psw, float gexcMenu)
  function FLevelSwVisited (line 216) | int FLevelSwVisited(SW *psw, WID wid)
  function FLevelSwPrimary (line 221) | int FLevelSwPrimary(SW *psw, WID wid)
  function FLevelSwSecondary (line 226) | int FLevelSwSecondary(SW *psw, WID wid)
  function FLevelSwTertiary (line 231) | int FLevelSwTertiary(SW *psw, WID wid)
  function SetSwPlayerSuck (line 258) | void SetSwPlayerSuck(SW *psw, float uSuck)
  function GetSwPlayerSuck (line 263) | void GetSwPlayerSuck(SW *psw, float *puSuck)
  function IncrementSwHandsOff (line 269) | void IncrementSwHandsOff(SW *psw)
  function DecrementSwHandsOff (line 277) | void DecrementSwHandsOff(SW *psw)
  function IsSwHandsOff (line 285) | int IsSwHandsOff(SW *psw)
  function IsSwVagPlaying (line 290) | void IsSwVagPlaying(SW *psw, int *pfPlaying)
  function SetSwDarken (line 295) | void SetSwDarken(SW *psw, float rDarken)
  function SetSwDarkenSmooth (line 301) | void SetSwDarkenSmooth(SW *psw, float rDarkenSmooth)
  function CancelSwDialogPlaying (line 306) | void CancelSwDialogPlaying(SW *psw)

FILE: src/P2/tank.c
  function UseTankCharm (line 12) | void UseTankCharm(TANK *ptank)
  function OnTankActive (line 20) | void OnTankActive(TANK *ptank, int fActive, PO *ppoOther)
  function JTHS (line 45) | JTHS JthsCurrentTank(TANK *ptank)

FILE: src/P2/target.c
  function StartupTarget (line 5) | void StartupTarget()
  function ResetTargetList (line 10) | void ResetTargetList()
  function InitTarget (line 15) | void InitTarget(TARGET *ptarget)
  function OnTargetAdd (line 22) | void OnTargetAdd(TARGET *ptarget)
  function OnTargetRemove (line 28) | void OnTargetRemove(TARGET *ptarget)
  function CloneTarget (line 34) | void CloneTarget(TARGET *ptarget, TARGET *ptargetBase)

FILE: src/P2/text.c
  function printf (line 33) | int printf(char *pchzFormat, ...)
  function sprintf (line 44) | int sprintf(char *pchzDest, char *pchzFormat, ...)
  function _snprintf (line 57) | int _snprintf(char *pchzDest, int cchDest, char *pchzFormat, ...)
  function uint (line 68) | uint strlen(const char *pchz)

FILE: src/P2/thread.c
  function SemaCreate (line 6) | int SemaCreate(int initCount, int maxCount)
  function InitCritSect (line 19) | void InitCritSect(CRITSECT *pcritsect)
  function EnterCritSect (line 25) | void EnterCritSect(CRITSECT *pcritsect)
  function LeaveCritSect (line 41) | void LeaveCritSect(CRITSECT *pcritsect)
  function StartupThread (line 54) | void StartupThread()

FILE: src/P2/tn.c
  function OnTnRemove (line 11) | void OnTnRemove(TN *ptn)
  function PostTnLoad (line 20) | void PostTnLoad(TN *ptn)
  function FUN_001e2840 (line 30) | void FUN_001e2840(TN *ptn, TNS tns)
  function UpdateTn (line 44) | void UpdateTn(TN *ptn, float dt)
  function RenderTnSelf (line 53) | void RenderTnSelf(TN *ptn, CM *pcm, RO *pro)
  function FreezeTn (line 58) | void FreezeTn(TN *ptn, int fFreeze)
  function SetCptn (line 77) | void SetCptn(CPTN *pcptn, void *pv)
  function RevokeCptn (line 82) | void RevokeCptn(CPTN *pcptn, void *pv)

FILE: src/P2/transition.c
  function Set (line 19) | void CTransition::Set(char *pchzWorld, OID oidWarp, OID oidWarpContext, ...
  function Execute (line 38) | void CTransition::Execute()
  function ResetWorld (line 84) | void ResetWorld(FTRANS ftrans)

FILE: src/P2/turret.c
  function GetTurretDiapi (line 28) | void GetTurretDiapi(TURRET *pturret, DIALOG *pdialog, DIAPI *pdiapi)

FILE: src/P2/tv.c
  function GetTvItvbMinMax (line 8) | void GetTvItvbMinMax(TV *ptv, int *pitvbDrawMin, int *pitvbDrawMax)
  function SetTvTvs (line 24) | void SetTvTvs(TV *ptv, TVS tvs)

FILE: src/P2/ub.c
  function SGS (line 11) | SGS SgsNextUbgAI(UBG *pubg)
  function FDetectUbg (line 34) | int FDetectUbg(UBG *pubg)
  function FCanUbgAttack (line 44) | int FCanUbgAttack(UBG *pubg)
  function DoUbgFreefallJump (line 57) | void DoUbgFreefallJump(UBG *pubg)
  function DoUbgFreefallLanding (line 74) | void DoUbgFreefallLanding(UBG *pubg)
  function UpdateUbgSgs (line 104) | void UpdateUbgSgs(UBG *pubg)
  function FIgnoreUbgIntersection (line 118) | int FIgnoreUbgIntersection(UBG *pubg, SO *psoOther)

FILE: src/P2/ui.c
  function StartupUi (line 6) | void StartupUi()
  function InitUi (line 11) | void InitUi(UI *pui)
  function PostUiLoad (line 20) | void PostUiLoad(UI *pui)
  function DrawUi (line 31) | void DrawUi()
  function RenderUi (line 36) | void RenderUi()
  function ResetUi (line 41) | void ResetUi(UI *pui)
  function SetUiUPause (line 58) | void SetUiUPause(UI *pui, float uPause)

FILE: src/P2/util.c
  function RadNormalize (line 13) | float RadNormalize(float rad)
  function GLimitAbs (line 23) | float GLimitAbs(float g, float absLimit)
  function RadSmooth (line 42) | float RadSmooth(float radCur, float radTarget, float dt, SMP *psmp, floa...
  function RadSmoothA (line 51) | float RadSmoothA(float radCur, float dradCur, float radTarget, float dt,...
  function NRandInRange (line 65) | int NRandInRange(int nLow, int nHi)
  function GRandInRange (line 80) | float GRandInRange(float gHi, float gLow)
  function GRandGaussian (line 97) | float GRandGaussian(float param_1, float param_2, float param_3)
  function FFloatsNear (line 128) | int FFloatsNear(float g1, float g2, float gEpsilon)
  function CSolveQuadratic (line 149) | int CSolveQuadratic(float a, float b, float c, float *ax)
  function PrescaleClq (line 178) | void PrescaleClq(CLQ *pclqSrc, float ru, float du, CLQ *pclqDst)
  function CalculateSinCos (line 190) | void CalculateSinCos(float angle, float *sin, float *cos)
  function GTrunc (line 236) | double GTrunc(double param_1)
  function GTrunc (line 273) | float GTrunc(float param_1)
  function GModPositive (line 305) | float GModPositive(float gDividend, float gDivisor)
  function FitClq (line 315) | void FitClq(float g0, float g1, float u, float gU, CLQ *pclq)
  function FCheckLm (line 322) | int FCheckLm(LM *plm, float g)
  function FCheckAlm (line 327) | bool FCheckAlm(int clm, LM *alm, float g)
  function GLimitLm (line 339) | float GLimitLm(LM *plm, float g)
  function SgnCompareG (line 352) | int SgnCompareG(float *pg1, float *pg2)
  function Force (line 365) | void Force(void *pv)

FILE: src/P2/vec.c
  function SetVectorCylind (line 6) | void SetVectorCylind(VECTOR *pvec, float rad, float sXY, float sZ)
  function SetVectorSphere (line 16) | void SetVectorSphere(VECTOR *pvec, float radPan, float radTilt, float s)
  function CalculateVectorPanTilt (line 41) | void CalculateVectorPanTilt(VECTOR *pvec, float *pradPan, float *pradTilt)
  function ConvertDeulToW (line 54) | void ConvertDeulToW(VECTOR *peul, VECTOR *pdeul, VECTOR *pw)
  function FCalculateMuzzleVelocityAngle (line 69) | int FCalculateMuzzleVelocityAngle(VECTOR *pposLaunch, VECTOR *pposTarget...

FILE: src/P2/vifs.c
  function AddVifBaseOffset (line 15) | void VIFS::AddVifBaseOffset(int iqwBase, int diqwOffset)
  function AddVifMscal (line 24) | void VIFS::AddVifMscal(void *pv)
  function AddVifMscalf (line 35) | void VIFS::AddVifMscalf(void *pv)
  function AddVifFlush (line 43) | void VIFS::AddVifFlush()
  function AddVifFlusha (line 48) | void VIFS::AddVifFlusha()
  function AddVifFlushe (line 53) | void VIFS::AddVifFlushe()
  function AddVifStcycl (line 58) | void VIFS::AddVifStcycl(int wl, int cl)
  function AddVifDirect (line 78) | void VIFS::AddVifDirect(int cqw, QW *aqw, int fInt)
  function AddVifDirectRefs (line 92) | void VIFS::AddVifDirectRefs(int cqw, QW *aqw, int fInt)
  function AddVifGifs (line 103) | void VIFS::AddVifGifs(GIFS *pgifs)

FILE: src/P2/vis.c
  function InitVismap (line 6) | void InitVismap(VISMAP *pvismap)
  function LoadVismapFromBrx (line 12) | void LoadVismapFromBrx(VISMAP *pvismap, CBinaryInputStream *pbis)
  function GRFZON (line 27) | GRFZON GrfzonOneHop(VISMAP *pvismap, VBSP *pvbsp)
  function ClipVismapSphereOneHop (line 54) | void ClipVismapSphereOneHop(VISMAP *pvismap, VECTOR *ppos, float sRadius...

FILE: src/P2/waypoint.c
  function InitWaypoint (line 9) | void InitWaypoint(WAYPOINT *pwaypoint)
  function PostWaypointLoad (line 16) | void PostWaypointLoad(WAYPOINT *pwaypoint)
  function SetWaypointRsmg (line 24) | void SetWaypointRsmg(WAYPOINT *pwaypoint, int fOnTrigger, OID oidRoot, O...
  function UpdateWaypoint (line 30) | void UpdateWaypoint(WAYPOINT *pwaypoint, float dt)
  function HandleWaypointMessage (line 37) | void HandleWaypointMessage(WAYPOINT *pwaypoint, MSGID msgid, void *pv)
  function WPSG (line 48) | WPSG *PwpsgNew()
  function AddWpsgWaypoint (line 55) | void AddWpsgWaypoint(WPSG *pwpsg, WAYPOINT *pwaypoint)
  function EnsureWpsgCallback (line 67) | void EnsureWpsgCallback(WPSG *pwpsg)

FILE: src/P2/wipe.c
  function InitWipe (line 3) | void InitWipe(WIPE *pwipe)
  function WipeToWorldWarp (line 23) | void WipeToWorldWarp(const void *pchzWorld, OID oidWarp, WIPEK wipek)

FILE: src/P2/wr.c
  function InitWr (line 3) | void InitWr(WR *pwr)
  function UNoise (line 19) | float UNoise(int n)
  function UBias (line 30) | float UBias(float u, float v)
  function WRE (line 43) | WRE *PwreGetWrCur(WR *pwr, ENSK ensk, WREK wrek)
  function WRE (line 57) | WRE *PwreGetWrCircle(WR *pwr, ENSK ensk)
  function WRE (line 62) | WRE *PwreGetWrBend(WR *pwr, ENSK ensk)
  function SetWrWavelength (line 67) | void SetWrWavelength(WR *pwr, float sWavelength)
  function GetWrWavelength (line 80) | void GetWrWavelength(WR *pwr, float *psWavelength)
  function AddOnzOnze (line 93) | void AddOnzOnze(ONZ *ponz, float uAmpl, float gFreq, float gPhase, float...
  function AddWrBendNoise (line 108) | void AddWrBendNoise(WR *pwr, float uAmpl, float gFreq, float gPhase, flo...
  function AddWrSwivelNoise (line 114) | void AddWrSwivelNoise(WR *pwr, float uAmpl, float gFreq, float gPhase, f...

FILE: src/P2/xform.c
  function LoadXfmFromBrx (line 9) | void LoadXfmFromBrx(XFM *pxfm, CBinaryInputStream *pbis)
  function SetXfmParent (line 16) | void SetXfmParent(XFM *pxfm, ALO *paloParent)
  function ApplyXfmProxy (line 23) | void ApplyXfmProxy(XFM *pxfm, PROXY *pproxyApply)
  function GetXfmPos (line 31) | void GetXfmPos(XFM *pxfm, VECTOR *ppos)
  function GetXfmMat (line 36) | void GetXfmMat(XFM *pxfm, MATRIX3 *pmat)
  function SetWarpRsmg (line 51) | void SetWarpRsmg(WARP *pwarp, int fOnTrigger, OID oidRoot, OID oidSM, OI...
  function SetExitExits (line 69) | void SetExitExits(EXIT *pexit, EXITS exits)
  function InitCamera (line 104) | void InitCamera(CAMERA *pcamera)
  function EnableCamera (line 112) | void EnableCamera(CAMERA *pcamera)
  function DisableCamera (line 122) | void DisableCamera(CAMERA *pcamera)

FILE: src/P2/zap.c
  function InitTzp (line 5) | void InitTzp(TZP *ptzp)
  function PostTzpLoad (line 14) | void PostTzpLoad(TZP *ptzp)
  function CloneTzp (line 22) | void CloneTzp(TZP *ptzp, TZP *ptzpBase)
  function RenderTzpAll (line 28) | void RenderTzpAll(TZP *ptzp, CM *pcm, RO *pro)
  function FInflictTzpZap (line 33) | int FInflictTzpZap(TZP *ptzp, XP *pxp, ZPR *pzpr)
  function ZPD (line 39) | ZPD *PzpdEnsureTzp(TZP *ptzp, ENSK ensk)
  function FUN_001F5210 (line 47) | void FUN_001F5210(TZP *ptzp)
  function InitVolzp (line 52) | void InitVolzp(VOLZP *pvolzp)
  function InitZpd (line 61) | void InitZpd(ZPD *pzpd, SO *pso)
  function InflictZpdZap (line 72) | void InflictZpdZap(ZPD *pzpd, XP *pxp, ZPR *pzpr)
  function AddZpdZapObject (line 81) | void AddZpdZapObject(ZPD *pzpd, OID oid)
  function AddZpdZapLo (line 89) | void AddZpdZapLo(ZPD *pzpd, LO *plo)
  function RemoveZpdZapLo (line 109) | void RemoveZpdZapLo(ZPD *pzpd, LO *plo)
Condensed preview — 418 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,701K chars).
[
  {
    "path": ".gitattributes",
    "chars": 52,
    "preview": "*.h linguist-language=C++\n*.c linguist-language=C++\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 928,
    "preview": "name: Build project and validate checksum\n\non:\n  push:\n    branches:\n      - \"*\"\n\njobs:\n  build:\n    if: github.reposito"
  },
  {
    "path": ".github/workflows/frogress.yml",
    "chars": 1085,
    "preview": "name: Post mapfile_parser progress to Frogress endpoint\n\non:\n  push:\n    branches:\n      - main\n      - progress\n\njobs:\n"
  },
  {
    "path": ".github/workflows/progress.yml",
    "chars": 1189,
    "preview": "name: Upload objdiff report for Decomp.dev bot\n\non:\n  push:\n    branches:\n      - main\n      - progress\n\njobs:\n  report-"
  },
  {
    "path": ".gitignore",
    "chars": 817,
    "preview": "# Project-specific files\nSCUS_971.98\n*[Ss][Cc][Uu][Ss]*\n*971*98*\nSCUS_*.*\n*.elf\ndisc/*\nreference/*\n\n# Objdiff\nobjdiff.js"
  },
  {
    "path": "README.md",
    "chars": 14236,
    "preview": "# 🦝 Sly Cooper and the Thievius Raccoonus\n\n<!-- Build status shield -->\n[build-url]:https://github.com/TheOnlyZac/sly1/a"
  },
  {
    "path": "config/checksum.sha1",
    "chars": 58,
    "preview": "57dc305db57932ad3f1122966cdb695d2e62a47a  out/SCUS_971.98\n"
  },
  {
    "path": "config/readme.md",
    "chars": 2074,
    "preview": "# Splat Config Files\n\nThis directory contains config files for splat, the tool we use to split and disassemble the game "
  },
  {
    "path": "config/sly1.yaml",
    "chars": 14753,
    "preview": "# Splat config for Sly 1 NTSC-U (PS2)\nname: Sly Cooper and the Thievius Raccoonus (USA)\nsha1: 57dc305db57932ad3f1122966c"
  },
  {
    "path": "config/sly1_may19.yaml",
    "chars": 7083,
    "preview": "name: Sly Cooper May 19 2002 Prototype\nsha1: 3e5fdf0c479a0f548e90b05d7fc558cd8e94f5c1\n\noptions:\n  basename: sly1_may19\n "
  },
  {
    "path": "config/symbol_addrs.txt",
    "chars": 292011,
    "preview": "\n///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
  },
  {
    "path": "config/symbol_addrs_may19.txt",
    "chars": 188155,
    "preview": "ENTRYPOINT = 0x100008; // type:func\n_exit = 0x1000B8; // type:func\n_root = 0x1000C0; // type:func\nRefThunkBasicDERIVED_F"
  },
  {
    "path": "config/symbol_addrs_old.txt",
    "chars": 167990,
    "preview": "_start = 0x100008; // type:func\n_exit = 0x1000B8; // type:func\nRefThunkLoREMOVEFnUser = 0x100178; // type:func\nRefThunkL"
  },
  {
    "path": "configure.py",
    "chars": 14845,
    "preview": "\"\"\"\nConfigures the project for building. Invokes splat to split the binary and\ncreates build files for ninja.\n\"\"\"\n\n#! /u"
  },
  {
    "path": "docs/BEGINNERSGUIDE.md",
    "chars": 2639,
    "preview": "# Beginner's Guide\n\nIf you are new to using Git, follow these steps to get started. If you're already familiar with Git,"
  },
  {
    "path": "docs/CONTRIBUTING.md",
    "chars": 8502,
    "preview": "# Contributing Guide\n\n## So you want to decompile Sly 1...\n\nYou've come to the right place! We welcome new contributors "
  },
  {
    "path": "docs/DISTROBOX.md",
    "chars": 3049,
    "preview": "# Using Distrobox for Non-Debian Distributions\n\nIf you're using a non-Debian Linux distribution (such as Fedora, Arch, o"
  },
  {
    "path": "docs/STYLEGUIDE.md",
    "chars": 6669,
    "preview": "# Style Guide\n\n## Contents\n\n1. [General Rules](#general-rules)\n2. [Symbol Names](#symbol-names)\n3. [Documentation](#docu"
  },
  {
    "path": "include/989snd.h",
    "chars": 2826,
    "preview": "/**\n * @file 989snd.h\n *\n * @brief 989snd sound driver.\n */\n#ifndef SND989_H\n#define SND989_H\n\n#include \"sdk/libcdvd.h\"\n"
  },
  {
    "path": "include/ac.h",
    "chars": 5835,
    "preview": "/**\n * @file ac.h\n *\n * @todo Implement the structs.\n */\n#ifndef AC_H\n#define AC_H\n\n#include \"common.h\"\n#include <vec.h>"
  },
  {
    "path": "include/act.h",
    "chars": 3722,
    "preview": "/**\n * @file act.h\n */\n#ifndef ACT_H\n#define ACT_H\n\n#include \"common.h\"\n#include <vec.h>\n#include <mat.h>\n#include <dl.h"
  },
  {
    "path": "include/actseg.h",
    "chars": 865,
    "preview": "/**\n * @file actseg.h\n *\n * @brief Declarations for actor segments.\n*/\n#ifndef ACTSEG_H\n#define ACTSEG_H\n\n#include \"comm"
  },
  {
    "path": "include/alarm.h",
    "chars": 2716,
    "preview": "/**\n * @file alarm.h\n *\n * @brief Alarm system.\n */\n#ifndef ALARM_H\n#define ALARM_H\n\n#include \"common.h\"\n#include <break"
  },
  {
    "path": "include/alo.h",
    "chars": 14707,
    "preview": "/**\n * @file alo.h\n */\n#ifndef ALO_H\n#define ALO_H\n\n#include \"common.h\"\n#include <sound.h>\n#include <vec.h>\n#include <ma"
  },
  {
    "path": "include/aseg.h",
    "chars": 3338,
    "preview": "/**\n * @file aseg.h\n */\n#ifndef ASEG_H\n#define ASEG_H\n\n#include \"common.h\"\n#include <waypoint.h>\n#include <util.h>\n#incl"
  },
  {
    "path": "include/asega.h",
    "chars": 575,
    "preview": "/**\n * @file asega.h\n */\n#ifndef ASEGA_H\n#define ASEGA_H\n\n#include \"common.h\"\n#include <basic.h>\n#include <dl.h>\n\n// For"
  },
  {
    "path": "include/barrier.h",
    "chars": 794,
    "preview": "/**\n * @file barrier.h\n */\n#ifndef BARRIER_H\n#define BARRIER_H\n\n#include \"common.h\"\n#include <so.h>\n\n// Forward.\nstruct "
  },
  {
    "path": "include/bas.h",
    "chars": 1955,
    "preview": "/**\n * @file bas.h\n *\n * @brief Binary Async Stream.\n*/\n#ifndef BAS_H\n#define BAS_H\n\n#include \"common.h\"\n#include <util."
  },
  {
    "path": "include/basic.h",
    "chars": 991,
    "preview": "/**\n * @file basic.h\n *\n * @brief Basic object.\n */\n#ifndef BASIC_H\n#define BASIC_H\n\n#include \"common.h\"\n#include <splic"
  },
  {
    "path": "include/bbmark.h",
    "chars": 1026,
    "preview": "/**\n * @file bbmark.h\n */\n#ifndef BBMARK_H\n#define BBMARK_H\n\n#include \"common.h\"\n\ntypedef int GRFPVA;\n\n// Forward.\nstruc"
  },
  {
    "path": "include/bez.h",
    "chars": 878,
    "preview": "/**\n * @file bez.h\n *\n * @brief Bezier curves.\n *\n * @todo Add function parameters and documentation.\n */\n#ifndef BEZ_H\n"
  },
  {
    "path": "include/binoc.h",
    "chars": 4102,
    "preview": "/**\n * @file binoc.h\n *\n * @brief Binoc-u-com.\n */\n#ifndef BINOC_H\n#define BINOC_H\n\n#include \"common.h\"\n#include <screen"
  },
  {
    "path": "include/bis.h",
    "chars": 6345,
    "preview": "/**\n * @file bis.h\n *\n * @brief Binary Input Stream.\n */\n#ifndef BIS_H\n#define BIS_H\n\n#include \"common.h\"\n#include <prog"
  },
  {
    "path": "include/blend.h",
    "chars": 835,
    "preview": "/**\n * @file blend.h\n */\n#ifndef BLEND_H\n#define BLEND_H\n\n#include \"common.h\"\n#include <alo.h>\n#include <oid.h>\n\n// Forw"
  },
  {
    "path": "include/blip.h",
    "chars": 1732,
    "preview": "/**\n * @file blip.h\n */\n#ifndef BLIP_H\n#define BLIP_H\n\n#include \"common.h\"\n#include <flash.h>\n#include <mat.h>\n#include "
  },
  {
    "path": "include/bomb.h",
    "chars": 890,
    "preview": "/**\n * @file bomb.h\n */\n#ifndef BOMB_H\n#define BOMB_H\n\n#include \"common.h\"\n#include <difficulty.h>\n#include <sound.h>\n#i"
  },
  {
    "path": "include/bq.h",
    "chars": 1557,
    "preview": "/**\n * @file bq.h\n *\n * @brief Byte queue.\n*/\n#ifndef BQ_H\n#define BQ_H\n\n#include \"common.h\"\n\n/**\n * @brief TODO.\n */\ncl"
  },
  {
    "path": "include/break.h",
    "chars": 2824,
    "preview": "/**\n * @file break.h\n */\n#ifndef BREAK_H\n#define BREAK_H\n\n#include \"common.h\"\n#include <so.h>\n#include <bis.h>\n#include "
  },
  {
    "path": "include/brx.h",
    "chars": 1668,
    "preview": "/**\n * @file brx.h\n *\n * @brief Binary Resource Archive.\n */\n#ifndef BRX_H\n#define BRX_H\n\n#include \"common.h\"\n#include <"
  },
  {
    "path": "include/bsp.h",
    "chars": 1724,
    "preview": "/**\n * @file bsp.h\n *\n * @brief Binary Space Partitioning.\n *\n * @note At the time of writing all structs are based on\n "
  },
  {
    "path": "include/button.h",
    "chars": 4160,
    "preview": "/**\n * @file button.h\n *\n * @brief Button.\n */\n#ifndef BUTTON_H\n#define BUTTON_H\n\n#include \"common.h\"\n#include <oid.h>\n#"
  },
  {
    "path": "include/cat.h",
    "chars": 1209,
    "preview": "/**\n * @file cat.h\n *\n * @brief WAL catalog.\n */\n#ifndef CAT_H\n#define CAT_H\n\n#include \"common.h\"\n\n/**\n * @brief Related"
  },
  {
    "path": "include/cd.h",
    "chars": 1596,
    "preview": "/**\n * @file cd.h\n *\n * @brief CD system.\n */\n#ifndef CD_H\n#define CD_H\n\n#include \"common.h\"\n\n/**\n * @brief CD State.\n *"
  },
  {
    "path": "include/chkpnt.h",
    "chars": 1726,
    "preview": "/**\n * @file chkpnt.h\n *\n * @brief Checkpoint system.\n */\n#ifndef CHKPNT_H\n#define CHKPNT_H\n\n#include \"common.h\"\n#includ"
  },
  {
    "path": "include/cid.h",
    "chars": 6632,
    "preview": "/**\n * @file cid.h\n *\n * @brief Class IDs.\n */\n#ifndef CID_H\n#define CID_H\n\n#include \"common.h\"\n\n/**\n * @brief Class ID."
  },
  {
    "path": "include/clip.h",
    "chars": 1553,
    "preview": "/**\n * @file clip.h\n */\n#ifndef CLIP_H\n#define CLIP_H\n\n#include \"common.h\"\n#include <geom.h>\n#include <bsp.h>\n#include <"
  },
  {
    "path": "include/clock.h",
    "chars": 2196,
    "preview": "/**\n * @file clock.h\n *\n * @brief Engine clock.\n */\n#ifndef CLOCK_H\n#define CLOCK_H\n\n#include \"common.h\"\n\ntypedef unsign"
  },
  {
    "path": "include/cm.h",
    "chars": 9793,
    "preview": "/**\n * @file cm.h\n *\n * @brief Game camera.\n */\n#ifndef CM_H\n#define CM_H\n\n#include \"common.h\"\n#include <lo.h>\n#include "
  },
  {
    "path": "include/cnvo.h",
    "chars": 719,
    "preview": "/**\n * @file cnvo.h\n */\n#ifndef CNVO_H\n#define CNVO_H\n\n#include \"common.h\"\n#include <so.h>\n\n// TODO: What is this? Where"
  },
  {
    "path": "include/coin.h",
    "chars": 4607,
    "preview": "/**\n * @file coin.h\n *\n * @brief Coins, keys, and other collectibles.\n */\n#ifndef COIN_H\n#define COIN_H\n\n#include \"commo"
  },
  {
    "path": "include/common.h",
    "chars": 2441,
    "preview": "/**\n * @file common.h\n *\n * @brief Common header file.\n */\n#ifndef COMMON_H\n#define COMMON_H\n\n#include \"include_asm.h\"\n#"
  },
  {
    "path": "include/cplcy.h",
    "chars": 363,
    "preview": "/**\n * @file cplcy.h\n *\n * @brief Camera policy.\n *\n * @todo Either move the camera policy structs from cm.h here, or de"
  },
  {
    "path": "include/credit.h",
    "chars": 138,
    "preview": "/**\n * @file credit.h\n *\n * @brief Credit UI blot.\n */\n#ifndef CREDIT_H\n#define CREDIT_H\n\n#include \"common.h\"\n\n// ...\n\n#"
  },
  {
    "path": "include/crout.h",
    "chars": 105,
    "preview": "/**\n * @file crout.h\n */\n#ifndef CROUT_H\n#define CROUT_H\n\n#include \"common.h\"\n\n// ...\n\n#endif // CROUT_H\n"
  },
  {
    "path": "include/crusher.h",
    "chars": 1145,
    "preview": "/**\n * @file crusher.h\n */\n#ifndef CRUSHER_H\n#define CRUSHER_H\n\n#include \"common.h\"\n#include <stepguard.h>\n#include <vec"
  },
  {
    "path": "include/crv.h",
    "chars": 408,
    "preview": "/**\n * @file crv.h\n */\n#ifndef CRV_H\n#define CRV_H\n\n#include \"common.h\"\n#include <vec.h>\n\n/**\n * @brief (?) kind.\n */\nen"
  },
  {
    "path": "include/dart.h",
    "chars": 1650,
    "preview": "/**\n * @file dart.h\n *\n * @brief Dartgun projectiles.\n */\n#ifndef DART_H\n#define DART_H\n\n#include \"common.h\"\n#include <b"
  },
  {
    "path": "include/dartgun.h",
    "chars": 1336,
    "preview": "/**\n * @file dartgun.h\n */\n#ifndef DARTGUN_H\n#define DARTGUN_H\n\n#include \"common.h\"\n#include <break.h>\n#include <rat.h>\n"
  },
  {
    "path": "include/dialog.h",
    "chars": 2872,
    "preview": "/**\n * @file dialog.h\n *\n * @brief Declarations for the dialog system.\n */\n#ifndef DIALOG_H\n#define DIALOG_H\n\n#include \""
  },
  {
    "path": "include/difficulty.h",
    "chars": 4324,
    "preview": "/**\n * @file difficulty.h\n *\n * @brief Dynamic difficulty system.\n */\n#ifndef DIFFICULTY_H\n#define DIFFICULTY_H\n\n#includ"
  },
  {
    "path": "include/dl.h",
    "chars": 3702,
    "preview": "/**\n * @file dl.h\n *\n * @brief Doubly-linked list.\n */\n#ifndef DL_H\n#define DL_H\n\n#include \"common.h\"\n#include <oid.h>\n\n"
  },
  {
    "path": "include/dmas.h",
    "chars": 1449,
    "preview": "/**\n * @file dmas.h\n *\n * @brief Direct memory access.\n */\n#ifndef DMAS_H\n#define DMAS_H\n\n#include \"common.h\"\n#include <"
  },
  {
    "path": "include/dysh.h",
    "chars": 521,
    "preview": "/**\n * @file dysh.h\n *\n * @brief Dynamic shadow(?)\n */\n#ifndef DYSH_H\n#define DYSH_H\n\n#include \"common.h\"\n#include <shad"
  },
  {
    "path": "include/dzg.h",
    "chars": 1100,
    "preview": "/**\n * @file dzg.h\n */\n#ifndef DZG_H\n#define DZG_H\n\n#include \"common.h\"\n#include <so.h>\n#include <dl.h>\n\n// Forward.\nstr"
  },
  {
    "path": "include/emitter.h",
    "chars": 6496,
    "preview": "/**\n * @file emitter.h\n *\n * @brief Particle emitter.\n */\n#ifndef EMITTER_H\n#define EMITTER_H\n\n#include \"common.h\"\n#incl"
  },
  {
    "path": "include/ensure.h",
    "chars": 288,
    "preview": "/**\n * @file ensure.h\n *\n * @brief Dynamic difficulty system.\n *\n * @todo Possibly merge this into another header, if ap"
  },
  {
    "path": "include/eyes.h",
    "chars": 607,
    "preview": "/**\n * @file eyes.h\n */\n#ifndef EYES_H\n#define EYES_H\n\n#include \"common.h\"\n#include <shd.h>\n\n/**\n * @brief Eyes state.\n "
  },
  {
    "path": "include/fader.h",
    "chars": 401,
    "preview": "/**\n * @file fader.h\n */\n#ifndef FADER_H\n#define FADER_H\n\n#include \"common.h\"\n#include <alo.h>\n\n/**\n * @todo Implement t"
  },
  {
    "path": "include/find.h",
    "chars": 2252,
    "preview": "/**\n * @file find.h\n *\n * @brief Find objects in the SW.\n */\n#ifndef FIND_H\n#define FIND_H\n\n#include \"common.h\"\n#include"
  },
  {
    "path": "include/flash.h",
    "chars": 1555,
    "preview": "/**\n * @file flash.h\n *\n * @brief Flash (might be flash animation, or literal screen flashes).\n */\n#ifndef FLASH_H\n#defi"
  },
  {
    "path": "include/fly.h",
    "chars": 1767,
    "preview": "/**\n * @file fly.h\n *\n * @brief Flying animals.\n */\n#ifndef FLY_H\n#define FLY_H\n\n#include \"common.h\"\n#include <target.h>"
  },
  {
    "path": "include/font.h",
    "chars": 1025,
    "preview": "/**\n * @file font.h\n *\n * @brief Font system.\n */\n#ifndef FONT_H\n#define FONT_H\n\n#include \"common.h\"\n\n/**\n * @brief Scal"
  },
  {
    "path": "include/freeze.h",
    "chars": 943,
    "preview": "/**\n * @file freeze.h\n */\n#ifndef FREEZE_H\n#define FREEZE_H\n\n#include \"common.h\"\n#include <alo.h>\n#include <so.h>\n#inclu"
  },
  {
    "path": "include/frm.h",
    "chars": 1090,
    "preview": "/**\n * @file frm.h\n *\n * @brief Frame manager.\n */\n#ifndef FRM_H\n#define FRM_H\n\n#include \"common.h\"\n#include <shd.h>\n\n//"
  },
  {
    "path": "include/frzg.h",
    "chars": 362,
    "preview": "/**\n * @file frzg.h\n */\n#ifndef FRZG_H\n#define FRZG_H\n\n#include \"common.h\"\n#include <freeze.h>\n#include <oid.h>\n#include"
  },
  {
    "path": "include/game.h",
    "chars": 10398,
    "preview": "/**\n * @file game.h\n *\n * @brief Game state and level management.\n *\n * @todo Cleanup/update structs and function names/"
  },
  {
    "path": "include/gcc/math.h",
    "chars": 246,
    "preview": "/**\n * @file math.h\n *\n * @brief Library math functions.\n */\n#ifndef MATH_H\n#define MATH_H\n\nextern \"C\"\n{\n    float tanf("
  },
  {
    "path": "include/geom.h",
    "chars": 1179,
    "preview": "/**\n * @file geom.h\n *\n * @brief Geometry.\n */\n#ifndef GEOM_H\n#define GEOM_H\n\n#include <vec.h>\n#include <mat.h>\n\n/**\n * "
  },
  {
    "path": "include/gifs.h",
    "chars": 980,
    "preview": "/**\n * @file gifs.h\n */\n#ifndef GIFS_H\n#define GIFS_H\n\n#include <dmas.h>\n\n/**\n * @brief Unknown. Constructs primitives f"
  },
  {
    "path": "include/glbs.h",
    "chars": 1555,
    "preview": "/**\n * @file glbs.h\n */\n#ifndef GLBS_H\n#define GLBS_H\n\n#include \"common.h\"\n#include <cm.h>\n#include <mat.h>\n#include <ve"
  },
  {
    "path": "include/glob.h",
    "chars": 2061,
    "preview": "/**\n * @file glob.h\n */\n#ifndef GLOB_H\n#define GLOB_H\n\n#include <bis.h>\n#include <alo.h>\n#include <vec.h>\n\ntypedef int G"
  },
  {
    "path": "include/gomer.h",
    "chars": 414,
    "preview": "/**\n * @file gomer.h\n */\n#ifndef GOMER_H\n#define GOMER_H\n\n#include \"common.h\"\n#include <stepguard.h>\n\n/**\n * @brief Gome"
  },
  {
    "path": "include/gs.h",
    "chars": 1060,
    "preview": "/**\n * @file gs.h\n *\n * @brief Graphics synthesizer.\n *\n * @note Note to be confused with GS (game state), declared in g"
  },
  {
    "path": "include/hide.h",
    "chars": 122,
    "preview": "/**\n * @file hide.h\n */\n#ifndef HIDE_H\n#define HIDE_H\n\n#include \"common.h\"\n\n// ...\n\nvoid StartupHide();\n\n#endif // HIDE_"
  },
  {
    "path": "include/hnd.h",
    "chars": 330,
    "preview": "/**\n * @file hnd.h\n */\n#ifndef HND_H\n#define HND_H\n\n#include \"common.h\"\n#include <target.h>\n#include <bis.h>\n\n/**\n * @cl"
  },
  {
    "path": "include/ik.h",
    "chars": 587,
    "preview": "/**\n * @file ik.h\n */\n#ifndef IK_H\n#define IK_H\n\n#include \"common.h\"\n#include <alo.h>\n#include <so.h>\n#include <cm.h>\n\n/"
  },
  {
    "path": "include/include_asm.h",
    "chars": 881,
    "preview": "#ifndef INCLUDE_ASM_H\n#define INCLUDE_ASM_H\n\n#if !defined(M2CTX) && !defined(PERMUTER) && !defined(SKIP_ASM)\n\n#ifndef IN"
  },
  {
    "path": "include/intrinsics.h",
    "chars": 1906,
    "preview": "/**\n * @file intrinsics.h\n *\n * @brief Hardware intrinsics and inline assembly macros for MIPS/PS2 EE.\n */\n#ifndef INTRI"
  },
  {
    "path": "include/jlo.h",
    "chars": 1506,
    "preview": "/**\n * @file jlo.h\n */\n#ifndef JLO_H\n#define JLO_H\n\n#include \"common.h\"\n#include <button.h>\n#include <xform.h>\n#include "
  },
  {
    "path": "include/joy.h",
    "chars": 4412,
    "preview": "/**\n * @file joy.h\n *\n * @brief Joypad manager.\n */\n#ifndef JOY_H\n#define JOY_H\n\n#include \"common.h\"\n#include <rumble.h>"
  },
  {
    "path": "include/jsg.h",
    "chars": 6432,
    "preview": "/**\n * @brief jsg.h\n */\n#ifndef JSG_H\n#define JSG_H\n\n#include \"common.h\"\n#include <asega.h>\n#include <oid.h>\n#include <v"
  },
  {
    "path": "include/jt.h",
    "chars": 3160,
    "preview": "/**\n * @file jt.h\n *\n * @brief Sly entity.\n */\n#ifndef JT_H\n#define JT_H\n\n#include \"common.h\"\n#include <step.h>\n\n/**\n * "
  },
  {
    "path": "include/jump.h",
    "chars": 1428,
    "preview": "/**\n * @file jump.h\n */\n#ifndef JUMP_H\n#define JUMP_H\n\n#include \"common.h\"\n#include <mark.h>\n#include <vec.h>\n#include <"
  },
  {
    "path": "include/keyhole.h",
    "chars": 540,
    "preview": "/**\n * @file keyhole.h\n */\n#ifndef KEYHOLE_H\n#define KEYHOLE_H\n\n#include \"common.h\"\n#include <bis.h>\n#include <lo.h>\n\n/*"
  },
  {
    "path": "include/labels.inc",
    "chars": 1202,
    "preview": "# This file is used by the original compiler/assembler.\n# Defines the expected assembly macros.\n\n# A function symbol.\n.m"
  },
  {
    "path": "include/landing.h",
    "chars": 395,
    "preview": "/**\n * @file landing.h\n */\n#ifndef LANDING_H\n#define LANDING_H\n\n#include \"common.h\"\n#include <shape.h>\n#include <dl.h>\n\n"
  },
  {
    "path": "include/lgn.h",
    "chars": 1812,
    "preview": "/**\n * @file lgn.h\n */\n#ifndef LGN_H\n#define LGN_H\n\n#include \"common.h\"\n#include <screen.h>\n#include <shape.h>\n#include "
  },
  {
    "path": "include/lib/libkernl/filestub.h",
    "chars": 290,
    "preview": "/**\n * @file include/lib/libkernl/filestub.h\n * @note src/lib/libkernl/filestub.c\n */\n#ifndef FILESTUB_H\n#define FILESTU"
  },
  {
    "path": "include/light.h",
    "chars": 3659,
    "preview": "/**\n * @file light.h\n *\n * @brief Light and shadow system.\n */\n#ifndef LIGHT_H\n#define LIGHT_H\n\n#include \"common.h\"\n#inc"
  },
  {
    "path": "include/lo.h",
    "chars": 4578,
    "preview": "/**\n * @file lo.h\n *\n * @brief Level objects.\n */\n#ifndef LO_H\n#define LO_H\n\n#include \"common.h\"\n#include <dl.h>\n#includ"
  },
  {
    "path": "include/lookat.h",
    "chars": 742,
    "preview": "/**\n * @file lookat.h\n */\n#ifndef LOOKAT_H\n#define LOOKAT_H\n\n#include \"common.h\"\n#include <util.h>\n#include <vec.h>\n#inc"
  },
  {
    "path": "include/macro.inc",
    "chars": 1380,
    "preview": "# This file is used by modern gas.\n# Defines the expected assembly macros\n\n# Evaluate this file only once in case it's i"
  },
  {
    "path": "include/mark.h",
    "chars": 2789,
    "preview": "/**\n * @file mark.h\n */\n#ifndef MARK_H\n#define MARK_H\n\n#include \"common.h\"\n#include <geom.h>\n#include <bsp.h>\n#include <"
  },
  {
    "path": "include/mat.h",
    "chars": 2945,
    "preview": "/**\n * @file mat.h\n *\n * @brief 3x3 and 4x4 matrix types.\n*/\n#ifndef MAT_H\n#define MAT_H\n\n#include <vec.h>\n\n/**\n * @brie"
  },
  {
    "path": "include/mb.h",
    "chars": 229,
    "preview": "/**\n * @file mb.h\n *\n * @brief Mesa boss.\n */\n#ifndef MB_H\n#define MB_H\n\n#include <stepguard.h>\n\n/**\n * @class MS_BOSS_G"
  },
  {
    "path": "include/memcard.h",
    "chars": 583,
    "preview": "/**\n * @file memcard.h\n */\n#ifndef MEMCARD_H\n#define MEMCARD_H\n\n#include \"common.h\"\n\n/**\n * @todo Incomplete.\n */\nstruct"
  },
  {
    "path": "include/memory.h",
    "chars": 2512,
    "preview": "/**\n * @file memory.h\n */\n#ifndef MEMORY_H\n#define MEMORY_H\n\n#include \"common.h\"\n\ntypedef struct _reent;\n\n/**\n * @brief "
  },
  {
    "path": "include/missile.h",
    "chars": 1721,
    "preview": "/**\n * @file missile.h\n */\n#ifndef MISSILE_H\n#define MISSILE_H\n\n#include \"common.h\"\n#include <bomb.h>\n#include <bis.h>\n#"
  },
  {
    "path": "include/mpeg.h",
    "chars": 397,
    "preview": "/**\n * @file mpeg.h\n *\n * @brief Mpeg video.\n */\n#ifndef MPEG_H\n#define MPEG_H\n\n#include \"common.h\"\n#include <oid.h>\n#in"
  },
  {
    "path": "include/mq.h",
    "chars": 1286,
    "preview": "/**\n * @file mq.h\n *\n * @brief Message queue.\n */\n#ifndef MQ_H\n#define MQ_H\n\n#include \"common.h\"\n\ntypedef int GRFCMQ; //"
  },
  {
    "path": "include/mrkv.h",
    "chars": 237,
    "preview": "/**\n * @file mrkv.h\n */\n#ifndef MRKV_H\n#define MRKV_H\n\n#include \"common.h\"\n#include <so.h>\n\n/**\n * @brief Unknown.\n * @t"
  },
  {
    "path": "include/ms.h",
    "chars": 241,
    "preview": "/**\n * @file Unknown.\n */\n\n#include \"common.h\"\n#include <cm.h>\n\nstruct RO; // todo define this struct somewhere\n\n/**\n * "
  },
  {
    "path": "include/murray.h",
    "chars": 1119,
    "preview": "/**\n * @file murray.h\n *\n * @brief \"The Murray\".\n */\n#ifndef MURRAY_H\n#define MURRAY_H\n\n#include \"common.h\"\n#include <st"
  },
  {
    "path": "include/oid.h",
    "chars": 589,
    "preview": "/**\n * @file oid.h\n *\n * @brief Object IDs.\n */\n#ifndef OID_H\n#define OID_H\n\n#include \"common.h\"\n\n/**\n * @brief Object I"
  },
  {
    "path": "include/path.h",
    "chars": 101,
    "preview": "/**\n * @file path.h\n */\n#ifndef PATH_H\n#define PATH_H\n\n#include \"common.h\"\n\n// ...\n\n#endif // PATH_H\n"
  },
  {
    "path": "include/phasemem.h",
    "chars": 520,
    "preview": "/**\n * @file phasemem.h\n */\n#ifndef PHASEMEM_H\n#define PHASEMEM_H\n\n#include \"common.h\"\n\n/**\n * @brief Engine phase.\n */\n"
  },
  {
    "path": "include/pipe.h",
    "chars": 640,
    "preview": "/**\n * @file pipe.h\n */\n#ifndef PIPE_H\n#define PIPE_H\n\n#include \"common.h\"\n#include <lo.h>\n\n/**\n * @class PIPE\n * @brief"
  },
  {
    "path": "include/pnt.h",
    "chars": 1021,
    "preview": "/**\n * @file pnt.h\n *\n * @brief Points.\n */\n#ifndef PNT_H\n#define PNT_H\n\n#include \"common.h\"\n#include <proxy.h>\n#include"
  },
  {
    "path": "include/po.h",
    "chars": 2470,
    "preview": "/**\n * @file po.h\n *\n * @brief Player object.\n */\n#ifndef PO_H\n#define PO_H\n\n#include \"common.h\"\n#include <dialog.h>\n#in"
  },
  {
    "path": "include/prog.h",
    "chars": 1270,
    "preview": "/**\n * @file prog.h\n *\n * @brief Progress bar.\n */\n#ifndef PROG_H\n#define PROG_H\n\n#include \"common.h\"\n#include <binoc.h>"
  },
  {
    "path": "include/proxy.h",
    "chars": 502,
    "preview": "/**\n * @file proxy.h\n */\n#ifndef PROXY_H\n#define PROXY_H\n\n#include \"common.h\"\n#include <alo.h>\n#include <bis.h>\n#include"
  },
  {
    "path": "include/puffer.h",
    "chars": 1984,
    "preview": "/**\n * @file puffer.h\n *\n * @brief Piranha Lake in Vicious Voodoo (believed to be formerly called \"Pufferfish Pond\").\n *"
  },
  {
    "path": "include/pzo.h",
    "chars": 4266,
    "preview": "/**\n * @file pzo.h\n *\n * @brief Vaults, clue bottles, keys and locks.\n */\n#ifndef PZO_H\n#define PZO_H\n\n#include \"common."
  },
  {
    "path": "include/rail.h",
    "chars": 671,
    "preview": "/**\n * @file rail.h\n */\n#ifndef RAIL_H\n#define RAIL_H\n\n#include \"common.h\"\n#include <shape.h>\n#include <dl.h>\n\n/**\n * @c"
  },
  {
    "path": "include/rat.h",
    "chars": 1562,
    "preview": "/**\n * @file rat.h\n *\n * @brief Rats.\n */\n#ifndef RAT_H\n#define RAT_H\n\n#include \"common.h\"\n#include <flash.h>\n#include <"
  },
  {
    "path": "include/rchm.h",
    "chars": 1671,
    "preview": "/**\n * @file rchm.h\n */\n#ifndef RCHM_H\n#define RCHM_H\n\n#include \"common.h\"\n#include <target.h>\n#include <pipe.h>\n#includ"
  },
  {
    "path": "include/render.h",
    "chars": 2527,
    "preview": "/**\n * @file render.h\n *\n * @brief Rendering system.\n */\n#ifndef RENDER_H\n#define RENDER_H\n\n#include \"common.h\"\n#include"
  },
  {
    "path": "include/rip.h",
    "chars": 9797,
    "preview": "/**\n * @file rip.h\n *\n * @brief Particle system (?)\n */\n#ifndef RIP_H\n#define RIP_H\n\n#include \"common.h\"\n#include <blip."
  },
  {
    "path": "include/rog.h",
    "chars": 6115,
    "preview": "/**\n * @file rog.h\n *\n * @note At the time of writing, all the enum values were taken\n * straight from the prototype, so"
  },
  {
    "path": "include/rs.h",
    "chars": 325,
    "preview": "/**\n * @file rs.h\n *\n * @note No functions are declared here.\n */\n#ifndef RS_H\n#define RS_H\n\n#include \"common.h\"\n#includ"
  },
  {
    "path": "include/rumble.h",
    "chars": 1483,
    "preview": "/**\n * @file rumble.h\n *\n * @brief Joypad rumble.\n */\n#ifndef RUMBLE_H\n#define RUMBLE_H\n\n#include \"common.h\"\n\nstruct JOY"
  },
  {
    "path": "include/rwm.h",
    "chars": 1467,
    "preview": "/**\n * @file rwm.h\n */\n#ifndef RWM_H\n#define RWM_H\n\n#include \"common.h\"\n#include <vec.h>\n#include <oid.h>\n#include <so.h"
  },
  {
    "path": "include/sb.h",
    "chars": 508,
    "preview": "/**\n * @file sb.h\n *\n * @brief Snow boss.\n */\n#ifndef SB_H\n#define SB_H\n\n#include <stepguard.h>\n\n/**\n * @class S_BOSS_GU"
  },
  {
    "path": "include/sce/libdma.h",
    "chars": 2251,
    "preview": "/**\n * @file libdma.h\n *\n * @brief Direct memory access library.\n */\n#ifndef LIBDMA_H\n#define LIBDMA_H\n\ntypedef unsigned"
  },
  {
    "path": "include/sce/memset.h",
    "chars": 189,
    "preview": "/**\n * @file memset.h\n *\n * @brief Memset.\n */\n#ifndef MEMSET_H\n#define MEMSET_H\n#include <stddef.h>\n\nextern \"C\"\n{\n    v"
  },
  {
    "path": "include/sce/rand.h",
    "chars": 1165,
    "preview": "/**\n * @file rand.h\n * @note /sce/ee/gcc/src/newlib/libc/stdlib/rand.c\n *\n * @brief Random number generation.\n */\n#ifnde"
  },
  {
    "path": "include/screen.h",
    "chars": 6518,
    "preview": "/**\n * @file screen.h\n *\n * @brief GUI elements.\n */\n#ifndef SCREEN_H\n#define SCREEN_H\n\n#include \"common.h\"\n#include <fo"
  },
  {
    "path": "include/sdk/ee/eekernel.h",
    "chars": 3961,
    "preview": "/**\n * @file kernel.h\n *\n * @brief Control for semaphores and threads.\n */\n#ifndef KERNEL_H\n#define KERNEL_H\n\n// FlushCa"
  },
  {
    "path": "include/sdk/ee/eestruct.h",
    "chars": 485,
    "preview": "/**\n * @file include/sdk/ee/eestruct.h\n *\n * @brief Graphics synthesizer.\n */\n#ifndef SCE_EESTRUCT_H\n#define SCE_EESTRUC"
  },
  {
    "path": "include/sdk/ee/libpad.h",
    "chars": 783,
    "preview": "/**\n * @file include/sdk/ee/libpad.h\n *\n * @brief Joypad (controller) library.\n */\n#ifndef PAD_H\n#define PAD_H\n\ntypedef "
  },
  {
    "path": "include/sdk/ee/sifdev.h",
    "chars": 233,
    "preview": "#ifndef SIFDEV_H\n#define SIFDEV_H\n\nextern \"C\"\n{\nint sceSifLoadFileReset();\nint sceSifLoadModule(const char *filename, in"
  },
  {
    "path": "include/sdk/ee/sifrpc.h",
    "chars": 1887,
    "preview": "#ifndef SIFRPC_H_\n#define SIFRPC_H_\n\nextern \"C\" {\n\ntypedef void (*sceSifEndFunc)(void*);\ntypedef void* (*sceSifRpcFunc)("
  },
  {
    "path": "include/sdk/libcdvd.h",
    "chars": 1026,
    "preview": "/**\n * @file include/sdk/libcdvd.h\n *\n * @brief DVD handler.\n */\n#ifndef EEDVD_H\n#define EEDVD_H\n\ntypedef unsigned char "
  },
  {
    "path": "include/sensor.h",
    "chars": 6139,
    "preview": "#ifndef SENSOR_H\n#define SENSOR_H\n\n#include \"common.h\"\n#include <alarm.h>\n#include <oid.h>\n#include <so.h>\n#include <cm."
  },
  {
    "path": "include/shadow.h",
    "chars": 1765,
    "preview": "/**\n * @file shadow.h\n */\n#ifndef SHADOW_H\n#define SHADOW_H\n\n#include \"common.h\"\n#include <glob.h>\n#include <oid.h>\n#inc"
  },
  {
    "path": "include/shape.h",
    "chars": 388,
    "preview": "/**\n * @file shape.h\n */\n#ifndef SHAPE_H\n#define SHAPE_H\n\n#include \"common.h\"\n#include <crv.h>\n#include <bis.h>\n#include"
  },
  {
    "path": "include/shd.h",
    "chars": 3723,
    "preview": "/**\n * @file shd.h\n *\n * @brief Shaders.\n */\n#ifndef SHD_H\n#define SHD_H\n\n#include \"common.h\"\n#include <sdk/ee/eestruct."
  },
  {
    "path": "include/shdanim.h",
    "chars": 2578,
    "preview": "/**\n * @file shdanim.h\n *\n * @brief Shader animations.\n */\n#ifndef SHDANIM_H\n#define SHDANIM_H\n\n#include \"common.h\"\n#inc"
  },
  {
    "path": "include/sky.h",
    "chars": 526,
    "preview": "/**\n * @file sky.h\n *\n * @brief Skyboxes.\n */\n#ifndef SKY_H\n#define SKY_H\n\n#include \"common.h\"\n\n/**\n * @class SKY\n * @br"
  },
  {
    "path": "include/slotheap.h",
    "chars": 2086,
    "preview": "/**\n * @file slotheap.h\n *\n * @brief Fixed-size memory pool allocator using a linked list of free slots.\n */\n#ifndef SLO"
  },
  {
    "path": "include/sm.h",
    "chars": 2532,
    "preview": "/**\n * @file sm.h\n *\n * @brief Probabilistic finite state machines.\n */\n#ifndef SM_H\n#define SM_H\n\n#include \"common.h\"\n#"
  },
  {
    "path": "include/smartguard.h",
    "chars": 1381,
    "preview": "#ifndef SMARTGUARD_H\n#define SMARTGUARD_H\n\n#include \"common.h\"\n#include <stepguard.h>\n#include <actseg.h>\n#include <cid."
  },
  {
    "path": "include/so.h",
    "chars": 5840,
    "preview": "/**\n * @file so.h\n *\n * @brief Scene objects.\n*/\n#ifndef SO_H\n#define SO_H\n\n#include \"common.h\"\n#include <geom.h>\n#inclu"
  },
  {
    "path": "include/solve.h",
    "chars": 1508,
    "preview": "/**\n * @file solve.h\n */\n#ifndef SOLVE_H\n#define SOLVE_H\n\n#include <so.h>\n#include <dl.h>\n#include <vec.h>\n\ntypedef int "
  },
  {
    "path": "include/sort.h",
    "chars": 861,
    "preview": "/**\n * @file sort.h\n */\n#ifndef SORT_H\n#define SORT_H\n\n#include \"common.h\"\n\n/**\n * @brief Comparison function pointer fo"
  },
  {
    "path": "include/sound.h",
    "chars": 7907,
    "preview": "/**\n * @file sound.h\n *\n * @brief Sound playback.\n */\n#ifndef SOUND_H\n#define SOUND_H\n\n#include \"common.h\"\n#include <uti"
  },
  {
    "path": "include/spaprops.h",
    "chars": 130,
    "preview": "/**\n * @file spaprops.h\n */\n#ifndef SPAPROPS_H\n#define SPAPROPS_H\n\n#include \"common.h\"\n\nvoid BuildEopids();\n\n#endif // S"
  },
  {
    "path": "include/speaker.h",
    "chars": 296,
    "preview": "/**\n * @file speaker.h\n *\n * @brief Sound speaker management.\n */\n#ifndef SPEAKER_H\n#define SPEAKER_H\n\n#include \"common."
  },
  {
    "path": "include/spire.h",
    "chars": 236,
    "preview": "/**\n * @file spire.h\n */\n#ifndef SPIRE_H\n#define SPIRE_H\n\n#include \"common.h\"\n#include <xform.h>\n\n/**\n * @class SPIRE\n *"
  },
  {
    "path": "include/splice/bif.h",
    "chars": 8697,
    "preview": "/**\n * @file splice/bif.h\n */\n#ifndef SPLICE_BIF_H\n#define SPLICE_BIF_H\n\n#include \"common.h\"\n\n// Forward declaration.\ncl"
  },
  {
    "path": "include/splice/eval.h",
    "chars": 129,
    "preview": "/**\n * @file splice/eval.h\n */\n#ifndef SPLICE_EVAL_H\n#define SPLICE_EVAL_H\n\n#include \"common.h\"\n\n// ...\n\n#endif // SPLIC"
  },
  {
    "path": "include/splice/frame.h",
    "chars": 755,
    "preview": "/**\n * @file splice/frame.h\n */\n#ifndef SPLICE_FRAME_H\n#define SPLICE_FRAME_H\n\n#include \"common.h\"\n\n// Forward.\nclass CR"
  },
  {
    "path": "include/splice/gc.h",
    "chars": 928,
    "preview": "/**\n * @file splice/gc.h\n */\n#ifndef SPLICE_GC_H\n#define SPLICE_GC_H\n\n#include \"common.h\"\n\nclass CFrame;\nclass CPair;\ncl"
  },
  {
    "path": "include/splice/method.h",
    "chars": 294,
    "preview": "/**\n * @file splice/method.h\n */\n#ifndef SPLICE_METHOD_H\n#define SPLICE_METHOD_H\n\n#include \"common.h\"\n\nstruct BASIC;\n\n/*"
  },
  {
    "path": "include/splice/pair.h",
    "chars": 372,
    "preview": "/**\n * @file splice/pair.h\n */\n#ifndef SPLICE_PAIR_H\n#define SPLICE_PAIR_H\n\n#include \"common.h\"\n#include \"splice/ref.h\"\n"
  },
  {
    "path": "include/splice/proc.h",
    "chars": 422,
    "preview": "/**\n * @file splice/proc.h\n */\n#ifndef SPLICE_PROC_H\n#define SPLICE_PROC_H\n\n#include \"common.h\"\n\nclass CFrame;\nclass CPa"
  },
  {
    "path": "include/splice/ref.h",
    "chars": 2108,
    "preview": "/**\n * @file splice/ref.h\n */\n#ifndef SPLICE_REF_H\n#define SPLICE_REF_H\n\n#include \"common.h\"\n#include <splice/proc.h>\n#i"
  },
  {
    "path": "include/splice/serialize.h",
    "chars": 149,
    "preview": "/**\n * @file splice/serialize.h\n */\n#ifndef SPLICE_SERIALIZE_H\n#define SPLICE_SERIALIZE_H\n\n#include \"common.h\"\n\n// ...\n\n"
  },
  {
    "path": "include/splice/sidebag.h",
    "chars": 713,
    "preview": "/**\n * @file splice/sidebag.h\n *\n * @brief Sidebag for splice.\n */\n#ifndef SPLICE_SIDEBAG_H\n#define SPLICE_SIDEBAG_H\n\n#i"
  },
  {
    "path": "include/splice/spliceutils.h",
    "chars": 400,
    "preview": "/**\n * @file splice/spliceutils.h\n *\n * @brief Utility functions for the splice scripting engine.\n */\n#ifndef SPLICE_SPL"
  },
  {
    "path": "include/splice/splotheap.h",
    "chars": 960,
    "preview": "/**\n * @file splice/splotheap.h\n */\n#ifndef SPLICE_SPLOTHEAP_H\n#define SPLICE_SPLOTHEAP_H\n\n#include \"common.h\"\n\ntypedef "
  },
  {
    "path": "include/splice/vecmat.h",
    "chars": 626,
    "preview": "/**\n * @file splice/vecmat.h\n */\n#ifndef SPLICE_VECMAT_H\n#define SPLICE_VECMAT_H\n\n#include \"common.h\"\n#include <vec.h>\n#"
  },
  {
    "path": "include/splicemap.h",
    "chars": 351,
    "preview": "/**\n * @file splicemap.h\n *\n * @brief Splice maps.\n */\n#ifndef SPLICEMAP_H\n#define SPLICEMAP_H\n\n#include \"common.h\"\n#inc"
  },
  {
    "path": "include/spliceobj.h",
    "chars": 1020,
    "preview": "/**\n * @file spliceobj.h\n *\n * @brief Splice objects.\n */\n#ifndef SPLICEOBJ_H\n#define SPLICEOBJ_H\n\n#include \"common.h\"\n#"
  },
  {
    "path": "include/sprbuf.h",
    "chars": 155,
    "preview": "/**\n * @file sprbuf.h\n */\n#ifndef SPRBUF_H\n#define SPRBUF_H\n\n#include \"common.h\"\n\nvoid LoadSprBuf(int cb);\n\nvoid SaveSpr"
  },
  {
    "path": "include/sqtr.h",
    "chars": 407,
    "preview": "/**\n * @file sqtr.h\n */\n#ifndef SQTR_H\n#define SQTR_H\n\n#include \"common.h\"\n#include <render.h>\n#include <vec.h>\n#include"
  },
  {
    "path": "include/step.h",
    "chars": 3035,
    "preview": "/**\n * @file step.h\n */\n#ifndef STEP_H\n#define STEP_H\n\n#include \"common.h\"\n#include <po.h>\n#include <so.h>\n#include <sm."
  },
  {
    "path": "include/stepact.h",
    "chars": 400,
    "preview": "/**\n * @file stepact.h\n */\n#ifndef STEPACT_H\n#define STEPACT_H\n\n#include \"common.h\"\n#include <act.h>\n\n/**\n * @brief Unkn"
  },
  {
    "path": "include/stepcane.h",
    "chars": 689,
    "preview": "/**\n * @file stepcane.h\n */\n#ifndef STEPCANE_H\n#define STEPCANE_H\n\n#include \"common.h\"\n#include <target.h>\n#include <bre"
  },
  {
    "path": "include/stepguard.h",
    "chars": 6424,
    "preview": "/**\n * @file stepguard.h\n */\n#ifndef STEPGUARD_H\n#define STEPGUARD_H\n\n#include \"common.h\"\n#include <alarm.h>\n#include <s"
  },
  {
    "path": "include/stephang.h",
    "chars": 827,
    "preview": "/**\n * @file stephang.h\n */\n#ifndef STEPHANG_H\n#define STEPHANG_H\n\n#include \"common.h\"\n#include <joy.h>\n#include <jt.h>\n"
  },
  {
    "path": "include/stephide.h",
    "chars": 1093,
    "preview": "/**\n * @file stephide.h\n */\n#ifndef STEPHIDE_H\n#define STEPHIDE_H\n\n#include \"common.h\"\n#include <jt.h>\n\n// Forward.\nstru"
  },
  {
    "path": "include/steppipe.h",
    "chars": 464,
    "preview": "/**\n * @file steppipe.h\n */\n#ifndef STEPPIPE_H\n#define STEPPIPE_H\n\n#include \"common.h\"\n#include <pipe.h>\n#include <joy.h"
  },
  {
    "path": "include/steppower.h",
    "chars": 1542,
    "preview": "/**\n * @file steppower.h\n */\n#ifndef STEPPOWER_H\n#define STEPPOWER_H\n\n#include \"common.h\"\n#include <jt.h>\n#include <joy."
  },
  {
    "path": "include/steprail.h",
    "chars": 394,
    "preview": "/**\n * @file steprail.h\n *\n * @brief Rail behavior for STEP objects.\n */\n#ifndef STEPRAIL_H\n#define STEPRAIL_H\n\n#include"
  },
  {
    "path": "include/steprun.h",
    "chars": 874,
    "preview": "/**\n * @file steprun.h\n */\n#ifndef STEPRUN_H\n#define STEPRUN_H\n\n#include \"common.h\"\n#include <stepcane.h>\n\n// Forward.\ns"
  },
  {
    "path": "include/stepside.h",
    "chars": 485,
    "preview": "/**\n * @file stepside.h\n */\n#ifndef STEPSIDE_H\n#define STEPSIDE_H\n\n#include \"common.h\"\n#include <stepcane.h>\n\n// Forward"
  },
  {
    "path": "include/stepzap.h",
    "chars": 113,
    "preview": "/**\n * @file stepzap.h\n */\n#ifndef STEPZAP_H\n#define STEPZAP_H\n\n#include \"common.h\"\n\n// ...\n\n#endif // STEPZAP_H\n"
  },
  {
    "path": "include/stream.h",
    "chars": 766,
    "preview": "/**\n * @file stream.h\n *\n * @brief Output stream.\n */\n#ifndef STREAM_H\n#define STREAM_H\n\n#include \"common.h\"\n\n/**\n * @br"
  },
  {
    "path": "include/suv.h",
    "chars": 388,
    "preview": "/**\n * @file suv.h\n *\n * @brief Smash-up vehicle (the van and other racecars).\n */\n#ifndef SUV_H\n#define SUV_H\n\n#include"
  },
  {
    "path": "include/sw.h",
    "chars": 5448,
    "preview": "/**\n * @file sw.h\n *\n * @brief Scene world?\n */\n#ifndef SW_H\n#define SW_H\n\n#include \"common.h\"\n#include <slotheap.h>\n#in"
  },
  {
    "path": "include/tail.h",
    "chars": 250,
    "preview": "/**\n * @file tail.h\n *\n * @brief JT tail physics.\n */\n#ifndef TAIL_H\n#define TAIL_H\n\n#include \"common.h\"\n\n/**\n * @class "
  },
  {
    "path": "include/tank.h",
    "chars": 1280,
    "preview": "/**\n * @file tank.h\n */\n#ifndef TANK_H\n#define TANK_H\n\n#include \"common.h\"\n#include <jt.h>\n#include <cm.h>\n#include <po."
  },
  {
    "path": "include/target.h",
    "chars": 670,
    "preview": "/**\n * @file target.h\n */\n#ifndef TARGET_H\n#define TARGET_H\n\n#include \"common.h\"\n#include <dl.h>\n#include <xform.h>\n\n/**"
  },
  {
    "path": "include/text.h",
    "chars": 3837,
    "preview": "/**\n * @file text.h\n *\n * @brief Text manipulation functions.\n */\n#ifndef TEXT_H\n#define TEXT_H\n\n#include \"common.h\"\n#in"
  },
  {
    "path": "include/thread.h",
    "chars": 967,
    "preview": "/**\n * @file thread.h\n *\n * @brief Semaphore, thread, and critical section utilities.\n */\n#ifndef THREAD_H\n#define THREA"
  },
  {
    "path": "include/tn.h",
    "chars": 1627,
    "preview": "/**\n * @brief tn.h\n */\n#ifndef TN_H\n#define TN_H\n\n#include \"common.h\"\n#include <alo.h>\n#include <bsp.h>\n#include <vec.h>"
  },
  {
    "path": "include/transition.h",
    "chars": 2398,
    "preview": "/**\n * @file transition.h\n *\n * @brief Level transitions.\n */\n#ifndef TRANSITION_H\n#define TRANSITION_H\n\n#include \"commo"
  },
  {
    "path": "include/turret.h",
    "chars": 1042,
    "preview": "/**\n * @file turret.h\n *\n * @brief Stationary turret from Murray levels(?).\n */\n#ifndef TURRET_H\n#define TURRET_H\n\n#incl"
  },
  {
    "path": "include/tv.h",
    "chars": 1229,
    "preview": "/**\n * @file tv.h\n */\n#ifndef TV_H\n#define TV_H\n\n#include \"common.h\"\n#include <speaker.h>\n#include <screen.h>\n#include <"
  }
]

// ... and 218 more files (download for full content)

About this extraction

This page contains the full source code of the TheOnlyZac/sly1 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 418 files (1.5 MB), approximately 598.4k tokens, and a symbol index with 1799 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!